算法可以使用机器学习来区分各种对象并将它们分类以识别图片。这种开发技术使用数据扩展来创建表现更好的模型。机器学习模型必须能够在每种情况下识别一个对象,包括旋转,缩放和模糊图像。研究人员需要一种合成的方法,将培训数据合并并进行准确调整。
人为从先前收集的培训数据中人为地得出新数据的过程称为数据增强。技术包括种植,填充,翻转,旋转和调整大小。它增强了模型的性能,并解决了诸如过度拟合和缺乏数据之类的问题。
数据增强提供了多种选择用于修改原始图像的选项,并且可能有助于为大型模型提供足够的数据。因此,重要的是要了解数据增强的优势和缺点。让我们跳入它。
介绍
如果有足够的数据,则卷积神经网络(CNN)能够做令人难以置信的事情。但是,为需要培训的每个功能选择适当数量的培训数据可能具有挑战性。如果用户没有足够的信息,网络可能会过度贴上培训数据。现实的图像包括不同的尺寸,姿势,变焦,照明,噪音等。
采用数据增强方法来使网络适应这些经常发生的现象。该网络将在训练过程中通过不同角度旋转输入图像,沿不同轴翻转图像或翻译/裁剪图像。
CNN需要附加实例,以显示机器学习模型,因为添加了更多参数。更高的性能可以以更深的网络为代价,需要更多的培训数据和更长的培训时间。
因此,避免寻找或产生适合实验的其他图像也是实用的。数据增强可以降低与扩大可访问培训样本池相关的成本和工作。
数据增强技术
一些图书馆通过制作培训图像的副本并将其与原件一起存储来采用数据增强。这为机器学习模型生成了新的培训数据。其他库只是指定一组转换,以应用于培训数据输入。这些更改是随机进行的。因此,优化器正在搜索更多空间。这具有不需要更多的光盘空间来增强培训的好处。
图像数据的增强现在已成为CNN的著名和常见方法,涉及以下技术:
翻转
旋转(在90度和较细的角度)
翻译
缩放
盐和胡椒噪声添加
数据增强甚至已用于图像识别等应用。
解释我要拍摄一张猫的原始图像,并在该
上执行动作i)翻转:
如果图像被翻转,则优化器不会偏向,因为某些功能不仅仅是一侧。原始的训练图像在图像的一个轴上垂直或水平旋转以进行此增强。结果,功能不断变化。
虽然翻转是可与旋转相当的增强,但会导致镜像。特定的元素,这样的人的头部,要么保留在图像的顶部,底部,左或右。
ii)旋转:
即使旋转(一种增强类型)经常以90度角进行,如果对其他数据的需求很大,它也可以在较小或微小的度数下进行。背景颜色经常固定以进行旋转,以便在旋转图像时将其合并。否则,该模型可能会推断出更改的背景是一个独特的特征。当背景在所有旋转照片中相同时,这都可以很好地工作。
旋转运动由某些功能使用。例如,一个人的头将年满10、22.7或-8度。与翻转不同,旋转不会改变特征的方向,也不会导致镜像。这使模型更容易将角度视为人的独特特征。
iii)翻译:
翻译图像时,主要对象以不同的方式移动框架。想想一个人在框架中央的一个人,其所有组件可见为示例,并以此为起点。接下来,将人移到角落并翻译图像,使腿在底部切碎。
您可以看到图像在角落略微裁剪
翻译确保对象在整个图像上可见,而不仅仅是在中间或一侧。可以将培训数据扩展到包括一系列不同的翻译,以便网络可以识别翻译的对象。
iv)缩放:
通过缩放,机器学习模型的培训数据变得更加多样化。无论图像被放大多么近或远,缩放图像都可以保证对象已被网络识别。有时对象的中心非常小。该物体有时可能会放大,甚至在某些地方裁剪。
您可以看到图像已放大并在某些地方裁剪。
v)盐和胡椒噪声:
添加类似于盐和胡椒粉的黑色和白点称为“盐和胡椒噪声添加”。这模仿了实际照片中发现的灰尘和缺陷。摄影师的相机甚至不需要锋利或一尘不染才能识别图片。为了通过更现实的视觉效果进行模型培训,扩展了训练数据集。
简单的实现
datagen=ImageDataGenerator(rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')
img=load_img('Images/Dog_or_cat.jpg') #Image
X=img_to_array(img)
X=X.reshape((1,)+X.shape)
#this.flow() command below generates batches of randomly transformed images
#and saves the result in 'preview/' directory
i=0
for batch in datagen.flow(X,batch_size=1,save_to_dir='preview',save_prefix='cat',save_format='jpeg'):
i+=1
if i>20:
break
py
向图像添加盐和胡椒噪声:
def add_salt_noise(img):
# Getting the dimensions of the image
row , col = img.shape
# Randomly pick some pixels in the
# image for coloring them white
# Pick a random number between 300 and 10000
number_of_pixels = random.randint(300, 10000)
for i in range(number_of_pixels):
# Pick a random y coordinate
y_coord=random.randint(0, row - 1)
# Pick a random x coordinate
x_coord=random.randint(0, col - 1)
# Color that pixel to white
img[y_coord][x_coord] = 255
# Randomly pick some pixels in
# the image for coloring them black
number_of_pixels = random.randint(300 , 10000)
for i in range(number_of_pixels):
# random y coordinate
y_coord=random.randint(0, row - 1)
# random x coordinate
x_coord=random.randint(0, col - 1)
# Color that pixel to black
img[y_coord][x_coord] = 0
return img
# salt-and-pepper noise can
# be applied only to grayscale images
# Reading the color image in grayscale image
img = cv2.imread('Images/Dog_or_cat.jpg',
cv2.IMREAD_GRAYSCALE)
#Storing the image
cv2.imwrite('Images/salt-and-pepper-lena.jpg',
add_salt_noise(img))
py
优点
- 由于数据增强在识别模型以前从未见过的样品方面的帮助的结果,模型的预测改进变得更加准确。
- 该模型可以访问足够的数据来理解和训练所有给定参数。在数据收集具有挑战性的应用程序中,这可能至关重要。
- 通过增加数据增强数据的可变性来帮助避免模型过度拟合。
- 可以加快收集其他数据更长的过程。
- 如果数据收集昂贵,则可以降低获取不同类型数据所需的成本。
缺点
当无法有意提供应用程序所需的多样性时,数据增强是毫无用处的。例如,如果针对鸟类识别模型的训练数据仅包括红鸟。通过改变鸟类的颜色,可以改善训练数据。
。当初始数据中没有足够的多样性时,人工增强方法可能无法捕获鸟类的逼真的颜色细节。例如,如果增强方法仅将红色代替为蓝色,绿色等。现实的非红色鸟类可能具有更复杂的色彩变化,从而使模型可以错过颜色。即便如此,如果要增强数据才能成功起作用,那么拥有足够的数据至关重要。
拟合不足是由于数据增加不当而引起的另一个问题。为了说明较高的培训数据特征,必须增加训练时期的数量。如果未在足够数量的样本上进行优化,则可能具有次优构。
数据增强也将无法纠正现有数据集中的偏差。在同一鸟类的示例中,如果训练数据仅包括老鹰,那么开发一种人工增强技术会产生各种鸟类。
。,尽管它有许多缺点,但它仍然是研究人员和行业中使用的最佳方法之一。