改变训练图像以训练神经网络

Posted

技术标签:

【中文标题】改变训练图像以训练神经网络【英文标题】:Altering trained images to train neural network 【发布时间】:2017-05-28 06:33:13 【问题描述】:

我目前正在尝试制作一个程序,仅根据外观来区分腐烂的橙子和可食用的橙子。为此,我计划使用卷积神经网络对烂橙子和正常橙子进行训练。经过一番搜索,我只能找到一个大约的数据库。黑色背景上的 150 个烂橙子和 150 个普通橙子 (http://www.cofilab.com/downloads/)。显然,机器学习模型至少需要几千个橙子才能达到 90% 以上的准确度。但是,我可以以某种方式更改这 150 个橙子以生成更多橙子​​照片吗?通过改变,我的意思是在柑橘类水果上添加不同深浅的橙色来制作“不同的橙色”。这会是训练神经网络的有效方法吗?

【问题讨论】:

【参考方案1】:

这是增加约会次数的好方法。您将做什么取决于您的数据。例如,如果您正在对从传感器获得的数据进行训练,您可能希望在训练数据中添加一些噪声,以便增加数据集。毕竟,您可以预料到稍后传感器会发出一些噪音。

假设您将在图像上对其进行训练,这里有一个非常好的 github 存储库,它提供了使用这些技术的方法。这个 Python 库可帮助您为机器学习项目增加图像。它将一组输入图像转换为一组新的、更大的、稍微改变的图像。 链接:https://github.com/aleju/imgaug

特点:

大多数可用的标准增强技术。

技术可以应用于图像和关键点/地标 图片。在开始时定义一次增强序列 实验,然后多次应用。

为每个增强定义灵活的随机范围,例如“旋转 每个图像由 -45 到 45 度之间的值”或“旋转每个图像 图像由从正态分布 N(0, 5.0) 中采样的值"。

轻松将所有随机范围转换为确定性值 以完全相同的方式增加不同批次的图像 (例如图像及其热图)。

【讨论】:

【参考方案2】:

数据增强正是您所寻找的。在你的情况下,你可以做不同的事情:

    应用滤镜以获得略有不同的图像,正如前面所说,您可以使用高斯模糊。

    剪下橘子,放在不同的背景中。

    用不同的比例因子缩放橙子。

    旋转图像。

    制作合成的烂橙子。

    混合前面提到的所有不同组合。通过这种增强,您可以轻松创建数千种不同的橙子。

我用 12000 张图像的数据集做了类似的事情,我可以创建 630000 个样本

【讨论】:

【参考方案3】:

这确实是增加数据集的好方法。例如,您可以对图像应用高斯模糊。它们会变得模糊,但与原来的不同。您也可以反转图像。或者,在最后一种情况下,寻找新图像并应用所引用的技术。

【讨论】:

【参考方案4】:

数据增强确实是提升训练集的好方法,但仍然不足以单独训练深度网络,因为它可能会过度拟合。您应该查看域适应,在其中采用预训练模型(例如在 imagenet 数据集上训练的 inception)并针对您的问题对其进行微调。由于您只需学习对用例进行分类所需的参数,因此可以使用相对较少的可用训练数据来实现良好的准确性。我已经使用这种技术here 主持了一个分类演示。用你的数据集试试看它是否有帮助。该演示负责预训练模型以及您将上传的数据集的数据增强。

【讨论】:

以上是关于改变训练图像以训练神经网络的主要内容,如果未能解决你的问题,请参考以下文章

数据增强

深度神经网络训练的必知技巧

如何准备图像以使用 Python/Keras 训练 ConvNet?

从 3d 图像创建补丁以进行训练

Keras如何改变加载模型的可训练层

CNN训练错误执行Tensorflow Python以识别狗和猫的图像