改变训练图像以训练神经网络
Altering trained images to train neural network
我目前正在尝试制作一个程序,仅根据外观区分烂橙子和可食用橙子。为此,我计划使用卷积神经网络对烂橙子和正常橙子进行训练。经过一番搜索,我只能找到一个大约有一个数据库。黑色背景上的 150 个烂橙子和 150 个正常橙子 (http://www.cofilab.com/downloads/)。显然,机器学习模型至少需要几千个橙子才能达到 90% 左右的准确率。但是,我可以通过某种方式改变这 150 个橙子以生成更多橙子照片吗?通过改变,我的意思是在柑橘类水果上添加不同深浅的橙色来制作 "different orange." 这是训练神经网络的有效方法吗?
这确实是增加数据集的好方法。例如,您可以对图像应用高斯模糊。它们会变得模糊,但与原来的不同。您也可以反转图像。或者,在最后一种情况下,寻找新图像并应用引用的技术。
数据扩充正是您要找的。在你的情况下,你可以做不同的事情:
应用滤镜以获得略有不同的图像,如前所述,您可以使用高斯模糊。
把橙子切开放在不同的背景里
用不同的缩放因子缩放橘子。
旋转图像。
制造合成腐烂的橙子。
混合前面提到的所有不同组合。通过这种增强,您可以轻松创建数千种不同的橙子。
我用 12000 张图像的数据集做了类似的事情,我可以创建 630000 个样本
这是增加约会次数的好方法。你将做什么取决于你的数据。例如,如果您正在对从传感器获得的数据进行训练,您可能希望向训练数据添加一些噪声,以便您可以增加数据集。毕竟,稍后您可以预料到传感器会发出一些噪音。
假设您将在图像上对其进行训练,这里有一个非常好的 github 存储库,它提供了使用这些技术的方法。这个 python 库可帮助您为机器学习项目增强图像。它将一组输入图像转换为一组新的、更大的稍有改变的图像。
Link: https://github.com/aleju/imgaug
特点:
可用的大多数标准增强技术。
技术可以应用于图像和 keypoints/landmarks
图片。在开始时定义一次增强序列
实验,然后多次应用。
为每个增强定义灵活的随机范围,例如“旋转
每个图像旋转 -45 到 45 度之间的值”或“旋转每个图像
图像由从正态分布 N(0, 5.0)".
采样的值
轻松将所有随机范围转换为确定性值
以完全相同的方式扩充不同批次的图像
(例如图像及其热图)。
数据增强确实是提升训练集的好方法,但考虑到过度拟合的可能性,它仍然不足以自行端到端地训练深度网络。您应该查看领域适应,您可以在其中采用预训练模型,例如在 imagenet 数据集上训练的 inception,并针对您的问题对其进行微调。由于您只需学习对用例进行分类所需的参数,因此可以使用相对较少的可用训练数据获得良好的准确性。我主持了一个使用这种技术进行分类的演示 here。用您的数据集尝试一下,看看是否有帮助。该演示负责预训练模型以及您将上传的数据集的数据扩充。
我目前正在尝试制作一个程序,仅根据外观区分烂橙子和可食用橙子。为此,我计划使用卷积神经网络对烂橙子和正常橙子进行训练。经过一番搜索,我只能找到一个大约有一个数据库。黑色背景上的 150 个烂橙子和 150 个正常橙子 (http://www.cofilab.com/downloads/)。显然,机器学习模型至少需要几千个橙子才能达到 90% 左右的准确率。但是,我可以通过某种方式改变这 150 个橙子以生成更多橙子照片吗?通过改变,我的意思是在柑橘类水果上添加不同深浅的橙色来制作 "different orange." 这是训练神经网络的有效方法吗?
这确实是增加数据集的好方法。例如,您可以对图像应用高斯模糊。它们会变得模糊,但与原来的不同。您也可以反转图像。或者,在最后一种情况下,寻找新图像并应用引用的技术。
数据扩充正是您要找的。在你的情况下,你可以做不同的事情:
应用滤镜以获得略有不同的图像,如前所述,您可以使用高斯模糊。
把橙子切开放在不同的背景里
用不同的缩放因子缩放橘子。
旋转图像。
制造合成腐烂的橙子。
混合前面提到的所有不同组合。通过这种增强,您可以轻松创建数千种不同的橙子。
我用 12000 张图像的数据集做了类似的事情,我可以创建 630000 个样本
这是增加约会次数的好方法。你将做什么取决于你的数据。例如,如果您正在对从传感器获得的数据进行训练,您可能希望向训练数据添加一些噪声,以便您可以增加数据集。毕竟,稍后您可以预料到传感器会发出一些噪音。
假设您将在图像上对其进行训练,这里有一个非常好的 github 存储库,它提供了使用这些技术的方法。这个 python 库可帮助您为机器学习项目增强图像。它将一组输入图像转换为一组新的、更大的稍有改变的图像。 Link: https://github.com/aleju/imgaug
特点:
可用的大多数标准增强技术。
技术可以应用于图像和 keypoints/landmarks 图片。在开始时定义一次增强序列 实验,然后多次应用。
为每个增强定义灵活的随机范围,例如“旋转 每个图像旋转 -45 到 45 度之间的值”或“旋转每个图像 图像由从正态分布 N(0, 5.0)".
采样的值
轻松将所有随机范围转换为确定性值 以完全相同的方式扩充不同批次的图像 (例如图像及其热图)。
数据增强确实是提升训练集的好方法,但考虑到过度拟合的可能性,它仍然不足以自行端到端地训练深度网络。您应该查看领域适应,您可以在其中采用预训练模型,例如在 imagenet 数据集上训练的 inception,并针对您的问题对其进行微调。由于您只需学习对用例进行分类所需的参数,因此可以使用相对较少的可用训练数据获得良好的准确性。我主持了一个使用这种技术进行分类的演示 here。用您的数据集尝试一下,看看是否有帮助。该演示负责预训练模型以及您将上传的数据集的数据扩充。