残差网络Resnet:Deep Residual Learning for Image Recognition 论文阅读笔记
- 在学习了resnet的论文之后,为了便于理解,变想要复现文论中34层的resnet模型。
即以下这张图:
实际上,Resnet和VGGnet的骨干网络相差无几,只是深度上更胜后者,并且增加了恒等映射(identity mapping)。
起
在复现VGG16的时候,采用的是逐层搭建,显然在此处并不可行,一共34层,每层需要正则化和激活函数,工作量相当大。
首先我们先将34层分为3部分
- 1 初始部分
- 2-33 主体部分
- 34 全连接部分
而主题部分根据通道的改变可以分为4个部分:
- 2-7 64
- 8-15 128
- 16-27 256
- 27-33 512
将每两层设置为Bottleneck:
class BottleNeck(nn.Module):
def __init__(self,in_chanels,out_chanels,stride=1,downsample=False):
super(BottleNeck,self).__init__()
self.conv1=nn.Conv2d(in_chanels,out_chanels,kernel_size=3,padding=1,stride=stride)
self.BN=nn.BatchNorm2d(out_chanels)
self.ReLu=nn.ReLU(inplace=True)
self.conv2=nn.Conv2d(out_chanels,out_chanels,kernel_size=3,padding=1,stride=1)
self.downsample = downsample
self.wi = nn.Sequential(
nn.Conv2d(in_chanels,out_chanels,kernel_size=1,padding=0,stride=stride),
nn.BatchNorm2d(out_chanels