在理想情况下,希望深度学习模型能够在最佳光照条件下进行训练和测试。然而,现实世界中的情况远比这复杂得多。为了使机器学习模型能够更好地应对现实世界的挑战,有意识地在数据集中引入缺陷是至关重要的。降低图像质量正是可以在后处理中完成的任务,而无需收集更多数据并对其进行标记的头痛问题。
图像中可能会出现多种类型的缺陷,如模糊、对比度差、噪声、JPEG压缩等。在这些缺陷中,模糊可能是最具破坏性的。亚利桑那州立大学的研究人员考虑了模糊可能对图像分类的影响,特别是与其他技术相比。在他们的研究中,模糊和噪声对简单的分类任务产生了最不利的影响,这些任务涉及多种卷积神经网络架构。即使是少量的模糊(σ = 2)也会导致误分类。研究人员怀疑,模糊特别掩盖了卷积在特征抽象的早期阶段定位边缘的能力,导致网络训练初期的特征抽象不准确。
模糊可以作为预处理技术或图像增强技术应用。如果生产中的所有图像都可能涉及模糊,那么在训练、验证和测试中的所有图像都应该在预处理中进行模糊处理。然而,更常见的情况是,只有一些图像可能存在模糊。考虑以下情况:
在这些示例中,模糊是一个有用的增强步骤。也就是说,一些图像在随机数量上进行了变化,以模拟不同程度的模糊。
在核心上,模糊图像涉及获取邻近像素并平均它们——实际上,这减少了细节并创造了感知为模糊的效果。因此,在核心上,当实现不同程度的模糊时,正在确定要包含多少邻近像素。从单个像素测量这种扩散作为标准差,在水平(X)和垂直(Y)方向上。标准差越大,图像接收到的模糊就越多。
可以通过Wikipedia了解模糊量。像OpenCV这样的库实现了高斯滤波器,这些滤波器可以用于开源Python脚本中的高斯模糊。利用这些方法,可以在训练管道中的每张图像上添加随机数量的模糊。建议变化输入图像接收到的模糊程度,以更接近现实世界的情况。
# 示例:使用OpenCV实现高斯模糊
import cv2
image = cv2.imread('path_to_image.jpg')
blurred_image = cv2.GaussianBlur(image, (21, 21), 0)
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
或者,Roboflow允许轻松设置单个图像希望接收的最大高斯模糊量(比如说,n),训练集中的每个图像接收的模糊量在(0,n)之间,以均匀随机的方式进行采样。
Roboflow还记录了每张图像的变化情况,因此可以轻松地看到哪种程度的模糊可能是最具问题的。