MobileNet系列之 MobileNet V1解读

MobileNet 系列之 MobileNet V1解读

MobileNet V1

Mobilenet v1在使用深度可分离卷积的基础上,提出一套用两个全局超参数( width multiplier and resolution multiplier)控制模型尺寸的方法,设计出性能优异的轻量化网络用于移动端以及嵌入式视觉任务中。

在此之前,设计小网络的方法基本上为压缩预训练网络(哈希值、矢量化、霍夫曼编以及各种因式分解)、直接训练小网络等方法,很多设计小网络的论文只注意了模型的尺寸而没在意模型的速度,另一个训练小网络的思路是知识蒸馏(使用较大的网络来训练较小的网络)。

MobileNet V1 结构

1.Depthwise Separable Convolution(深度可分离卷积)
深度可分离卷积是一种分离卷积的形式,它将标准的卷积操作分解为两步,depthwise convolution 和 1×1 的pointwise convolution。depthwise convolution针对输入特征图的每个channel做卷积,而pointwise convolution则是将它的输出结果结合。这种分解具有显着减少计算和模型大小的效果。

标准卷积的示意图如图
在这里插入图片描述
其中Dk是卷积核的宽度,M是输入特征图的通道数,N是输出的通道数,设DF是输入特征图的空间宽度,则一次标准卷积运算的计算量是:
DK ·DK ·M ·N ·DF ·DF
而深度可分离卷积的运算如图所示
在这里插入图片描述
第一步是depthwise 卷积,针对每个通道,使用一个DKDK1的卷积核做卷积操作,这一步的计算量是:DK ·DK ·M ·DF ·DF
depthwise卷积将计算效率大大提高,但是只过滤的输入通道,并没有组合生成新的特征,所以还需要一层1x1的卷积做通道层面的组合,产生新的特征,即pointwise卷积,这一步的计算量是: M ·N ·DF ·DF
所以整个深度可分离卷积运算的计算量是 :DK ·DK ·M ·DF ·DF+M ·N ·DF ·DF
在使用3x3卷积的情况下,使用深度可分离卷积可减少8~9倍的计算量。
在这里插入图片描述
通过实验结果可见,与使用标准卷积的mobilenet相比,使用了深度可分离卷积的mobilenet在牺牲一点精度的情况下大大减少了参数量。

每种卷积之后都跟上了BatchNormalization核ReLU
在这里插入图片描述
深度可分离卷积的pytorch代码实现如下:

class DepthSeperabelConv2d(nn.Module):

    def __init__(self, input_channels, output_channels, kernel_size, **kwargs):
        super().__init__()
        self.depthwise = nn.Sequential(
            nn.Conv2d(
                input_channels,
                input_channels,
                kernel_size,
                groups=input_channels,
                **kwargs),
            nn.BatchNorm2d(input_channels),
            nn.ReLU(inplace=True)
        )

        self.pointwise = nn.Sequential(
            nn.Conv2d(input_channels, output_channels, 1),
            nn.BatchNorm2d(output_channels),
            nn.ReLU(inplace=True)
        )

    def forward(self, x):
        x = self.depthwise(x)
        x = self.pointwise(x)

        return x

可见在pytorch的实现方式是使groups=input_channels,即将分组卷积的分组数设置为输入通道数,从而每个通道可以分离卷积。
整个MobileNet的结构如下表所示:
在这里插入图片描述
其中下采样操作都在 depthwise convolutions 用步长为2实现。

使用超参数生成更小更快的MobileNet

超参数1:Width Multiplier

宽度因子width multiplier用 α 来表示,作用是让网络在每一层均匀地变得更薄,特征图的输入通道数变为αM,输出通道数变为αN,使用之后整个网络的计算量变为:DK ·DK ·αM ·DF ·DF + αM ·αN ·DF ·DF
α=1是MobileNet的baseline,当α=0.75,0.5,0.25的时候为缩减的MobileNet.
使用α之后计算量会粗略缩减为原来的α^2倍,

超参数2:Resolution Multiplier

分辨率因子Resolution Multiplier用 ρ 表示,作用是减小输入图像的分辨率,通常我们直接改变输入图像的分辨率来隐式设置ρ。
同时使用后计算量变为:DK ·DK ·αM·ρDF ·ρDF +αM·αN·ρDF ·ρDF
使用ρ后计算量减少为原来的ρ^2倍。

实验分析

1.使用深度可分离卷积在降低1%精度的情况下大大降低了参数量
在这里插入图片描述
2.对比使用width multiplier参数让网络更薄与削掉网络前五层试网络更浅,显然在减少相同参数量的情况下使网络更浅的方法较好
在这里插入图片描述
3.使用不同的width multiplier网络衰减结论,右边的224是输入图片的尺寸
在这里插入图片描述
4.使用不同的resolution multipliers
在这里插入图片描述
文章还在细粒度分类,大尺度图像,人脸检测。目标检测等数据集上实验,都体现了良好的模型尺寸和精度的良好折中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值