MobileNet系列一共有三个版本,由于CNN的计算量过于庞大,不便于优化并部署,提出轻量化的MobileNet。目前的MobileNetV3是轻量化并且效果做好的了,综合了MobileNetV1、2的优点,它综合了以下四个特点:
1、MobileNetV1的深度可分离卷积(depthwise separable convolutions)。
2、MobileNetV2的具有线性瓶颈的逆残差结构(the inverted residual with linear bottleneck)。
3、轻量级的注意力模型。
4、利用h-swish代替swish函数。
发现的论文讲解课:
MobileNetV1
https://www.bilibili.com/video/BV1LB4y1c7Ap?spm_id_from=333.788.b_636f6d6d656e74.4
MobileNetV2
https://www.bilibili.com/video/BV1Fq4y1n7Mq?spm_id_from=333.788.b_636f6d6d656e74.5
MobileNetV3
https://www.bilibili.com/video/BV1vN411f7pY?from=search&seid=5973092705560738350
MoblieNetv1
由于CNN的卷积计算中,单单卷积计算已经占了95%,为了减少计算量用了深度可分离卷积,减少卷积的计算量
这是我看到的别人对深度可分离卷积的理解,他还有和传统卷积的比较(来自https://blog.csdn.net/c20081052/article/details/80703896
我理解pointwise convolution的1 X 1卷积操作是为了使得经过depthwise convolution(他先对每一层进行卷积操作,一个通道一个卷积核)的每一层能够被固定成一块儿,保证各个channel数据能够交通。
depthwise convolution操作是为了每一channel局部的像素进行交通
https://blog.csdn.net/c20081052/article/details/80703896
该文章写的更详细一些凹~
其中有关于MobileNet瘦身的介绍,主要是当我们移动端不需要那么强大的网络性能时可以采取MobileNet瘦身的方法,这自然会对精度有一定的影响的。
因为深度可分离卷积分成了两块,我们的瘦身操作分为两步,一个是按比例减少通道数,另一个是比例降低特征图的大小,以上的博客有详细说明,视频中也有介绍()
MoblieNetv2
想象所有样本,在一个很高维度的空间中,他们其实分布在一个连续的平面上,卷积滑动时,就从一个样本转到另一个样本,一个语义转到另一个语义,想做图像分类时,就是想把高维度空间中的表面找出来,图像的语义信息是高度抽象高度概括的,在数据中出现的高维的抽象的曲面完全可以用低维度的表面来代表他,但是我们不能随便拿一个低维度的平面简单的用一个网络来检测,很多试验证明我们还是要在高维度上通过对数据进行变换,尽量保持每个样本每个曲面之间的关系,这样才能更方便的进行下一个任务
神经网络就是通过变换使得高维度的表面投影到低维度的表面(好让我们进行区分),我们希望能够尽量保持高维度表面的信息,如果变化里全是linary transform的话,是可以更好的保存信息的,因为都是linary的变化,正反推都很方便,但是问题出在,网络中还有一些non-linary的部分,这些部分无法舍去,这些就是激活函数,比如我们熟悉的relu,它x<0部分直接没有,但是>0部分会全部输出。
有用的信息放在一起,经过变换时,你最希望能够尽可能的保存全部信息,如果全部都是linary的变换,那么信息可能有一些变形,但能够很好的保留下来;但对于relu函数而言,<0的部分大致意思是有一部分信息会被倒出盘子边缘,但只要盘子足够大,就不会被倒出去,而且在盘子中的信息是不会变形的(他的变化仍然会是线性的);而我们需要找个方法使得盘子变大:因为我们需要的是低维度的信息,所以在高维空间对数据进行relu可以尽量保留低维度信息,使它也是做线性的变换,不被cut掉。
注: 我们可以把网络整小,但是我们对图像信息做 relu 时必须先放到高维度中(可避免信息受到破坏)
图像——》转到高维度做了 relu 之后——》低维度
网络结构:
a——Regular Convolution普通卷积操作,它把channel逐渐变深
b——Separable Convolution Block 是v1操作,拆成了两个
但上面说了,希望rule在高维中进行,所以加了linear,所以后面变成了c的亚子。
c——Bottleneck Convelution 图中的绿框表示直接做线性的变换
d——Expansion Convolution block因为是堆叠在一起的,所以把低维度的框换个次序放到最前面也是可以的,与c等价
对于传统的Residual block只是对大通道,而现在也对小通道连接了,使得模型更加清亮,变成了下图的b的亚子