首页 > 解决方案 > VGGnet 的架构。什么是多作物、密集评估?

问题描述

我正在阅读 VGG16 论文very deep convolutional networks for large-scale image recognition

在 3.2 TESTING 中,它谈到所有的全连接层都被一些CNN 层替换

即,首先将全连接层转换为卷积层(第一个 FC 层为 7 × 7 卷积层,最后两个 FC 层为 1 × 1 卷积层)。然后将得到的全卷积网络应用于整个(未裁剪)图像。结果是一个类分数图,其通道数等于类数,并且空间分辨率可变,取决于输入图像的大小。最后,为了获得图像的固定大小的类分数向量,对类分数图进行空间平均(sum-pooled)

因此,在测试集上进行预测时 VGG16(配置 D)的架构将是

input=(224, 224)
conv2d(64, (3,3))
conv2d(64, (3,3))
Maxpooling(2, 2)
conv2d(128, (3,3))
conv2d(128, (3,3))
Maxpooling(2, 2)
conv2d(256, (3,3))
conv2d(256, (3,3))
conv2d(256, (3,3))
Maxpooling(2, 2)
conv2d(512, (3,3))
conv2d(512, (3,3))
conv2d(512, (3,3))
Maxpooling(2, 2)
conv2d(512, (3,3))
conv2d(512, (3,3))
conv2d(512, (3,3))
Maxpooling(2, 2)
Dense(4096) is replaced by conv2d((7, 7))
Dense(4096) is replaced by conv2d((1, 1))
Dense(1000) is replaced by conv2d((1, 1))

所以这个架构只用于测试集?

最后 3 个CNN 层是否都有1000 个通道

结果是一个类别分数图,其中通道数等于类别数

由于输入大小为 224*224,因此最后一个 Maxpooling层之后的输出大小将为(7 * 7)。为什么它说可​​变空间分辨率?我知道它做多级缩放,但它会在输入之前被裁剪为(224, 224)图像。

以及 VGG16 如何获得(1000, )向量?这里的空间平均(总和)是什么?它只是添加一个大小为(7, 7)的总和池层来获得一个(1, 1, 1000)数组吗?

班级分数图是空间平均的(总和)

在 3.2 测试中

此外,由于不同的卷积边界条件,多作物评估与密集评估是互补的:当将 ConvNet 应用于作物时,卷积特征图用零填充,而在密集评估的情况下,相同作物的填充自然会出现来自图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。

那么多裁剪和密集评估将仅用于验证集吗?

假设输入大小为 (256, 256),multi-crop 可能会得到 (224, 224) 大小的图像,其中裁剪图像的中心可能不同,例如[0:223, 0:223][1:224, 1:224]。我对多作物的理解正确吗?

什么是密集评估?我正在尝试用谷歌搜索它们,但无法获得相关结果。

标签: deep-learningcomputer-visionconv-neural-networkvgg-net

解决方案


将密集层改为卷积层的主要思想是使推理输入图像大小独立。假设您有(224,224)大小的图像,那么您的网络与 FC 将很好地工作,但是一旦图像大小发生更改,您的网络将开始抛出大小不匹配错误(这意味着您的网络取决于图像大小)。

因此,为了解决这些问题,制作了一个完整的卷积网络,其中特征存储在通道中,而图像的大小是使用平均池化层或什至对该维度的卷积步骤进行平均的(通道 = number_of_classification classes,1,1 ) . 因此,当您将最后一个结果展平时,它将变为 *number_of_classes = channel*1*1.*

我没有为此附上完整的代码,因为在定义许多基础知识时,您的完整问题将需要更详细的答案。我鼓励你阅读全连接卷积网络来了解这个想法。这很简单,我 100% 相信你会理解其中的本质。


推荐阅读