到这儿来~(feat.美丽的嫦娥姐姐
嗯经过了一周的实(mo)践(yu)之后,打算还是给ResNet出个续集
毕竟downsample这一块儿实在是挺费解的
其中ResNet出现的downsample,可以大致分为一下两种
1.1真正意义上让output.shape长宽变成1/2的我暂且称之为real downsample
1.2 shortcut前的x的为了适应shortcut后变化的shape而做的自适应调节 我暂且称之为 identity downsample
以下的所有案例,我们以Resnet44也就是[14, 14, 14]的结构举例
我个人偏好称layer1(14个block),layer2(14个block),layer3(14个block)
1.1 real downsample
顾名思义,这个downsample是让全图的H*W变成1/2H * 1/2W。方式是使stride = 2
Figure 3 in ResNet paper
借鉴这个34层的小example 我们可以看到 每个real downsample是在不同layer(个人叫法,同一种颜色的叫一个layer)第一个block完成的,但是还有一个exception是第一个淡紫色layer并没有做downsample
特征归纳
(1) 第一个大layer不做real downsample
(2)剩下的所有大layer都只在第一个block里的第一个3x3 用stride=2 做real downsample
相关代码
Pic 1
可以看到,我们在make layer1时,传进去stride = 1。而后面的layer2 layer3传进去的stride都是2。
Pic 2
相当于我们在告诉resnet(恶魔地狱):“第一个layer就不要求你downsample了,后面几个统统都在第一个block里给我downsample!“
怎么做到只让第一个block灵活的调整(是否downsample),而后面的block都一成不变墨守成规呢?
当然就是对于每个layer,先把第一个block拉出来用我们传进去的stride进行领导的特殊对待啦(Pic 1 第97行)传进去stride = 1,那么第一个block就不用downsample;如果传进去stride = 2,那第一个block就要downsample。
至于剩下的block, 就不用看领导脸色了,传进去stride = 1还是2都跟它们无关,因为它们反正都不downsample,所以剩下basic block里第一层3x3的stride都是1。
Pic 3
长话短说,执行real downsample(官腔:搞特殊)的只有可能是每个大layer里十四个bottleneckblock中的第一个basic block(里的第一个3x3),剩下十三个都没有特殊性。
1.2 identity downsample
identity downsample是针对x(shortcut前的input,又称为identity)和f(x)(shortcut后的output)shape不同没法相加而做的accommodation。这种前后shape不同的情况就是Figure 3中虚线所示。该怎么判断用不用呢?
原理:判断是否进行了real downsample
如果该layer进行了real downsample,那么就要进行identity downsample
如果该layer没进行real downsample,那么identity downsample也一样为none
做法:判断传进来的stride 是不是=1
等于1,说明该layer没有用stride进行real downsample,前后形状不变,不用对x另做调整来适应f(x)的shape; 不等于1,说明该layer用stride做了downsample,前后形状变了,需要self.downsample对x另做调整来适应f(x)的shape
一句话,这个对stride的判断就是判断这个大layer有没有搞特殊。
搞特殊了,那就……我们一起搞特殊吧~(嘻嘻 到这儿来,给你也上个downsample
1.3 结论
real downsample是Resnet主动为了downsample而downsample的(搞特殊
而identity downsample只是我们为了能让out += identity 的被动的适应性调整(查出来特殊,那带上identity一起特殊
不知道为什么我的比喻充满官腔哈哈哈哈哈
这期就这样吧~可能ResNet还会再出一期嗯,准备开始下一个paper的阅读(大佬们请给我推荐paper阅读!)
-------------------------------------------End--------------------------------------------
夜晚的太阳,保护属于他的人(feat. 嫦娥姐姐