1、目的
受显存限制,旧版的Inception模型必须被拆分成sub-network进行训练;为了加速训练,在进行网络设计时就需要平衡不同sub-network之间的计算量,从而限制了网络设计的灵活性。
TensorFlow的出现,优化了梯度回传过程,使得显存占用量大大减少,无须将网络拆分训练。因此作者开始考虑performance更优的网络设计。
2、网络结构
1)stem (左:Inception-v4和Inception-ResNet-v2,右:Inception-ResNet-v1)
2)Inception A(35 x 35) / B(17 x 17) / C(8 x 8)模块
3)Reduction-A模块(35 -> 17)
3、Inception V4
网络表现与Inception-ResNet-v2相同
1)网络结构
2)Inception A - B - C模块
3)Reduction-B模块(17-> 8)
4、Residual Inception
1)在Inception block后添加filter-expansion层(conv 1 x 1,不用非线性激活层,用于使filter bank的输出尺寸与identity一致,从而便于addition操作)
2)不在summation操作后使用BN。大的激活层参数会显著增加内存占用,不用BN可以方便增加更多的Inception模块
3)Inception模块中不使用pooling层
4)网络结构
5)残差scaling
当channel数超过1000时,残差变量开始不稳定,训练早期网络就会“died”,经过几千个iteration之后,avg pooling前的网络输出就都变成了0。通过降低lr和增加BN层无法解决该问题;当channel数非常大时,即便用warm-up也很难训练。
残差scaling在不必要的时候,也不会影响最终的accuracy,但可以帮助训练过程更加稳定。
4.1 Inception-ResNet-v1
计算量与Inception-v3相似
1)Inception A - B - C模块
2)Reduction-B模块(17-> 8)
4.2 Inception-ResNet-v2
计算量与Inception-v4相似,但训练速度比inception-v4快
1)Inception A - B - C模块
2)Reduction-B模块(17-> 8)
5、结论
1)不使用残差结构也能训出相对较深的网络,但残差结构能极大的加速训练
2)一些证据表明,带残差结构的Inception网络略优于相似计算量下的Inception网络