最近实习,被老板安排进行移动端的神经网络开发,打算尝试下Mobilenet V2,相比于Mobilenet V1,该网络创新点如下:
1. 借鉴了ResNet 中的Shortcut近路连接操作
2. 在进行分离卷积操作之前引入扩张操作,增加模型的容量,然后再进行压缩
3. 在每一层bottleneck压缩最后,去掉了非线性ReLu层
下面分别给出Mobilenet V1和Mobilenet V2 的bottleneck结构,能更直观看出两者的区别。
sep 为 1x1 卷积核进行的扩张或压缩操作,dw为可分离操作。
上图中的v1 在进行dw操作后,接着连接了sep进行的扩张层。
下图的v2先进行sep扩张(扩张倍数为前一层通道数的4-6倍),然后进行dw操作,接着再进行sep压缩操作。其中对于shortcut输入的sep压缩,如conv2_1/out/sep_new层,压缩后的通道数比扩张前的要多,能保证层数越深,模型容量越大;对于靠近shorhtcut输出的sep压缩,如conv2_2/out/sep_new 层,压缩后的通道数要和conv2_1/out/sep_new维度一样,才能进行近路连接。
整个网络结构,基本是由以上bottleneck堆叠层的,可以结合自己的需求,进行相应的改动,下面给出v1和v2的github地址,https://github.com/GeekLee95/MobileNet_caffe.git, 供想尝试的同学进行加载。