随机裁剪数据增强卷积神经网络

问题描述 投票:6回答:2

我正在训练卷积神经网络,但有一个相对较小的数据集。所以我正在实施增强它的技术。现在,这是我第一次研究核心计算机视觉问题,因此对它来说相对较新。为了进行扩充,我阅读了许多技术,其中一篇在论文中被大量提及的是随机裁剪。现在我正在努力实现它,我已经搜索了很多关于这种技术,但找不到合适的解释。有几个疑问:

随机裁剪如何帮助数据增加?是否有任何库(例如OpenCV,PIL,scikit-image,scipy)在python中隐式实现随机裁剪?如果没有,我该如何实施呢?

python opencv image-processing deep-learning conv-neural-network
2个回答
9
投票

在我看来,随机裁剪有助于数据增加的原因是,虽然保留了图像的语义(除非你选择了一个非常糟糕的裁剪,但我们假设您设置了随机裁剪,这样的概率非常低)激活值你进入你的转发网是不同的。因此,实际上我们的转换网络学会将更广泛的空间激活统计数据与某个类别标签相关联,因此通过随机裁剪进行数据增强有助于提高我们的特征检测器在网络中的稳健性。同样,随机作物产生不同的中间激活值并产生不同的前向通道,因此它就像一个“新的训练点”。

这也不是微不足道的。请参阅最近关于神经网络中对抗性示例的工作(相对较浅的AlexNet大小)。图像在语义上看起来相同,或多或少,当我们通过一个带有softmax分类器的神经网络传递它们时,我们可以得到截然不同的类概率。因此,从语义的角度来看,微妙的变化最终可能会通过转发网络进行不同的前向传递。有关更多详细信息,请参阅Intriguing properties of neural networks

要回答你问题的最后一部分:我通常只是制作我自己的随机裁剪脚本。假设我的图像是(3,256,256)(3个RGB通道,256x256空间大小),您可以编写一个循环,通过随机选择一个有效的角点来获取图像的224x224个随机裁剪。所以我通常会计算一个有效角点数组,如果我想要10个随机作物,我会从这个集合中随机选择10个不同的角点,比如我选择(x0,y0)作为我的左上角点,我会选择裁剪X [x0:x0 + 224,y0:y0 + 224],就像这样。我个人喜欢从一组预先计算的有效角点中随机选择,而不是一次随机选择一个角落,因为这样我保证我不会得到一个重复的作物,尽管实际上它的概率可能很低。


0
投票

要回答“如何实施裁剪”问题,您可能想要探索https://github.com/aleju/imgaug。有一个Crop增强器可以让你做随机裁剪。还有很多其他有趣的增强剂。

© www.soinside.com 2019 - 2024. All rights reserved.