python - 如何更好地预处理图像以获得更好的深度学习结果?

标签 python tensorflow machine-learning deep-learning data-science

我们正在尝试应用卷积神经网络对良好表面和有缺陷的表面进行分类。

好的和坏的图像大多如下:

好的:

enter image description here enter image description here

坏的:

enter image description here enter image description here

  1. 图片较大(高度:800 像素,宽度:500 像素)
  2. 相对于图像而言,缺陷非常局部并且
  3. 背景非常嘈杂
  4. 深度学习(6 x conv+pooling -> 展平 ->密集64->密集32)结果非常糟糕 (可能是由于有限的不良样本和非常小的缺陷模式)
  5. 还有其他缺陷模式,例如非常细微的划痕、残留物和污点等,这是我们希望使用深度学习而不是特定特征工程的主要原因之一。
  6. 我们可以而且愿意积累更多缺陷图像。

所以问题是:

  1. 深度学习在实践中是否是一种合适的缺陷检测工具?
  2. 如果是,我们如何将图像调整或预处理为深度学习模型真正可以使用的格式。 (我们可以应用一些已知的滤镜来降低背景的噪音吗?)
  3. 如果不是,除了深度模型之外,还有哪些其他实用技术可以使用。 模板匹配或其他任何东西实际上适合解决此类问题吗?
<小时/>

更新: 提出一个明确的圆形条纹检查器是个好主意。 它可以直接用于检查模式受到干扰的位置,或者用作深度学习的预处理步骤。

<小时/>

更新: 更微妙的图案“划痕”。 从风扇区域的底部开始向上并稍微向右一点有一个划痕。

enter image description here

最佳答案

Is deep learning even an appropriate tool for defect detection like this in practice.

深度学习无疑是一种有望普及的可能性。一般来说,它应该是最后的手段而不是第一种方法。缺点包括:

  • 很难包含先验知识。
  • 因此,您需要大量数据来针对一般情况训练分类器。
  • 如果成功,模型就会变得不透明。它可能取决于微妙的特性,如果制造过程发生最轻微的改变,就会导致它失败,并且没有简单的方法来修复它。

If yes, how can we adapt or pre-process the images to the formats that the deep learning models can really work with. (Could we apply some known filters to make the background much less noisy?)

与您最终决定使用的分类器无关,预处理应该是最佳的。

照明:照明不均匀。我建议定义一个感兴趣的区域,其中照明足够亮以看到某些东西。我建议计算许多图像的平均强度,并用它来标准化亮度。结果将是裁剪到感兴趣区域的图像,其中照明是均匀的。

圆形条纹:在您显示的图像中,由于条纹是圆形的,因此它们的方向取决于图像中的位置。我建议使用转换,将感兴趣的区域(圆的一部分)转换为梯形,其中每个条纹都是水平的,并且保留每个条纹的长度。

If no, what are other practical techniques that can be used other than deep models. Will things like template matching or anything else actually be a fit for this type of problems?

您可以尝试识别具有相对恒定属性的完整结构,而不是识别缺陷。 (这将是我在评论中建议的圆形条纹检查器)。在这里,一个明显要测试的事情是对如上所述预处理的图像中的每个像素进行 2D 傅立叶变换。如果条纹完好无损,您应该看到水平方向强度变化的频率比垂直方向低得多。我只需为许多“好”和“坏”像素绘制这两个量,然后检查是否已经允许进行某种分类。

如果您可以使用该方法预先选择可能的缺陷,那么您可以裁剪出一个小图像并将其接受深度学习或您想要使用的任何其他方法。

关于python - 如何更好地预处理图像以获得更好的深度学习结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57988620/

相关文章:

python - Pycharm Professional 与 WSL : Cannot read environment variables set with ~/. 配置文件

python - 每 10 个时期报告一次 Keras 模型评估指标?

python - 调用函数 : Tensor 'object' is not callable

python - 从 Tensorflow 迁移到 PyTorch 时模型定义的注意事项

machine-learning - 在 scikit-learn 中使用多标签随机森林没有标签分配的样本

machine-learning - 使用带有概率的 Vowpal wabbit 作为标签来预测概率

python - 无法 reshape 每日时间序列的数据

python - 我们如何将 OHLCV 1 分钟 Pandas Dataframe 重新采样为 5 分钟 Dataframe - 2020 方法?

tensorflow - 将channel_shift_range添加到Keras预处理(图像增强)中是否允许模型在可变光照情况下使用?

python - IBM Watson 无法正确解析来自 python 请求的 json 负载 (400)