resNet conv1和传统conv2d层的区别

Posted

技术标签:

【中文标题】resNet conv1和传统conv2d层的区别【英文标题】:Difference between resNet conv1 and traditional conv2d layer 【发布时间】:2020-12-04 00:13:16 【问题描述】:

我正在使用一层从图像中提取特征。旧层是

self.conv = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False)

新图层是

resConv = models.resnet50(pretrained=True)
resConv.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False)
self.conv = resConv.conv1

任何性能差异?或两层相同。

【问题讨论】:

比较结果时发现了什么? 【参考方案1】:

几乎,但是有一些差异。根据论文https://arxiv.org/abs/1512.03385,resnet50 的 conv1 层(正如您在torchvision.models.resnet50() 中所见)具有

conv1 = Conv2d Conv2d(3, 64, kernel_size=(7,7), stride=(2,2), padding=(3,3), bias=False).

因此差异是a) kernel_size 是 7x7 而不是 3x3b) 填充 3x3 而不是 1x1 和c) 来自预训练模型的 resnet50.conv1 的权重将取决于训练并且没有像 nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) 那样随机正常初始化

【讨论】:

【参考方案2】:

这里的主要区别在于,在 self.Conv 中,权重是默认的(例如零)并且需要训练,但在使用预训练模型的 resConv.Conv1 中,权重会被调整,因为它是使用大型数据集进行训练的之前。

性能结果取决于您的任务,但总的来说,它有助于获得更好的结果(更好的局部最优)或需要更少的 epoch 来训练。

【讨论】:

结果太差了

以上是关于resNet conv1和传统conv2d层的区别的主要内容,如果未能解决你的问题,请参考以下文章

PaddlePaddle 飞桨复现 ResNet34

我们如何在 PyTorch 中将线性层的输出提供给 Conv2D?

python中的一维卷积conv1d和二维卷积conv2d

resnet-50 pytorch之结构分析

我不明白 conv1d、conv2d 的 pytorch 输入大小

train_image_classifier.py:Cannot assign a device for operation CifarNet/conv1/Conv2D: node CifarNet(