训练一个复杂的机器学习或深度学习网络需要构建一个拥有足够数据的训练数据集。以图像分类为例,业界主流的数据集达到了百万量级,其中ImageNet数据集目前约有14197122张图片,共分为21841个类别。训练数据不足带来的主要问题是导致模型过拟合,即模型在训练集上具有较小的误差,但是在测试集上具有较大的误差。
改善模型过拟合主要有两种方法,一种为基于模型进行改进,例如L1/L2正则化、dropout、集成学习等;另一种为数据曾广,以图像数据集为例,及利用各种图像处理技术在不改变图像主体的情况下生成更多的图像数据。本文主要介绍如何基于图像数据进行数据曾广,在保持图像主体对象不变的情况可以通过平移、旋转、缩放、左右翻转、添加高斯白噪声、颜色变换、改变图像的亮度/清晰度/对比度等方式进行数据曾广。
旋转
opencv提供了带有可调节中心的缩放旋转,可以进行任意旋转。示例代码如下:
# rotation
rows, cols, depth = img.shape
for i in range(30, 360, 30):
M = cv.getRotationMatrix2D(((cols - 1) / 2.0, (rows - 1) / 2.0), i, 1)
dst = cv.warpAffine(img, M, (cols, rows))
cv.imwrite('./data_augmentation/rotation/rotation{}.jpg'.format(i), dst)
平移
示例代码如下:
# transformation
rows, cols, depth = img.shape
for i in range(10, 100, 10):
M = np.float32([[1, 0, i], [0, 1, i]])
dst = cv.warpAffine(img, M, (cols, rows))
cv.imwrite('./data_augmentation/transformation/transformation{}.jpg'.format(i), dst)
添加图像噪声
椒盐噪声及高斯噪声是比较常见的图像噪声。椒盐噪声为图像随机出现的黑白点,示例代码如下:
def sp_noise(image, prob):
'''
添加椒盐噪声
prob:噪声比例
'''
output = np.zeros(image.shape, np.uint8)
thres = 1 - prob
for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = random.random()
if rdn < prob:
output[i][j] = 0
elif rdn > thres:
output[i][j] = 255
else:
output[i][j] = image[i][j]
return output
添加高斯噪声示例代码如下:
def gasuss_noise(image, mean=0, var=0.001):
'''
添加高斯噪声
mean : 均值
var : 方差
'''
image = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)
# cv.imshow("gasuss", out)
return out
改变图像亮度、清晰度、对比度等
亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度。改变亮度对比度示例代码如下:
def contrast_brightness_(image, c, b): # C 是对比度,b 是亮度
h, w, ch = image.shape
blank = np.zeros([h, w, ch], image.dtype)
dst = cv.addWeighted(image, c, blank, 1-c, b) #改变像素的API
tmp = np.hstack((img, dst)) # 两张图片横向合并(便于对比显示)
cv.imshow("con-bri-demo", tmp)
利用图像处理技术可以基于原始图片衍生出大量的图片,可以很容易地将训练数据集扩大为原始的数十倍乃至上百倍。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/81653.html