参考很多,仅为个人学习记录使用
论文:Xception: Deep Learning with Depthwise Separable Convolutions
发表时间:2016
Xception 是 Google 在把 Inception 和残差结构结合之后,对 Inception V3 结构进行的又一次改进,主要内容是在网络中加入了深度可分离卷积(depthwise separable convolution)。
一、深度可分离卷积(depthwise separable convolution)
首先对深度可分离卷积进行说明。
假设输入图片为 25 * 25 * 16,卷积层的卷积核大小为 3*3,输入深度为 16,输出深度为 32。
如果是普通的卷积,每次卷积操作会将输入图片的一个 3*3*16 的立方块的值与卷积核进行计算,输出一个 1*1*1 的值,则一个卷积层在卷积完整个图片之后会得到一个 25 * 25 * 1 的值。因为输出深度为 32,因此需要 32 个元素值不同的卷积核,最终会输出尺寸为 25 * 25 * 32。每一个卷积核的参数是相同的,因此这一卷积层共有 3 * 3 * 16 * 32 = 4068 个参数(不考虑偏置)。
如果是深度可分离卷积,就会把卷积分为两步。第一步,将输入的 16 层独立来看,每一层有一个单独的 3*3 卷积核对其进行卷积,最终得到 16 个尺寸为 25 * 25 * 1 的结果;第二步,用 32 个 1*1 卷积核将这 16 个层的结果聚合,最终输出尺寸也是 25 * 25 * 32。这种方式下卷积层共有 3 * 3 * 16 + 1 * 1 * 16 * 32 = 656 个参数。同时,两步卷积也增加了网络的非线性。
可以看出,在同样的输入和输出的情况下,用深度可分离卷积可以大幅减少网络中使用的参数。而且,实现了区域和通道的分离计算。
二、网络结构
在 Xception 中也加了残差结构,同时加大了网络的宽度。
这个网络的意义在于,在网络复杂度与 Inception-V3 相同的情况下,达到了更高的性能。因为深度可分离卷积的优势就在于他能降低参数量,而 Xception 的目的是提高性能而不是压缩模型,所以可以把网络写的更宽更深,从而达到更好的性能。