InceptionV1
论文:https://arxiv.org/pdf/1409.4842.pdf
代码:参考Tensorflow/slim
特点
- 用多个尺度的卷积核组合来获得不同大小的感受野,最后拼接成不同尺度的融合,来近似局部最优的结构;

如图 3.7 所示,卷积核大小分别采用 1, 3 和 5,设定卷积步长为 1 后,只要设定填充分别为 0、 1、 2,卷积和得到相同维度的特征,就可以拼接在一起了,比如前一层输入为 100x100,那么经过 1x1 卷积核得到( 100-1) /1+1=100,100x100feature map; 经过 3*3 卷积核得到(100-3+1x2) /1+1=100,也是 100x100的 feature map ; 经 过 5x5 卷 积 核 得 到 ( 100-5+2x2 ) /1+1=100 ; 仍 然 是100x100feature map;

借鉴 NIN 中 11 卷积核来进行降维,比如前一层输入为 100x100x128,要经过 256 个 55 卷 积 层 ( 步 长 为 1 , 填 充 为 2 ); 那 么 需 要 的 参 数 为128x5x5x256=819200;而如果先经过 32 个 1x1 卷积层,再经过 256 个 5x5 卷积层 , 那 么 得 到 的 输 出 仍 然 是 100x100x256 , 但 是 需 要 的 参 数 就 变 成 了128x1x1x32+32x5x5x256=208896,参数大大减少了,在 GoogleNet 中运用的就是增加了 1x1 卷积核的模块
- 采用模块化的结构,便于增添和修改;
- 借鉴 NIN 的思想用全局均匀池化来代替全连接层;但是最后还是加了一个全连接层,方便微调;
- 增加了 2 个辅助的 softmax 分类器用于向前传导梯度。
网络结构

- 第一个卷积层输入数据为 224x224x3,卷积核为 7x7,步长为 2,填充为 3,因此输出为(224-7+2x3+1) /2=112,得到 112x112,经过 3x3 Max pooling, 步长为 2,填充为 1,得到(112+2x1-3+1) /2=56, 56x56 的 feature map;
- 第二、三个卷积层先经过 11 降维再经过 33 卷积层得到(56+1x2-3)/1=56,56x56 尺寸特征映射经过 3x3Max pooling, 得到(56+2x1-3+1) /2=28,得到 28x28的 feature map, 送入模块;
- 第一个 Inception 模块,输入数据为 28x28x192,经过 4 条支线,
- 第一部分, 1x1 卷积层,输出(28-1+1) =28,输出为 28x28x64;
- 第二部分,先经过 1x1 卷积层,输出为 28x28x96,再经过 3x3 卷积层,得到(28+1x2-3+1) =28,输出为 28x28x128;
- 第三部分,先经过 1x1 卷积层,输出为 28x28x32,再经过 5x5 卷积层,得到(28+2x2-5+1) =28,输出为 28x28x32;
- 第四部分, 3x3 的 pooling 层,得到(28+1x2-3+1) =2,输出为 28x28x32;因此整个模块拼接后 64+128+32+32=256,整个模块输出为 28x28x256。
InceptionV2
论文:https://arxiv.org/pdf/1502.03167.pdf
代码:参考Tensorflow/slim
特点
InceptionV2就没什么好说的了,主要就是提出了BN层,将一个batch内的数据都减去batch的均值,再除以方差,将数据拉回到了激活函数的线性区域,加速了网络的收敛速度。
贴一张BN的算法伪代码
网络结构
就是加了BN层,其他基本一样。
InceptionV3
论文:https://arxiv.org/pdf/1512.00567.pdf
代码:Tensorflow/slim
特点
主要是通过集中卷积分解的方式
- 使用两个3x3卷积核代替5x5卷积核,三个3x3卷积核代替7x7卷积核,减少参数量,加快计算。(两个3x3与一个5x5作用是一样的,其感受野都是5)

- 进一步将nxn卷积核分解为1xn和nx1卷积核:

- 一维卷积进一步加宽:

- 增加通道数时减少网格宽度

网络结构

上述几种Inception模块的级联。
InceptionV4
论文:https://arxiv.org/pdf/1602.07261.pdf
代码:Tensorflow/slim
特点
基于inception v3的基础上,引入残差结构,提出了inception-resnet-v1和inception-resnet-v2,并修改inception模块提出了inception v4结构。基于inception v4的网络实验发现在不引入残差结构的基础上也能达到和inception-resnet-v2结构相似的结果,从而认为何凯明等人认为的:“要想得到深度卷积网络必须使用残差结构”这一观点是不完全正确的。
网络结构
InceptionV4和Inception-ResNet-v2网络的输入部分
InceptionV4
- Inception-A block

- Inception-B block

- Inception-C block

- Ruduce-A

- Ruduce-B

- All

Inception-ResNet-v1
- Input

- Inception-ResNet-v1-A

- Inception-ResNet-v1-B

- Inception-ResNet-v1-C

- Inception-ResNet-v1-Rudece-B

- All

Inception-ResNet-v2
- Inception-ResNet-v1-A

- Inception-ResNet-v1-B

- Inception-ResNet-v1-C

- Inception-ResNet-v1-Rudece-B

对比
- 在inception-resnet-v1与inception v3的对比中,inception-resnet-v1虽然训练速度更快,不过最后结果有那么一丢丢的差于inception v3;
- 在inception-resnet-v2与inception v4的对比中,inception-resnet-v2的训练速度更块,而且结果比inception v4也更好一点。所以最后胜出的就是inception-resnet-v2。
