在resnet.py中定义了骨干网络ResNet需要的一些模块。
首先是BasicBlock:
初始化参数为:
- in_planes:第一个卷积层输入通道数;
- planes:第一个和第二个卷积层输出通道数;
- stride:默认1,第一个卷积层步长;
- dilation:默认1,第一个卷积层padding和dilation参数;
- downsample:旁路下采样1x1卷积配置;
- style:默认pytorch;
- with_cp:是否使用checkpoint进行内存管理优化;
- conv_cfg:默认Conv2d;
- norm_cfg:默认BN;
- init_cfg
BasicBlock首先根据norm_cfg构建两个标准化层;
然后根据conv_cfg构建一个卷积核大小为3的卷积层,其他参数由初始化参数决定,卷积层的bias为False;
之后根据conv_cfg构建一个卷积核大小为3,填充为1,bias为False的卷积层,其他参数由初始化参数决定;
BasicBlock就可以构建出如下的结构。
之后看BottleNeck: