到这儿来~(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

CV脱坑指南(二):ResNet·downsample详解

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

相关代码

CV脱坑指南(二):ResNet·downsample详解

Pic 1

可以看到,我们在make layer1时,传进去stride = 1。而后面的layer2 layer3传进去的stride都是2。

CV脱坑指南(二):ResNet·downsample详解

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。

CV脱坑指南(二):ResNet·downsample详解

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

CV脱坑指南(二):ResNet·downsample详解

一句话,这个对stride的判断就是判断这个大layer有没有搞特殊。

搞特殊了,那就……我们一起搞特殊吧~(嘻嘻 到这儿来,给你也上个downsample

CV脱坑指南(二):ResNet·downsample详解

 


1.3 结论

real downsample是Resnet主动为了downsample而downsample的(搞特殊

而identity downsample只是我们为了能让out += identity 的被动的适应性调整(查出来特殊,那带上identity一起特殊

不知道为什么我的比喻充满官腔哈哈哈哈哈

这期就这样吧~可能ResNet还会再出一期嗯,准备开始下一个paper的阅读(大佬们请给我推荐paper阅读!)

-------------------------------------------End--------------------------------------------

夜晚的太阳,保护属于他的人(feat. 嫦娥姐姐

相关文章: