用于图像分类的非方形图像

机器算法验证 卷积神经网络
2022-02-26 20:53:42

我有一个宽图像数据集:1760x128。我已经阅读了教程和书籍,其中大多数都指出输入图像应该是方形的,如果不是,它们会被转换为方形,以便在已经训练过的(方形图像上)cnns 中进行训练。有没有办法为非方形图像训练 cnn,或者我应该寻找另一个选项作为填充?

3个回答

根据分类器的不同,有几种方法可以解决该问题。滑动窗口是我最熟悉的方法,用于神经网络方法。这种方法涉及拍摄一个小的子图像,并在一些重叠的情况下上下移动它。一些问题包括找到最佳移位参数和多尺度问题。

最终检测通常取决于分类器对每个子图像属于该类的置信度:例如多数投票、总可能性或与决策边界的总距离。我在下面列出了一些材料,第一个是用于 HOG 分类器方法的,但概念是相同的。

  1. 对象检测滑动窗口
  2. 对象类别检测:滑动窗口
  3. 使用卷积网络的 OverFeat 集成识别、定位和检测

如果您使用的是 CNN,这根本不会引起任何问题。我制作了一个用于识别人脸的 CNN,由于人脸的宽度通常约为高度的 70%,因此我使用了 80x100 像素的训练图像(如果头部倾斜,则需要额外的宽度)。不过,您的过滤器应该仍然是正方形。

所有这些变化将是现在您必须跟踪激活/池化地图的宽度和高度,而不仅仅是一个告诉您大小的值。例如 -

80 x 100 的输入图像应用 5 x 5 卷积滤波器给出 76 x 96 的激活图应用 2 x 2 池化给出 38 x 48 的池化激活图

坚持使用方块,安全又简单

大多数 CNN 训练数据集的图像不是正方形的。标准方法是从中裁剪出一个正方形——通常选择一个随机正方形进行训练,并在测试时使用多个正方形并聚合预测(中心 + 4 个角是经典的)。

裁剪比填充更可取,因为使用填充会在空白图像空间上浪费大量计算,并且您正在创建这种人工边缘,其中真实图片与纯色有一条硬线,这可能会使分类器感到困惑。所以最简单的事情就是坚持常规做法并裁剪成正方形。

这是一般建议,适用于具有中等纵横比(如 1.5:1)的典型相机图像。在纵横比极端的情况下,裁剪显然会极大地限制网络可以物理看到的内容。

使用不同的尺寸

也就是说,大多数现代 CNN 确实允许您通过它们运行非方形图像。这有点先进/不寻常,因此最好坚持使用方形图像,除非您确信自己了解正在发生的事情以及所涉及的风险。对于一种 CNN,这在物理上是否可行取决于接近末端的网络层,该网络层从卷积处理过渡到完全连接的处理以进行分类或你有什么。

在早期的 CNN (如 AlexNet)中,这一层只是将所有通道映射从分辨率降低的处理图像中序列化为一个简单的特征向量——所以如果你的最后一个卷积层输出一个 8x8x32 的张量(HxWxChannel),它只是将它展开为一个 2048 维的向量. 该策略将图像的每个位置编码为向量中的一组不同维度,允许网络推理图像不同位置的特征(可能是好的或坏的),但也意味着它可以使用的分辨率是固定的,因为如果你改变分辨率,特征向量的维数会改变,然后下游的全连接层就不起作用了。

大多数现代 CNN 使用某种池化层将空间维度上的基于位置的特征平均或聚合为下游 FC 层的简单特征向量(有时准确描述为 1x1 分辨率)。因此,如果输出 8x8x32 特征的同一个网络到达这个池化层,它可能会将所有 64 个(=8x8)这些 32 维向量平均为一个 32 维特征向量用于下游处理。(实际上,这些网络最后有超过 32 个特征。)

有了这些网络,没有什么能从物理上阻止您通过网络运行不同大小的图像。例如这个答案中的一些很好的细节:https ://stats.stackexchange.com/a/392854/13947 但请始终记住,如果您要求网络做任何未经训练的事情,它极有可能表现得很糟糕!