image-processing - 卷积神经网络中的随机裁剪和翻转

标签 image-processing neural-network conv-neural-network

在许多有关卷积神经网络(CNN)的研究论文中,我看到人们从图像中随机裁剪出一个正方形区域(例如224x224),然后将其水平随机翻转。为什么要随机裁剪和翻转?另外,为什么人们总是在正方形区域上裁剪。 CNN不能在矩形区域上工作吗?

最佳答案

这称为数据增强。通过对训练数据进行转换,您可以添加综合数据点。这使模型面临其他变化,而无需花费更多的时间来收集和注释更多数据。这可以减少过拟合并提高模型的泛化能力。

翻转图像的直觉是,对象应与其镜像一样可识别。请注意,水平翻转是经常使用的翻转类型。垂直翻转并不总是有意义,但这取决于数据。

裁剪背后的想法是减少背景对CNN决策的影响。如果您有用于定位对象位置的标签,这将很有用。这使您可以将周围区域用作负面示例并构建更好的检测器。随机裁剪还可以充当正则化器,并根据对象的各个部分的存在来进行分类,而不是将所有内容都集中在可能并不总是存在的非常独特的功能上。


人们为什么总是在正方形区域上裁剪?


这不是CNN的限制。这可能是对特定实现的限制。或通过设计,因为假设平方输入可以优化速度实现。我不会读太多。

输入大小可变与固定输入的CNN:

这并非特定于裁剪为正方形,而是更普遍地说,为什么有时在输入到CNN之前会重新调整输入大小/裁剪/扭曲输入:

要记住的一点是,设计CNN涉及决定是否支持可变大小的输入。卷积运算,池化和非线性将适用于任何输入维度。但是,当使用CNN求解图像分类时,通常会遇到诸如Logistic回归或MLP之类的完全连接的层。 CNN完全连接的层是如何生成固定大小的输出矢量的。固定大小的输出可以将CNN限制为固定大小的输入。

肯定存在一些变通办法,以允许可变大小的输入并仍然产生固定大小的输出。最简单的方法是使用卷积层对图像中的常规小块进行分类。这个想法已经存在了一段时间。其背后的目的是检测图像中物体的多次出现并对每个出现进行分类。我能想到的最早的例子是Yann LeCun的小组在1990年代对simultaneously classify and localize digits in a string所做的工作。
这被称为将具有完全连接的层的CNN变成完全卷积的网络。 Most recent examples of fully-convolutional networks用于解决语义分割并对图像中的每个像素进行分类。在此需要产生与输入尺寸匹配的输出。
另一种解决方案是在CNN的末尾使用全局池化,以将可变大小的要素映射转换为固定大小的输出。池化窗口的大小设置为等于从上一次转化计算得出的特征图。层。

关于image-processing - 卷积神经网络中的随机裁剪和翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842308/

相关文章:

tensorflow - 手部地标坐标神经网络不收敛

neural-network - 神经网络层的输出在哪些方面有用?

c++ - 在类似于 Matlab 的 CAXIS 的 OpenCV 4 (c++) 中设置颜色限制轴

neural-network - 数独求解器的神经网络

c++ - C++中的多线程图像处理

keras - Dense 期望 2d,但在 LSTM 中得到 3d

machine-learning - 当输入有多个输出值时,我可以使用神经网络进行回归吗?

python - 使用没有节点属性的 DGL GNN 对图进行分类

c# - 将 curl 效果应用于静态图像 C#

c++ - 使用带有 SURF 的 SVM 时出错