深度学习中的图像预处理

Posted

技术标签:

【中文标题】深度学习中的图像预处理【英文标题】:Image preprocessing in deep learning 【发布时间】:2017-01-02 14:44:36 【问题描述】:

我正在尝试对图像进行深度学习。我有大约 4000 张来自不同相机的图像,它们具有不同的光照条件、图像分辨率和视角。

我的问题是:什么样的图像预处理有助于提高物体检测?(例如:对比度/颜色归一化、去噪等)

【问题讨论】:

除非他们查看您的数据,否则没有人可以回答这个问题。一般用深度学习预处理是没有必要的。如果您有足够的数据,您的模型可以学习如何适应数据的变化。 是的,我知道我的问题过于笼统,但您的回答对我有所帮助。我真正的问题是深度学习对图像质量有多敏感? 深度网络或 CNN 具有过滤器倾向于在您的数据集上学习。您拥有的数据量和种类越多,您的系统就越强大。当然,如果您的目标域与您的训练域不同,这很敏感。 添加到您列表中的另一种图像预处理技术可能是照明校正。请参阅THIS POST 了解更多信息。 如果您考虑对您的图像使用 伽马校正,请查看THIS POST。 【参考方案1】:

用于在将图像输入神经网络之前对图像进行预处理。最好使数据以零为中心。然后尝试归一化技术。当数据在一个范围内缩放而不是任意大的值或太小的值时,它肯定会提高准确性。

一个示例图像将是:-

这是 Stanford CS231n 2016 Lectures 的解释。

*

归一化是指对数据维度进行归一化,使它们具有大致相同的规模。对于图像数据,有两种常见的方法可以实现这种标准化。一种是将每个维度除以其标准差,一旦它以零为中心:(X /= np.std(X, axis = 0))。这种预处理的另一种形式是对每个维度进行归一化,以便沿维度的最小值和最大值分别为 -1 和 1。仅当您有理由相信不同的输入特征具有不同的尺度(或单位)时,应用此预处理才有意义,但它们对学习算法的重要性应该大致相同。在图像的情况下,像素的相对比例已经大致相等(并且在 0 到 255 的范围内),因此没有必要执行这个额外的预处理步骤。

*

上述摘录的链接:- http://cs231n.github.io/neural-networks-2/

【讨论】:

您的回答自相矛盾。您写道规范化肯定会提高准确性,但同时您引用了一段文字说在某些情况下可能不需要规范化。 这并不矛盾。引用说这不是绝对必要的。因此,当有提高模型准确性的空间时,您可以使用此步骤。【参考方案2】:

这肯定是这篇文章的迟到回复,但希望能帮助那些偶然发现这篇文章的人。

这是我在网上找到的一篇文章Image Data Pre-Processing for Neural Networks,我认为这肯定是一篇关于如何训练网络的好文章。

文章的主旨是说

1) 由于 NN 中的少量数据(图像)应根据 NN 设计采用的图像尺寸进行缩放,通常为正方形,即 100x100,250x250

2) 考虑特定图像集合中所有输入图像的 MEAN(左图)和 标准差(右图)值

3) 标准化图像输入通过从每个像素中减去平均值然后将结果除以标准差来完成,这使得在训练网络时收敛更快。这类似于以零为中心的高斯曲线

4)降维 RGB转灰度图像,允许神经网络性能对那个维度保持不变,或者让训练问题更容易处理

【讨论】:

值得注意的是,本文中提到的平均值是“全局”平均值。所有图像都减去了全局平均值,而不是每幅图像都减去了自己的平均值。 @blahblahetcc 如果我不计算我的数据集的均值和标准差,而是使用一些现成的 ImageNet 或 COCO 等著名数据集的均值和标准差,那可以吗?在线? 均值减法是否有助于对抗由于光照变化导致的模型性能下降?在测试真实案例时,我们可能会遇到从强光到弱光的各种照明情况。 @hafiz031 您是否在您的数据上使用其他人的预训练分类器/权重?如果是这样,您需要复制在其他人的培训过程中使用的预处理步骤。但是,如果您正在进行迁移学习(即,使用其他人的预训练分类器作为根据您的数据训练新分类器的起点),那么理论上您可以进行任何您想要的预训练。如果我说的不正确,我希望有人能纠正我,但我认为全局减法等并不是绝对必要的,而是帮助模型收敛,或者更快地收敛。【参考方案3】:

除了上面提到的之外,提高低分辨率图像 (LR) 质量的一个好方法是使用深度学习进行超分辨率。这意味着建立一个深度学习模型,将低分辨率图像转换为高分辨率图像。我们可以通过应用退化函数(模糊等过滤器)将高分辨率图像转换为低分辨率图像。这基本上意味着 LR = 退化(HR),其中退化函数会将高分辨率图像转换为低分辨率。如果我们能找到这个函数的逆函数,那么我们将低分辨率图像转换为高分辨率图像。这可以被视为一个监督学习问题,并使用深度学习来找到反函数来解决。在介绍使用深度学习的超分辨率时遇到了这个interesting article。我希望这会有所帮助。

【讨论】:

【参考方案4】:

阅读this,希望对您有所帮助。这个想法是将输入图像分成几部分。这称为 R-CNN(here 是一些示例)。这个过程有两个阶段,对象检测和分割。对象检测是通过观察梯度变化来检测前景中某些对象的过程。分割是将对象放在具有高对比度的图像中的过程。高级图像检测器使用贝叶斯优化,可以使用局部优化点检测接下来会发生什么。

基本上,在回答您的问题时,您提供的所有预处理选项似乎都不错。由于对比度和颜色归一化使计算机能够识别不同的物体,而去噪将使渐变更容易区分。

我希望所有这些信息对你有用!

【讨论】:

一般不推荐仅链接的答案。请将链接中的相关部分添加到您的回答中。随着时间的推移,链接可能会失效。 感谢您的回答!实际上我正在尝试使用 py-faster-rcnn,所以我听说了 R-CNN。我的问题是我的数据集的图像质量参差不齐,真正的问题是深度学习对图像质量有多敏感?

以上是关于深度学习中的图像预处理的主要内容,如果未能解决你的问题,请参考以下文章

常见医学图像处理深度学习方法与热点应用附参考文献

深度学习--图像处理中的注意力机制

承接TensorFlow深度学习代做pytorch图像处理

深度学习--图像预处理

无需深度学习或机器学习的图像处理

12大类150个图像处理和深度学习开源数据集