背景引入
在训练图像识别的深度神经网络时,使用大量更多的训练数据,可能会使网络得到更好的性能,例如提高网络的分类准确率,防止过拟合等。人为扩展训练数据时对数据的操作最好能反映真实世界的变化。人为扩充数据集之后如果分类准确率有明显的提升,说明我们对数据所做的拓展操作是良性的,能够“反映真实世界的变化”,就会被用到整个数据集的扩展。反之,则说明不能用此操作对数据集进行拓展。
例如在2003年Patrice Simard等人所著的一篇论文中[1]他们把MNIST手写数字数据集通过旋转,转换和扭曲进行扩展。通过在这个扩展后的数据集上的训练,他们把MNIST手写数字识别的准确率提升到了98.9%。然后还在“弹性扭曲”的数据集上进行了实验,这是一种特殊的为了模仿手部肌肉的随机抖动的图像扭曲方法。通过使用弹性扭曲扩展的数据,他们最终达到了99.3%的分类准确率。
具体方法
原图
图像强度变换
亮度变化
图像整体加上一个随机偏差,或整体进行尺度的放缩
-
亮度增强
-
亮度减弱
brightness = 1 + np.random.randint(1, 9) / 10
brightness_img = img.point(lambda p: p * brightness)
不影响label的位置
对比度变化
扩展图像灰度级动态范围,对两极的像素进行压缩,对中间范围的像素进行扩展
range_contrast=(-50, 50)
contrast = np.random.randint(*range_contrast)
contrast_img = img.point(lambda p: p * (contrast / 127 + 1) - contrast)
不影响label的位置
图像滤波
锐化
增强图像边缘信息
identity = np.array([[0, 0, 0],
[0, 1, 0],
[0, 0, 0]])
sharpen = np.array([[ 0, -1, 0],
[-1, 4, -1],
[ 0, -1, 0]]) / 4
max_center = 4
sharp = sharpen * np.random.random() * max_center
kernel = identity + sharp
sharpen_img = cv2.filter2D(img, -1, kernel)
不影响label的位置
高斯模糊
图像平滑
kernel_size

本文探讨了如何通过数据增强技术提升深度学习模型在图像识别任务中的性能。具体方法包括亮度、对比度调整,图像滤波(如锐化和模糊),透视变换(如翻转和裁剪),图像拉伸和变形,以及噪声注入等。这些技术旨在模拟真实世界的变化,防止过拟合并提高模型的泛化能力。例如,通过弹性扭曲和旋转扩展MNIST数据集,分类准确率从98.9%提升至99.3%。数据增强对于保持模型的鲁棒性和准确性至关重要。
最低0.47元/天 解锁文章
6546





