原创: Lebhoryi@gmail.com
时间: 2020/08/10
文章目录
- 0x00 Paper
- 0x01 为了解决什么问题
- 0x02 提出了哪些创新点
- 2.1 两个闪闪发光的点
- 2.2 MobileNet V2 与 V1 之间的相同和不同点
- 2.3 ResNet 与 MobileNet V2 比对
- 0x03 网络结构
- 0x04 参考链接
0x00 Paper
- Paper: MobileNet v2
- Code: mobilenet_v2.py
0x01 为了解决什么问题
? 设计更小更快的网络结构。
? 深度卷积(Depthwise Convolution) 本身不能改变特征的通道数,并且通道数越少,在进行非线性激活函数的时候,会丢失更多的信息。
? 上图是作者展示用RELU激活时,当channel越小,丢失的信息越多,当channel越大,丢失的信息越少。当channel为2时,信息都集中在这两个channel中,如果有部分数值小于0就会被RELU激活丢失掉。而如果channel为30,其实信息是分散的,而且具有了冗余,所以通过RELU激活后归于0的值可能并不会影响太多信息的存储。
? 所以作者建议对于channel数很少的那些层做线性激活。当通道数由少变多的时候,用ReLU激活函数,当通道数由多变少的时候,做线性激活。
? bottlenect就表示瓶颈层,通道数由多变少,linear bottleneck表示对channel缩减的层做线性激活。虚线的tensor后进行线性激活。
? a是普通卷积,b是深度分离卷积,c是有bottlenect的分离卷积,d是对bottlenect进行扩张后的分离卷积。同样最后一层虚线的tensor后面是线性激活。
0x02 提出了哪些创新点
2.1 两个闪闪发光的点
-
Linear Bottlenecks
对通道数较少的使用线性激活,为了提取更多的特征信息
-
Inverted residual structure
a是正常的残差块,通道数先降维再升维,b是倒置的残差块,通道数先升维后降维。前者在特征提取的时候可能会丢失信息(通道数越少特征提取能力越弱),所以作者采用了后者的方法。同样,虚线tensor后面进行的是线性激活。
-
h*w为输入的尺寸大小,t是扩展因子,k是卷积核大小,d’ 是输入通道,d’’ 是输出通道
2.2 MobileNet V2 与 V1 之间的相同和不同点
-
相同点
都使用了 DSCNN,降低了网络的计算参数,具体详细请看上一篇博客 ? MobileNet V1 复古的直筒子结构
-
不同点
MobileNet V1 使用的是
DW + PW
的直筒子结构。为什么说是直筒子呢?因为在 DW 的过程中,网络自身无法改变输入和输出的通道数,可以查看第一张图的图b,很形象了。因此如果传入的通道数较少,网络的特征提取能力就相对来说较弱。- 第一个不同点:
? MobileNet V2 使用的是
PW + DW + PW
结构,先升维,拉高通道数,后降维。因此无论传入的通道数是多还是少,都强行按照系数高- 第二个不同点:
? MobileNet V2 在最后
PW
之后,去掉了ReLU
激活函数,也就是使用了线性的Bottleneck
。作者认为激活函数在高维空间能够有效的增加非线性,而在低维空间时会破坏特征,不如线性的效果好。
2.3 ResNet 与 MobileNet V2 比对
-
相同点
-
使用了
1*1 --> 3*3 --> 1*1
的模式; -
用Shortcut 将输出和输入相加
-
-
不同点
- ResNet 使用标准卷积提取特征,而 MobileNet 使用 DW 卷积提取特征
- ResNet 先降维、卷积、再升维,MobileNet 先升维、DW、再降维
0x03 网络结构
当步长等于2的时候:
此处还有一些问题:
? 1. 上面的bottleneck
总共加起来只有17层,而paper 中论述有19层;
? 2. 还有同学跑出来的MobileNet V2 版本的推理速度比 V1 还慢,有待商榷 (代码未详读)
最终的效果比对:
0x04 参考链接
- MobileNet V2论文阅读和代码解析
- MobileNet V2 论文初读
- 轻量化网络:MobileNet-V2