计算机视觉知识点整理(下)轻量化篇(持续更新)

前言

最近在面试,每天会被考到很多知识点,这些知识点有些我已经看了十几遍,还是会反应慢或者记不住。回想我在学习过程中,也是学了忘忘了学,没有重复个几十遍根本难以形成永久记忆。这次我复习和整理面试知识点的时候决定把CNN里面的关键创新点、容易疏忽的点都记录下来,方便快速查找回顾,于是就有了这篇像词典一样的永久更新的文章。

因为知识点过多,导致文章过长,目前已拆分为三篇:

1.基础知识篇

2.轻量化网络篇

3.通用模型篇

一、轻量化

1.1 轻量化网络

网络名称记忆点备注
MobileNetV1深度可分离卷积替换传统卷积计算量和参数量下降为原来的1/Dk^2(Dk为卷积核kernel size,一般为3,所以计算量约为1/9)
深度卷积的激活函数是Relu6
下采样是通过3x3的深度卷积stride=2
MobileNetV2Linear Bottelneck

最后的Relu6换成了Linear

Inverted Residuals

1.点卷积扩充通道,再做深度卷积,再通过点卷积压缩通道。这样的好处是3x3卷积在更深的通道上可以提取到更丰富的特征。

2.对于stride=1的Block加入Residual结构,stride=2的resoution变了,因此不添加。

MobileNetV3NAS

网络的架构基于NAS实现的MnasNet

platform-aware NAS + NetAdapt

SEsqueeze and excitation 注意力机制
模型的后半段使用h-swish

swish(x) :f(x) = x * sigmoid(βx)

h-swish是因为sigmoid函数在端上计算耗时而提出的改进方案。h-swish的梯度是更好计算的。

 

末端调整Avg提前,好处是计算量减小。
ShuffleNetV11x1分组卷积

传统的深度可分离卷积的Flops: c1,c2表示输入输出通道。c1*c2 >> 9,所以深度可分离卷积的瓶颈在于1x1卷积。

对point-wise covolution分组之后的Flops:g表示分组数,可以看到明显改善了点卷积的瓶颈。

但是这样会造成channle的信息流通不畅,精度下降。

channle shuffle

打通channel之间的信息。

可以看出实际上的shuffle是特征图展开后做了一个转置,操作很简单。

结构

 

(a) MobileNet, (b) ShuffleNet v1,(c) ShuffleNet v1降采样情况

 

 

 

 

ShuffleNetV2

四大设计理念
  1. G1). 使用输入通道和输出通道相同的卷积操作(内存访问代价MAC最小)
  2. G2). 谨慎使用分组卷积;(MAC与分组数g成正比,因此应该避免使用过大的分组)
  3. G3). 减少网络分支数;
  4. G4). 减少element-wise操作。
结构
(a) ShuffleNet v1 ,(b)ShuffleNet v1 降采样, (c)ShuffleNet v2,(d)ShuffleNet v2 降采样

 

  • ShuffleNet v2使用了一个通道分割(Channel Split)操作。这个操作非常简单,即将 channelc分为c'和c-c'两组。这种设计是为了尽量控制分支数,为了满足G3。
  • 在分割之后的两个分支,左侧是一个直接映射,右侧是一个输入通道数和输出通道数均相同的深度可分离卷积,为了满足G1。
  • 在右侧的卷积中,  卷积并没有使用分组卷积,为了满足G2。
  • 最后在合并的时候均是使用拼接操作,为了满足G4。
  • 在堆叠ShuffleNet v2的时候,通道拼接,通道洗牌和通道分割可以合并成1个element-wise操作,也是为了满足G4。

1.2 知识蒸馏

基础知识点知识记忆点备注
知识蒸馏原理
  1. 通过对小模型和大模型的softmax引入温度参数T,产生soft targets,进而通过交叉熵损失函数让小模型学习大模型的知识。
  2. 同时小模型对GT的hard targets进行交叉熵损失学习,保证模型的精度。
  3. 最终的loss是二者的结合。
MINIST上的成果
理解温度参数T

简单来讲,引入温度参数T是在神经层输出的logits上,在softmax之前。温度参数的作用就是让模型分概率分布之间的差距缩小,不仅仅关注正确的分类,也关注类别之间的相对关系,表达出更为丰富的信息。当T升高,非正确类别之间蕴含的的信息会更突出,与此同时类别概率的相对大小是不会改变的。

蒸馏的过程

损失函数的设计

   

1.3 剪枝

基础知识点记忆点备注
Learning both Weights and Connections for Efficient Nerual Networks(剪枝开山论文)结构化剪枝和非结构化剪枝
  • 非结构化剪枝就是把某些参数设为0,并没有减少参数量。
  • 结构化剪枝是把整个神经元去掉。对于CNN来说就是把通道剪掉。
  • 非结构化剪枝使用需要额外的参数存储策略,结构化剪枝更适用于终端上,可以直接在终端上获得加速。
基本思路
  1. 在数据集上对模型进行完整的训练,直至收敛,训练的时候施加L2(适用于迭代剪枝)或者L1正则化(适用于单次剪枝无finetune)效果更好。
  2. 对得到的模型根据权重的大小或者权重的范数作为神经元或者通道重要性判断依据。剪掉一批权重小于阈值的神经元。
  3. 在数据集上对剪枝后的模型进行微调,直至恢复精度。
  4. 重复二三步,直到参数量或者计算量小于阈值。
实验结果在Imagenet数据集上,Alexnet剪枝后的参数只有未剪前的1/9。但是精度几乎不变。最好的方法是L2正则化+迭代式剪枝。
Flops&MAC

FLOPS:每秒浮点数计算量

MAC:内存访问成本

计算机在计算的时候需要把数据加载到内存中再进行计算,这个过程是耗时的。分组卷积是对MAC消耗很高的算子。

一般而言,在内存访问速度快的设备上,更关注FLOPs,而在嵌入式设备上,更关注MAC。

Learning Efficient Convolution Networks Through Network Slimming(结构化剪枝,用BN层判断通道的重要性)

基本思路

因为当前的CNN在卷积层之后往往都会跟着BN层,而BN层的参数α代表着对于通道值的缩放。所以如果α很小的话那么这个通道的值就相对也比较小。因此可以根据BN层的参数α来进行剪枝。

实验结果ImageNet上的VGG,剪掉了82.5%参数量,保持精度不变。
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值