轻量级网络——MobileNetV1、v2详解

MobileNetV1

传统卷积

轻量级网络——MobileNetV1、v2详解_第1张图片

计算量

卷积核个数×卷积核宽×卷积核高×卷积核通道数×(输出高×输出宽)

N×Wk×Hk×C×Wo×Ho

输出的高和宽就代表了卷积核在输入图像上卷积的次数,括号前计算的是每次卷积所有参数量,括号内是卷积次数,相乘就是总的计算量。

以上图kernal=3 cannel=3,N=4为例

计算量 S1=4×3×3×3×Wo×Ho

深度可分离卷积

逐通道卷积(Depthwise Conv)

按通道提取的信息

轻量级网络——MobileNetV1、v2详解_第2张图片

nn.Conv2d(in_channel, out_channel, kernel_size, stride, padding, groups=groups, bias=False),

当传入的groups=in_channel时,表示逐通道卷积。

逐点卷积(Pointwise Convolution)

按点提取的信息

轻量级网络——MobileNetV1、v2详解_第3张图片

 将深度卷积的结果做拿来做逐点卷积就组成了深度可分离卷积

nn.Conv2d(hidden_channel, out_channel, kernel_size=1, bias=False)

逐点卷积实现时也就是卷积核大小为1的卷积

计算量

计算量是逐通道卷积加上逐点卷积

逐通道卷积:卷积核个数×卷积核宽×卷积核高×输出高×输出宽

逐点卷积:卷积核个数×卷积核深度×输出高×输出宽

与普通卷积的计算量之比=1/N+1/k*k

用上面普通卷积的例子来对比

计算量 S2=(3×3×3×Wo×Ho)+(4×3×1×1×Wo×Ho)

S2/S1 = 1/4+1/9≈0.36

相当于N取4时,参数是原来的0.36倍

V1网络结构

轻量级网络——MobileNetV1、v2详解_第4张图片

MobileNetV2

倒残差结构Bottleneck block

先进行一个映射将输入数据扩充维度,一般扩充三倍效果比较好

然后进行深度可分离卷积,再逐点卷积时降低维度,将输出值映射成较小的模块,携带更少的数据,从而解决在移动设备上显存不够的问题。

轻量级网络——MobileNetV1、v2详解_第5张图片

传统的残差结构,通过1×1卷积减少通道个数再进行3×3卷积后通过1×1升维。

倒残差,先通过1×1升维再计算3×3的逐通道卷积+逐点卷积,同时吧relu替换成了relu6

轻量级网络——MobileNetV1、v2详解_第6张图片 小于0时取0,大于6时取6,0-6取x

 v1与v2的比较

轻量级网络——MobileNetV1、v2详解_第7张图片

升维降维时的特征损失的解释

将输入映射成高纬,再降维后,会造成一定的特征损失

将n映射为2,3时损失特征最多,维度更高时损失特征少

轻量级网络——MobileNetV1、v2详解_第8张图片

 具体的映射方式,例如输入X是一组2*10的,有两个维度10组数据,要将其升到s维

通过一个矩阵T将其升维,再通过矩阵T的逆将其降维

轻量级网络——MobileNetV1、v2详解_第9张图片

轻量级网络——MobileNetV1、v2详解_第10张图片

降维

 轻量级网络——MobileNetV1、v2详解_第11张图片

V2整体网络结构

t为膨胀系数,表示升维时要扩充多少倍

c为通道数

n表示每个模块重复次数

s为每个模块重复第一次的步长,第一次之后s全都为1

轻量级网络——MobileNetV1、v2详解_第12张图片

原文中给出的bottleneck有两种,只有当s为1切输入维度等于输出维度时才使用带有残差连接的bottleneck

 轻量级网络——MobileNetV1、v2详解_第13张图片


 

你可能感兴趣的:(ai学习笔记,深度学习,人工智能)