Xception
Xception: Deep Learning with Depthwise Separable Convolutions
角度:卷积的空间相关性和通道相关性 。
笔记还是手写好,都忘了怎么写字了,把论文打印出来看
- 传统卷积:一个卷积核处理所有channel。
- 深度可分离卷积(depthwise separable convolutions):一个卷积核处理一个channnel。
Abstract
Inception介于传统卷积核深度可分离卷积之间,深度可分离卷积可以看作有很多支路的Inception。
Introduction
1.Inception假设
- 传统卷积既要处理跨通道信息又要处理空间相关信息
- Inception部分先用1*1卷积单独处理通道信息再用分解卷积(5->2 * 3)处理空间信息,基本假设是跨通道相关性和空间相关性被充分解耦(空间维度也可以用不对称卷积分解)。
图1是经典的Inception模块。
图2是简化的Inception模块,去掉了avg,只用一种卷积大小(3*3)
图3是图2的重新表示,inception模块可以换成一个1* 1大卷积,然后3* 3卷积核(空间卷积)在不重叠的channel上做卷积。
上述可以引出两个问题:
- channel分割区域的大小有什么影响?
- 跨通道相关性和空间相关性能否彻底解耦?
2.卷积和分离卷积的continuum(连续区)
区分:
- pointwise conv:通道维度的卷积
- depthwise conv:长宽,即空间维度的卷积
搞清楚:
- spatially separable conv:Inception的不对称卷积7 * 7 分解成 7 * 1 和1 * 7
- depthwise separable conv:3*3卷积处理(空间+通道)
基于假设,极限版inception模块就是先用1* 1卷积map跨通道的相关性,然后每个channel一个3* 3卷积(map空间),几乎等价于深度可分离卷积。(深度分离卷积的思想在alexnet多GPU训练上有体现,你说有就有呗)
Inception modules和深度可分离卷积的“极端”版本之间的两个细微区别是:
-
操作顺序:通常深度可分离卷积(例如在TensorFlow中)首先执行通道方向的空间卷积,然后执行1x1卷积,而Inception先1x1卷积。
-
第一次操作后是否存在非线性。在Inception里,这空间卷积和维度卷积操作都会加ReLU,然而深度可分离卷积通常是在没有非线性的情况下实现的。
后面架构图里的relu不是夹在3* 3和1* 1卷积之间的,稍微符合上述表达,因为这个架构是堆叠的,论文作者下面自己也说了1的顺序不是很重要,应该是有误的?
1不是很重要,因为整个架构都是堆叠起来的。2的相关实验结果在图10。
其他介于常规inception和深度可分离卷积之间的intermediate formulations都是有可能的。
在本论文中传统卷积和深度可分离卷积的的定义。
- 常规卷积: 一个卷积核处理所有通道。称为single-segment case。
- 深度可分离卷积: 一个卷积核处理一个通道。称为one segment per channel。
常规卷积只分一个spectrum(就是channel上不分区的意思),深度可分离卷积每个channel一个segment。Inception结构是在这两者之间的。
The Xception architecture
注意图解,BN在所有卷积和分离卷积后面都用上了。通道维度和空间维度的两方面处理彻底分开,达到解耦的效果。
Xception有36个卷积层用于特征提取,36个卷积层放到14个模块中,除了Entry和Exit,其余的都用线性残差连接(也算是resnet+inception了,带残差的可分离深度卷积)
Experimental evaluation
JFT dataset
多分类数据集,google内部的,平均每张图36.5个标签,使用了辅助数据集FastEval14k(类似JFT的子集)
Optimization configuration
看论文
Regularization configuration
- weight decay:L2正则化xception:1e-5(JFT和ImageNet一样)
- dropout:0.5,JFT数据集没用(数据量够大相当于regularization了)
- 辅助分类器:丢了
训练:
- 作者用了60块GPU,所以将数据复制60份,每一份放到一块GPU中训练,最后所有结果求平均
- JFT上没完全收敛(要收敛每个实验要做3个月)
Comparison
和inceptionV3比的原因是参数差不多,说明不是capability影响的而是架构的贡献。
ImageNet上差不多,但xception还是要好,作者说可能是因为V3 is designed for ImageNet,这个数据集上over-fit了。
在JFT数据集上设计了带FC和不带FC的两个模型,均比V3好不少。
残差连接的有效性
作者认为残差连接确实提高了精度和训练速度以及准确率,但又觉得residual不是必要的,因为他们自己做了VGG(换成xception模块)的实验发现比V3好。
Effect of an intermediate activation after pointwise convolutions
实验结果表明,非线性激活(ReLu)对空间-通道未解耦时有用 ,也就是对传统的conv适用,对深度可分离卷积不适用,可能是因为信息丢失了。(在哪丢失的?)
也就是:在Xception模块中,用于学习空间相关性的3×3 的卷积,和用于学习通道间相关性的1×1 卷积之间,不使用非线性激活函数时,收敛过程更快、准确率更高
总结:
1.文章思考的角度很深入,从空间和通道的相关性对卷积进行了进一步的思考
2.深度可分离卷积不一定是最好的,但空间和通道的解耦的思想很好
3.解耦思想