Xception 是 Google 继 Inception 后提出的对 Inception-v3 的另一种改进。
作者认为,通道之间的相关性 与 空间相关性 最好要分开处理。采用 Separable Convolution(极致的 Inception 模块)来替换原来 Inception-v3中的卷积操作。
在 Inception 中,特征可以通过 1×1卷积,3×3卷积,5×5 卷积,pooling 等进行提取,Inception 结构将特征类型的选择留给网络自己训练,也就是将一个输入同时输给几种提取特征方式,然后做 concat 。Inception-v3的结构图如下:
对 Inception-v3 进行简化,去除 Inception-v3 中的 avg pool 后,输入的下一步操作就都是 1×1卷积:
提取 1×11×11×1 卷积的公共部分:
Xception(极致的 Inception):先进行普通卷积操作,再对 1×11×11×1 卷积后的每个channel分别进行 3×33×33×3 卷积操作,最后将结果 concat:
传统的卷积实现过程---->Depthwise Separable Convolution 的实现过程:
Depthwise Separable Convolution 与 极致的 Inception 区别:
极致的 Inception:
第一步:普通 1×11×11×1 卷积。
第二步:对 1×11×11×1 卷积结果的每个 channel,分别进行 3×33×33×3 卷积操作,并将结果 concat。
Depthwise Separable Convolution:
第一步:Depthwise 卷积,对输入的每个channel,分别进行 3×33×33×3 卷积操作,并将结果 concat。
第二步:Pointwise 卷积,对 Depthwise 卷积中的 concat 结果,进行 1×11×11×1 卷积操作。
两种操作的循序不一致:Inception 先进行 1×11×11×1 卷积,再进行 3×33×33×3 卷积;Depthwise Separable Convolution 先进行 3×33×33×3 卷积,再进行 1×11×11×1 卷积。(作者认为这个差异并没有大的影响)
作者发现,在“极致的 Inception”模块中,用于学习空间相关性的 3×33×33×3 的卷积,和用于学习通道间相关性的 1×11×11×1 卷积之间,不使用非线性激活函数时,收敛过程更快、准确率更高:
DenseNet现在我们有三种方式来处理不同卷积层之间的特征图:
Standard Connectivity
Residual/Skip Connectivity
Densenet: Dense Connectivity
标准连接
Residual/Skip 连接
DenseNet:密集连接性
DenseNet的思想是某一层的输入是其前面每一层的输出,即将不同层得到的特征图进行融合作为某一层的输入,这样CNN的每一层就可以得到前面不同层提取的特征(浅层位置等基础信息,深层语义信息),这样网络的表达能力会更好。图示如下:
如果仅仅如之前那么设计的话,很容易出现梯度爆炸,所以:用之前提到的1∗11*11∗1卷积!bottleneck降维
下图是Dense Blocks的结构图,在每个Dense Blocks内部,每层的feature map的大小是一致的(方便特征融合),不同Dense Blocks之间有Pooling层用于减小feature map的大小。
总结基础框架:Lenet、Alexnet、VGG、Prelu
Inception系列(宽网络):从Inception v1 到v4 以及Inception-Resnet系列