深度学习(3)——轻量化的CNN网络结构(SqueezeNet、MoblieNet、ShuffleNet)

轻量化模型

上一节主要针对经典的CNN网络进行概述,这一节主要针对能满足人们轻量化要求的模型进行概述。轻量化的模型通常希望他有相对于传统的CNN网络结构更少的参数量以及更快的计算速度。通常有两种措施来实现,一种是训练时就选择结构简单的网络;一种是训练完后对模型结构进行优化,例如压缩、蒸馏、剪枝等。这里主要讲基于第一种措施的网络,历史上有以下这些:
在这里插入图片描述
本文主要讲解SqueezeNet、MoblieNet、ShuffleNet。

优化策略

1.优化网络结构 —— eg:Shuffle Net
2.减少参数量 ,有两种,一种是优化计算方法,比如多种排序,冒泡和快排的性能不同;一种是减少计算量。—— eg:SqueezeNet
3.优化卷积—— eg:Mobile Net
4.删除全连接层—— eg:SqueezeNet

Squeeze Net

IDEA:
1.多用1×1的kernel,少用3×3的kernel(目的是减少参数)
2.给3×3的kernel较少的channel(目的也是减少参数)
3.推迟使用POOLING的时机,因为前两点使得参数量减少,为了避免特征损失,不过早的采取池化操作,减少特征损失。(目的的不损失太多特征信息)
主要的网络结构如下图所示,提出了一种Fire Module:

在这里插入图片描述
如图所示:虚线以上蓝框部分为压缩层,虚线以下绿框部分为扩张层。
squeeze layer:
输入C×W×H,经过1×1的卷积,得到S1×W×H的输出。其中,出于压缩的目的,S1的channel要保证少于C。
expand layer:
压缩部分的输出S1×W×H做为输入,分别经过1×1的卷积核3×3的卷积得到两个channel分别为E1和E3的输出,其中,由于要进行concat操作,所以E1=E3。

整个fire module涉及三个channel变量,分别是S1,E1,E3,论文提出如下变量需满足的条件关系表达式:
在这里插入图片描述
其中,SR用于衡量bottleneck的宽窄程度,越小参数量越少:
在这里插入图片描述

在这里插入图片描述

MobileNet-V1

IDEA:
改变了卷积操作,提出了分离卷积。
1.传统的卷积操作:
传统的卷积操作,每个卷积核虽然看做是一个整体,但是实际包含了很多小层,分别与输入图片对应通道相乘,有N个卷积核就会生成N个特征图:
在这里插入图片描述
M×H×W——>inputchannel:M ,outputchannel:N, kernel:K×K——>N×H’×W’
对应上图就是
3×H×W——>inputchannel:3 ,outputchannel:4, kernel:3×3——>3×H’×W’
传统卷积的参数量为 M×N×K×K。
2.深度可分离卷积:
分为两步。
step1:M个channel为1,kernel为K的卷积做卷积核
M×H×W——>inputchannel:M ,outputchannel:1×M, kernel:K×K——>M×H’×W’
在这里插入图片描述
step2:N个channel为M,kernel为1的卷积核做卷积操作
M×H’×W’——>inputchannel:M ,outputchannel:M×N, kernel:1×1——>N×H’×W’
在这里插入图片描述
深度可分离卷积的参数量为 M×K×K+M×N。

MobileNet-V2

IDAE:
1.翻转的残差:如果先压缩channel,本来channel就少,再压缩更少,所以先增大再减少
2.线性bottleneck:不加ReLU

在每层中间增加channel来增加参数量,在下一层之前再缩回去。
原始的残差是中间细,两头粗,作者进行了翻转,变为中间粗,两头细
在这里插入图片描述
在这里插入图片描述
总结一下MobileNet:
V1:通过分裂传统卷积 CONV into Depthwise+Pointwise——>加速卷积计算
V2:为了增加更多的有效特征,翻转残差+

ShuffleNet-V1

IDEA:

  1. 1×1 group CONV:
    如下,传统卷积操作是输入特征为12channel,图中输出了6张feature,说明卷积核的channel是6,那么可以表示卷积操作的kernel为 12×6×K×K,参数量为(12×6×K×K)
    在这里插入图片描述
    shufflenet提出group conv,如下图所示,把输入分为3组,每组4个channel,每组经过kernel生成2channel的feature,可推出kernel为 4×2×K×K,一共有三组这样的kernel,每组分别与4张输入做卷积操作,三组一共生成6张输出,参数量为(4×2×K×K)×3,显然比传统卷积参数量少,仔细观察可以发现,分了三组,刚好参数量少了三倍,所以分组G和传统之间是G的个数的倍数关系。

在这里插入图片描述
所以分组卷积也可以减少参数量,而shuffle还做了一点就是进行分组后,最终会打乱分组生成的特征图,增加了一定的随机性。
在这里插入图片描述

FLOPS VS FLOPs

FLOPs:需要多少次浮点运算,与硬件无关
FLOPS:硬件的处理能力。
关于深度学习,这里只讲FLOPs(floating-point operations),用来衡量运算量。
卷积的运算量:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


参数量计算公式:

1.卷积核w权重个数:Kernel Size×C_in×C_out
2.偏置b个数:C_out
3.计算公式:
parameters = W+b
=[(Kernel Size×C_in)×C_out] + C_out
={[( Kw×Kh)×C_in]×C_out}+C_out


Flops计算公式:

Flops = parameters × H×W

FC层的Flops = parameters

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值