训练后更改分辨率(已获得预训练模型)

Change resolution after training (have got a pre-trained model)

阅读 YOLOv1 paper,其中提到[1] 网络的第一部分,即那些卷积层,首先在 ImageNet 数据集上以 224x224 的输入分辨率进行训练。之后,转换模型进行检测,其中输入分辨率从224x224增加到448x448。我想知道如何进行这种转换:如果网络的输入最初是 224x224,那么参数数量应该与 448x448 不同,这意味着在 ImageNet 数据集上训练的卷积层不能重新用于检测.

我在这里错过了什么?

[1]: 在“2.2 训练”部分的末尾

if the input of the network is at first 224x224, then the number of parameters should differ from that of 448x448

这是你的误会

卷积运算对输入的大小没有限制,因此对输出的大小也没有限制。当你训练一个最后具有全连接层的 CNN 进行分类时,你将输入限制为固定大小,因为 FC 层可以接受的输入数量是固定的。

但是,如果您从网络中移除分类头并且仅使用 CNN 的训练权重作为特征提取器,您会注意到给定任何维度的输入(>= 网络具有的维度被训练),输出将是一组特征图,其空间范围随着输入空间范围的增加而增加。

因此,在 YOLO 中,网络最初被训练为以 224x224 的分辨率执行分类。通过这种方式,卷积运算的权重 + 最后 FC 层的权重学会了提取和分类有意义的特征。

第一次训练后,FC层被丢弃,只保留特征提取部分。通过这种方式,您可以使用一个好的特征提取器,它已经学会以卷积方式提取有意义的特征(ei,产生的不是特征向量而是特征图作为输出,可以 post-processed as YOLO 可以)