卷积神经网络尺度敏感性

机器算法验证 神经网络 计算机视觉
2022-03-04 10:45:12

例如,假设我们正在构建一个基于人的图片的年龄估计器。下面我们有两个西装革履的人,但第一个显然比第二个年轻。


(来源:tinytux.com

有很多特征暗示了这一点,例如面部结构。然而,最有说服力的特征是头部尺寸与身体尺寸的比例


(来源:wikimedia.org

所以假设我们已经训练了一个 CNN 回归来预测这个人的年龄。在我尝试过的许多年龄预测器中,上面这个孩子的形象似乎愚弄了预测,让他们认为他年纪大了,因为西装,很可能是因为他们主要依赖于脸:

我想知道一个普通的 CNN 架构能在多大程度上推断出头部与躯干的比例?

与能够在身体和头部获得边界框的区域 RCNN 相比,香草 CNN 的性能是否总是更差?

就在 vanilla CNN 中的 global flattening 之前(即在所有卷积之后),每个输出都有一个相应的感受野,它应该具有规模感。我知道更快的 RCNN 通过在这个阶段准确地提出边界框建议来利用这一点,以便所有先前的卷积滤波器自动训练到所有尺度。

那么,我认为香草 CNN 应该能够推断出头部与躯干大小的比例?这是正确的吗?如果是这样,使用更快的 RCNN 框架来利用可能已经在检测人员方面进行预训练的事实的唯一好处是什么?

3个回答

CNN 是一类太大的模型,无法回答这个问题。LeNet、AlexNet、ZFNet 和 VGG16 的行为与 GoogLeNet 的行为非常不同,GoogLeNet 是专门为 R-CNN 所做的大部分工作而构建的,具有 CNN 架构(您可能知道 GoogLeNet 的名称为 Inception,尽管严格来说 Inception 只是构建 GoogLeNet 的基本单元(子网)。最后,ResNets 的行为会有所不同。所有这些架构都不是为分类年龄类别而构建的,而是为 1000 个 ImageNet 类别而构建的,其中不包含人类的年龄类别。可以使用迁移学习(如果您有足够的训练图像)来训练上述广泛可用的训练模型之一,并查看它们的性能。然而,一般来说,尤其是较旧的架构(比如说直到 VGG16)很难学习“全局特征”,这需要学习“头部”(已经是一个复杂的特征)、“躯干”(另一个复杂的特征)及其比率(这也要求两个特征具有一定的空间关系)。这种东西是 Capsule Networks 应该能够做到的。

卷积网络的诞生恰恰相反:对局部特征敏感,对它们的相对位置/尺度相对不敏感。无论图片是特写镜头还是美国镜头,一个好的 Convnet 都应该识别“白猫”。将卷积层(对局部特征敏感)与池化层(消除对图像比例变化或平移的部分敏感性)相结合,可以得到一个架构,其最基本的形式并不擅长学习空间类型您正在寻找的对象之间的关系。在某处有一个例子(但我再也找不到了),在将猫图像分割成各种矩形非重叠图块并以随机顺序将它们组合在一起后,CNN 将继续将图像识别为cat. 这表明 CNN 对局部特征(纹理或类似的东西)比对高级特征之间的空间关系更敏感。另请参阅Capsule networks论文以获取对此的一些讨论。Hinton 在关于 convnets 限制的视频中也展示了一个例子

我的疯狂猜测是,最近的架构之一将完全有能力(给定足够的数据)区分男性和儿童,但不是因为“头部”和“躯干”等高级特征之间的度量关系的“阈值” . 它将学习一些统计规律,人类可能完全察觉不到,它将训练集中的成人图像与儿童图像区分开来。

首先,感谢您发布一个非常有趣的问题。

简而言之,一个经过端到端训练以从照片中预测年龄的 vanilla convnet 通常容易对图像进行错误分类,例如您发布的图像其次,请注意准确估计一个人的年龄是一项几乎不可能完成的任务1

与您提出的使用某些对象检测器(无论是 RCNN、Faster RCNN、YOLO 还是 SSD)的方法的主要区别在于您使用不同的信息来训练模型。CNN 仅在图像上进行训练,并且需要自己找出所有必要的特征。它最有可能找到各种面部特征,但它也将依赖于服装和场景特征(孩子可能经常带着一些玩具出现在照片中,成年人更有可能在办公环境中,等等)。这些功能对您的反例来说并不健壮。

另一方面,如果您训练网络将对象明确检测为“躯干”和“头部”,则您提供了这些对象对任务很重要的额外信息,从而简化了问题2

虽然检测头部和躯干然后评估边界框大小比的方法听起来很有趣,但我可以看到几个障碍:

  1. 获取数据:我不知道存在年龄和边界框的大型数据集的可用性。
  2. 不完美的 FOV:在大多数图像中(例如,您的两个示例),人都没有完整显示。您将不得不处理这样一个事实,即躯干边界框并不总是完美的,仅仅因为部分人不在图像中,并且网络必须猜测丢失了多少部分(而地面实况边界框最可能不会捕获此信息)。此外,上述对象检测器并不总是能正确处理部分对象的预测。这可能会在模型中引入过多的噪声。
  3. 各种姿势:从正面和侧面观看的人的躯干与头部的比例会非常不同。
  4. 成人:该比率似乎可以很好地预测 0-21 岁之间的年龄,但我看不出它如何有助于预测成年人的年龄(我认为该比率在较高年龄时不会改变)。

所有这些问题都表明,头躯比方法也不会完美地工作,尽管它可能对你的特定反例更稳健。

我想执行此任务的最佳方法是 1)检测面部,2)仅从面部裁剪预测年龄(删除潜在的误导信息)。请注意,可以训练一些使用 ROI-pooling 的类似 R-CNN 的架构来执行此端-2-端。


1即使使用非常复杂的医学方法(可以说比人的照片信息量大得多),也无法准确地做到这一点。有关更多信息,请参阅此 Quora 线程

2查看文章知识很重要:先验信息对优化的重要性,了解如何提供一些关于任务的中间知识可以大大简化学习。

好吧,这完全取决于您的数据集是如何构建的。根据我的经验,神经网络倾向于寻求最简单的解释。而且从服装推断年龄实际上比使用头身比例更简单。如果您可以在考虑到这一点的情况下扩展您的数据集,那么您的 CNN 应该可以按预期工作。