图像增强(图像增强心得体会)

圈圈笔记 50

在图像分类时遇到问题,很烦恼?

我们首先看看在处理图像数据时,我们会遇到的问题,其中之一是图像不一致,要么太大,要么太小,有些是矩形,有些是正方形。另一个经常遇到的问题是训练集中的图像数量经常导致过度拟合。为了解决上述这两项问题,本文概述了一种使用增强变换的技术,对训练集中的图像进行变换,以提高模型识别图像不同版本的能力,增加了模型所具有的信息的广度。它现在变得更适合于识别具有不同对比度、尺寸、角度等的图像中的目标对象。

为了说明增强如何工作,我们查看了狗VS猫的数据集,并使用了Jeremy Howard和Rachel Thomas的fast.ai深度学习库。

I.基线模型

为了将图像分类为狗或猫,我们使用resnet34来训练模型。首先使用0.03或1的学习率来训练模型,不使用数据增加。

基线模型

有了这个,我们看到了0.98584的验证准确度。

下面看一下混淆矩阵:

我们看到26张图像,2000年以来有20只猫和6只狗被错误分类。

II.应用扩充变换

为了减少这种错误分类错误,我们现在增加训练数据,看看是否有改进的地方。我们可以选择自上而下的转换或侧面转换。下面可以快速查看涉及的类型:

1.基本变换 - 角度(旋转)和照明的变化

2.侧面转换 - 角度和照明+垂直轴翻转的变化

3.自上而下的变换 - 角度和光线的变化+围绕水平轴翻转并旋转90、180、270度。

在这里我们使用侧面转换,因为考虑到我们有从侧面拍摄的狗和猫的图片(而不会从顶部拍摄),它们可能需要水平翻转而不是垂直翻转。下面看一看猫咪形像的6个随机转换:

由于图像的性质,自上而下的转换并不合适上下颠倒的狗猫的图像并不常见。

在训练这个网络的同时,学习率保持不变,以便仅看到由于增强而导致精度差异。当我们使用增强来训练网络时,每个epoch都会生成一个图像的新变换。因此,模型在每个epoch会看到相同数量的图像(尽可能多地存在于原始训练数据中),但每次都是这些图像的新版本。因此,模型所见的图像范围随着epoch的增加而增加。

诸如ResNets之类的网络是经过预训练的,即,除了完全连接的层之外,该体系架构还具有用于每层的预先计算权重的集合。在早期训练模型时,我们使用了ResNet34的预先计算权重。但是这一次,由于我们使用了新的训练图像集,所以设置了Precompute = False,以确保该模型为新模型,从头开始计算激活。如果不这样做,我们仍然会使用与原始训练数据相对应的预计算激活,而不是使我们的准确性得到提高。

用转换后的图像训练网络

现在我们得到0.98779的验证准确度,这是对以前的模型的改进。

从上面的混淆矩阵中,我们看到这次我们对22个图像进行了错误分类,与之前相比,误差减少了。因此,我们增加了模型的预测能力。

III.测试时间增强:

虽然增强有助于为我们提供更好的模型,但所谓的测试时间增量(TTA)可以进一步提高预测准确性。要理解为什么需要这样,让我们先看看一些错误分类的图像:

我们在这里看到,由于对比度差,图像是矩形的而不是方形的,或者因为狗/猫在图像中仅处于很小的一部分,所以一些图像被错误分类。当模型试图预测该图像时,它只能看到图像的中心(默认情况下裁剪为中心的位置)。因此它无法预测图像中的动物是狗还是猫。

为了减少这些错误,我们使用TTA来预测初始测试图像的类别以及相同图像的4个随机变换。然后,我们对这些预测进行平均,以确定图像属于哪一类。

这背后的直觉是,即使测试图像不太容易进行预测,转换也会改变它,使得模型能够更好的捕捉到猫、狗的图像,预测的机会也会进一步提高。

使用TTA,我们现在得到了99.199的确认精度,只有16个错误分类的图像。

结论:

尽管基准的ResNet34模型很适合数据,也给出了相当不错的结果,但应用增强变换和TTA可以更好的减少错误分类错误,从而提高模型的准确性。我们在这里介绍的只是像翻转和旋转这样的基本增强技术,但是GAN也可以用来生成本文中建议的不同样式的图像。这样可能更有效。

除了对图像进行增强之外,还可以看到如何将增强应用于结构化数据以提高性能,就像处理非结构化数据的情况一样。

上一篇:

下一篇:

  推荐阅读

分享