ResNet

残差结构

ResNet_第1张图片
为了方便对比,这里左图输入以256(论文为64)来计算。

左图:3x3x256x256+3x3x256x256=1179648

右图:1x1x256x64+3x3x64x64+1x1x64x256=69632

卷积计算:out=(in-k+2p) / s + 1

使用残差结构可以极大减少计算量。

整体网络结构

ResNet_第2张图片
下采样由conv3_1,conv4_1,conv5_1完成,步幅为2。

对restnet18、34而言:
ResNet_第3张图片ResNet_第4张图片

主分支和shortcut的输出特征矩阵shape必须相同。

由于conv2_x的输入是56x56x64,输出也是56x56x64,输入输出没有变化,可以直接相加。即实边的残差结构。

对于conv3_1来说,输入是56x56x64,输出为28x28x128,输入输出发生了变化,则对应的卷积核数量为128,步幅为2,这样可以与上一层的conv2_x进行相加。即虚边的残差结构。

后续的conv4_1和conv5_1也是类似操作。

这里第一个卷积的卷积核数量为128,最后一个1x1的卷积的卷积核数量是128,保持不变。

对restnet50-152而言:
ResNet_第5张图片ResNet_第6张图片

主分支和shortcut的输出特征矩阵shape必须相同。

由于conv2_x的输入是56x56x256,输出也是56x56x256,输入输出没有变化,直接相加。即实边的残差结构。

虚线残差结构的主分支上,第一个1x1卷积步幅是2,第二个3x3卷积步幅是1,但在pytorch官方实现中,第一个卷积1x1卷积步幅是1,第二个3x3卷积步幅是2。这样能够在imagenet的top1上提升约0.5%的准确率。

详细参考:https://ngc.nvidia.com/catalog/model-scripts/nvidia:resnet_50_v1_5_for_pytorch

这里第一个卷积的卷积核数量为128,最后一个1x1的卷积的卷积核数量是512,即4倍。

Batch Normalization

BN的目的是使我们的一批(batch)的特征图满足均值为0,方差为1的分布规律。

正向传播统计得到均值和方差;反向传播训练得到超参数
ResNet_第7张图片
ResNet_第8张图片
https://blog.csdn.net/qq_37541097/article/details/104434557

你可能感兴趣的:(神经网络小记,深度学习,神经网络,cnn)