CV-轻量化网络

mobileNet

动机:为了追求更高的准确率,视觉领域内的卷积神经网络一般倾向于更深、更复杂的结构设计。但这种设计并不会在大小和速度方面更加高效。同时,在实际生活应用中,识别任务需要在有限的计算环境(算力)下实时计算。
现有方法:模型压缩(模型蒸馏),利用教师模型(大模型)训练学生模型(小模型),使小模型能够最大程度上发挥出大模型的性能;直接训练一个小型网络,即改变网络结构、设计出更高效的网络计算方式,从而使网络参数减少的同时不损失网络性能。
mobileNet方法:根据应用需求和资源限制,构建一种新型的小型网络;主要致力于优化延迟;主要基于深度可分离卷积,通过设置两个超参数,实现准确率和延时性之间的平衡。
mobileNet主题架构
在这里插入图片描述
Conv:标准卷积
s2:卷积步长stride为2
s1:卷积步长stride为1
avg pool:平均池化
FC:全连接层
dw:深度卷积
将深度卷积和逐点卷积看作两层,共28层。
卷积块特点

  • 引入深度可分离卷积,将普通卷积替换为深度卷积和逐点卷积。

  • 除第一个卷积层和最后全连接层外,所有卷积层之后都有BN、Relu相连。
    在这里插入图片描述
    降采样方式
    设计卷积步长stride来完成降采样操作
    在这里插入图片描述
    深度可分离卷积
    一个标准卷积:
    输入特征F:DF×DF×M;卷积核K:DK×DK×M×N
    输出特征G:DF×DF×N
    在这里插入图片描述
    那么深度可分离卷积:
    输入特征F:DF×DF×M;输出特征G:DF×DF×N
    卷积过程:

  • 深度卷积:深度卷积都是通道数为1的卷积核,负责一个通道

  • 点卷积:逐点卷积卷积核大小为1×1×M,每次卷积一个像素的区域。
    在这里插入图片描述
    对比:
    在这里插入图片描述
    宽度超参数

  • 目的:为了构造更小型、更实时的网络模型来满足实际应用需求

  • 引入宽度超参数 α \alpha α统一规范每层的特征输入输出维度, α ∈ ( 0 , 1 ] \alpha \in (0,1] α(0,1],常设为1,0.75,0.5,0.25.

  • 输入M–> α \alpha αM,输出N–> α \alpha αN

  • 计算量,算力消耗约减少为原来的 α 2 \alpha^2 α2
    D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F − − > D K ⋅ D K ⋅ α M ⋅ D F ⋅ D F + α M ⋅ α N ⋅ D F ⋅ D F D_K·D_K·M·D_F·D_F+M·N·D_F·D_F-->D_K·D_K·\alpha M·D_F·D_F+\alpha M·\alpha N·D_F·D_F DKDKMDFDF+MNDFDF>DKDKαMDFDF+αMαNDFDF
    分辨率超参数

  • 目的:为了继续减少算力消耗

  • 引入分辨率超参数 p p p统一规范特征表示的分辨率大小, p ∈ ( 0 , 1 ] p\in (0,1] p(0,1]通常跟输入图像分辨率间接得到

  • 输入: D F × D F D_F×D_F DF×DF 输出: p D F × p D F pD_F×pD_F pDF×pDF

  • 计算量,算力消耗约减少为原来的 p 2 p^2 p2
    D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F − − > D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ p D F ⋅ p D F D_K·D_K·M·D_F·D_F+M·N·D_F·D_F-->D_K·D_K·M·D_F·D_F+M·N·pD_F·pD_F DKDKMDFDF+MNDFDF>DKDKMDFDF+MNpDFpDF
    mobileNet后续创新和改进

  • 线性瓶颈层:高维空间上,诸如RLU这种激活函数能有效增加特征的非线性表达;但当维度降低,在低维空间,在加入ReLU则会破坏特征。因此,采用Linear Bottlenecks结构,即在执行降维的卷积层后面,不再加入类似ReLU等激活函数进行非线性转化,从而尽可能避免信息丢失。
    在这里插入图片描述
    DW:depth-wise
    PW:point-wise
    V2版本在第一个DW卷积之前新加入一个PW卷积,可以动态改变特征通道
    V2去掉了第二个PW的激活函数,最大程度保留有效特征。
    在这里插入图片描述

  • 逆残差结构:ResNet中,采用了残差结构,即先用卷积降维再用卷积升维,再和输入相加。但在mobileNet中,depthwise conv卷积的层数是输入通道数,本身比较少,加入采用残差结构,那么可利用的特征就太少了,因此mobileNet采用逆向的方法,即先升维在降维。
    在这里插入图片描述
    在这里插入图片描述
    逆残差结构借鉴了ResNet,都采用了11->33->1*1的模式,同样采用shortcut短路连接将输出和输入相加;不同的是V2采用深度卷积来提取特征,且采用先升维、卷积再降维的方式。
    mobilenet网络结构
    在这里插入图片描述
    ReLU6,即普通的ReLU但限制输出最大为6

  • mobilenet V3
    新的激活函数:h-swish,基于swish激活函数的改进。
    swish激活函数:swish具备无上界有下界、平滑、非单调的特性。
    f ( x ) = x ⋅ s i g m o i d ( β x ) f(x)=x·sigmoid(\beta x) f(x)=xsigmoid(βx)
    那么,h-swish:
    h − s w i s h [ x ] = x ⋅ R e L U 6 ( x + 3 ) 6 h-swish[x]=x·\frac{ReLU6(x+3)}{6} hswish[x]=x6ReLU6(x+3)
    引入SENet,即引入轻量级注意力机制网络,通过压缩、激励,给不同层不同权重。

    mobilenet各版本对比
    在这里插入图片描述

shufflennet

分组点卷积

  • 分组卷积:
    在这里插入图片描述
    H、W:特征高、宽
    c1:输入特征通道数
    c2:卷积核个数
    h1、w1:卷积核大小
    g:分组数
    在这里插入图片描述
  • 点卷积:
    在这里插入图片描述
    在深度分离卷积中分组数恰好等于通道数,意味着每个组只有一个特征图,之后采用密集的未分组11点卷积,但大量密集的11卷积造成了极大的算力负担。
    分组点卷积
    在这里插入图片描述
    GConv1,GConv2:分组卷积块
    feature:卷积特征
    特征之间需要进行信息融合,否则会降低网络的特征提取能力。
    通道重排
  • 分组点卷积某个通道的输出仅来自一小部分输入通道,阻止了信息流动,特征表示。因此,假如我们允许卷积从不同组中获取输入数据,则输入和输出通道将完全相关。
  • 对于从上一个组层生成的特征图,可以先将每个组中的通道划分为几个子组,然后在下一层中的每个组中使用不同的子组作为输入。
    在这里插入图片描述
  • 不同组之间通道的混乱排列。称为channel shuffle
  • 假定,卷积层分为 g g g组,输出特征通道数为 g × n g \times n g×n
  1. reshape:将 g n gn gn个通道数变为维度为 ( g , n ) (g, n) (g,n)
  2. transpose:将上述维度转置为 ( n , g ) (n,g) (n,g)
  3. flatten:展开作为下一组卷积输入
    在这里插入图片描述
    通道重排操作使构建具有多个组卷积层的更强大的网络结构成为可能。

ShuffleNet

  • 基本单元:
    在这里插入图片描述
  • FLOPs(浮点运算数,用于衡量计算量)
    输入特征: h × w × c h \times w \times c h×w×c
    Bottleneck通道数: m m m
    分组数: g g g
    在这里插入图片描述
    后续版本创新
  • shuffleNet V2:
    当输入输出通道数相同时,运算速度最快;过度使用组卷积会增加算力消耗;网络的多通路结构会使网络碎片化,拖慢速度;Element-wise operation会消耗较多的时间。
    改进:
  1. channel split:将输入特征通道划分为两部分,即一部分进bottleneck,另一部分不做操作(输入输出通道数相同)
  2. 替换分组点卷积为标准点卷积(防止点卷积过度)
  3. channel shuffle放到维度叠加后(防止碎片化)
  4. 将element-wise add替换为concat(减少时间消耗)
    在这里插入图片描述

SqueezeNet

动机
给定一个精度级别,会有多个CNN架构可以达到该精度,因此,在同等精度下,具有较少参数的CNN有三大优势:

  1. 更高效的分布式训练(分布式训练的数据以并行方法在每个服务器上保留整个模型的副本来处理训练数据集的不同子集),即通信开销与模型中的参数数成正比(越小的模型,训练更快)。
  2. 将新模型导入客户瑞时,开销较小。(Over-the-air update ,OTA是指移动终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术。)即,越小的模型,需要的通信更少,从而实现频繁更新。
  3. 更容易在嵌入式设备上进行部署。即,较小的模型让芯片(FPGA),嵌入式设备存储,部署神经网络更加可行。
    动机:寻找并构建一个与经典网络具有相同精度并参数量更少的模型。
    结构设计策略
  • 卷积核大小:用11卷积替换33卷积
    在卷积核数目一定的情况下,用大多数的11卷积替换33卷积(减少卷积操作的参数量)
  • 减少3*3卷积的输入特征通道数,利用squeeze layers(压缩层),实现输入特征通道减少。
  • 降采样后置
    在卷积网络种,每个卷积层都会生成输出特征图,特征图主要受以下因素控制:输入数据size和降采样层的位置
    尺寸更大的特征图包含更丰富的空间信息,能最大化分类精度,因此降采样层放在靠后的位置。
    the fire module
    由两部分组成:squeeze layer和expand layer。
    Squeeze layer:全部由11卷积核组成,旨在压缩特征的通道数,设 S 1 × 1 S_{1\times1} S1×1为压缩层的卷积核个数,也是经压缩层后饿输出特征通道数
    Expand layer:由部分1
    1卷积和部分33卷积组成,将压缩层输出特征作为输入,设 e 1 × 1 e_{1\times1} e1×1 e 3 × 3 e_{3\times3} e3×3分别表示在扩展层中11卷积核和3*3卷积核的个数。
    实际应用中, S 1 × 1 < ( e 1 × 1 + e 3 × 3 ) S_{1\times1}<(e_{1\times1}+e_{3\times3}) S1×1<(e1×1+e3×3),这样就降低了输入特征的通道数。
    在这里插入图片描述

    SqueezeNet网络架构
    在这里插入图片描述
    在这里插入图片描述

xception

inception系列
在这里插入图片描述
inception系列网络的探索空间:

  • inception中卷积核的个数,卷积核的大小对网络性能有何影响
  • 卷积过程中,对特征不同层的操作和对特征每一层中空间的操作能否完全分开.
    Xception的意义
  • Xception在inception V3的基础上,构建了一种极致的Inception结构,通过更少参数来获取更丰富的特征表示
  • 证明卷积操作中对特征不同层的信息提取和对每一层中空间信息的提取是完全可分离的.
    Inception系列网络发展:
  • Inception V1:利用多尺寸卷积核去观察输入数据,加宽网络;利用1*1卷积核进行降维操作,减少特征的通道数。
  • Inception V2/V3:加入BN层,用于规范每一层输入数据分布;卷积核分解,即利用两个33卷积核替换55卷积;NN卷积分解,即将一个NN的卷积核分解为1N和N1的卷积核组合。
    Xception网络结构
    动机:在inception系列中,卷积操作中,对不同层之间的特征提取和对每一层中空间特征的提取任然没有完全分离,因此是否可以假设它们可以被完全分离。
    基于Inception V3的改进:
  • 去掉池化通路,得到简化版的inception module
    在这里插入图片描述
  • 将所有的11卷积核合并,变成一个统一的11卷积,后面的33卷积核分别负责一部分11卷积的输出。

在这里插入图片描述

  • 提出 extreme version of inception(Xception),增加每一层中33卷积核的数量,一个33卷积核只负责一个通道,即经过1*1卷积得到的输出特征的一个通道。

在这里插入图片描述

  • xception网络主体结构
    在这里插入图片描述
    separableConv:极致inception模块
    entry flow:1个
    middle flow:8个
    exit flow:1个
    共有36个卷积层,划分为14个模块;除第一个核最后一个模块外,都有残差结构相连。
    深度可分离卷积对比

  • 原版深度可分离卷积:卷积顺序是先进行33深度卷积再进行11点卷积;卷积层后不连接激活函数。
    在这里插入图片描述

  • xception深度可分离卷积:卷积顺序是先进行11点卷积再进行33深度卷积;在点卷积和深度卷积后都连接ReLU激活函数。
    在这里插入图片描述

knowledge distilling

动机:

  • 网络训练与应用之间的矛盾:在训练阶段,网络可以通过对同一数据集进行多次学习得到多个不同的模型,并将各模型的预测结果加权作为最终输出,即采用集成学习的方式来提高任务性能。然而这一方法在网络实际应用中非常耗时耗力,不利于部署。
  • 将集成模型中知识压缩到方便部署的单个模型中是可行的,即可以从大模型所学习到的知识信息中学习有用信息来训练小模型,可以在保证性能相近的情况下进行模型压缩。
    在这里插入图片描述
    本文方法
    在这里插入图片描述
  • 提出蒸馏的思想,将大模型中学习到的知识迁移到单一小模型中,在保证精度的基础上,来压缩模型。
  • 利用大模型生成的类别概率作为soft targets,待压缩模型自身的类别作为hard targets,两者结合共同训练待压缩模型。
    集成模型
  • 原理:一种机器学习范式,通过结合多个模型的决策,来提高最终模型的稳定性和准确性。
    在这里插入图片描述
    在这里插入图片描述
  • 方法由bagging和boosting
    在这里插入图片描述
  • 集成模型是基于分而治之的思想,可以提高模型性能,增强健壮性,但也有不足之处:模型可解释性差;算力消耗大,运算时间长,不符合移动端需求,模型的选择有随机性,不能确保是最佳组合。
    知识蒸馏思想
  • 知识蒸馏的主要思想是训练一个小的网络模型来模仿一个预先训练好的大型网络或集成的网络。这种训练模式被称为“teacher-student”,大型网络是教师网络,小型网络是学生网络。
    在这里插入图片描述
  • 知识蒸馏期望让学生网络在拥有更少参数量,更小规模的情况下,达到与教师网络相似甚至超越教师网络的精度。
  • knowledge:模型的参数信息保留了模型学到的知识(学习如何从输入向量映射到输出向量)
    知识蒸馏方法
  • 教师网络经过训练输出一个类别概率分布
  • 学生网络以教师网络的输出预测为指导,输出一个类别概率分布
  • 设计学生网络的损失函数,最小化以上两个概率分布之间的差距
    在这里插入图片描述
  • 温度系数T(Temperature)为了从教师网络中蒸馏除更多,更丰富的信息,引入温度参数T的概念。T越大,网络输出类别概率分布越soft,学生网络越能从教师网络中学到更丰富的knowledge。
    在这里插入图片描述
    T为温度系数,是蒸馏的温度。当T越高时,概率分布越平坦。
    在这里插入图片描述
    横坐标: Z i Z_i Zi网络送入softmax层的输入值
    纵坐标:经升温蒸馏后的预测概率
    当温度T越高时,soft targets越平坦,信息不会全部集中在正确类别上。因此,增大温度系数T相当于放大这些非正确类别所携带的信息(这些信息同样重要)
    无论温度T取值如何,soft targets都有忽略小的 Z i Z_i Zi所携带信息的倾向
    蒸馏过程
    在这里插入图片描述
    Input:输入数据
    Teacher model:教师网络模型
    student model:学生网络模型(待蒸馏模型)
    soft targets:教师网络经升温后的softmax预测类别输出
    soft prediction:学生网络经升温后的softmax预测类别输出
    hard prediction:温度系数为1,即学生网络原始softmax预测输出
    hard targets:输入数据真实标签(ground truth)
    过程:
  • 教师网络训练:首先利用数据训练一个层数更深,提取能力更强的教师网络,得到logits后,利用升温T的softmax得到预测类别概率分布soft targets
  • 蒸馏教师网络知识到学生网络,构造distillation loss和student loss,加权相加作为最终的损失函数:
    L = α L s o f t + β L h a r d L=\alpha L_{soft}+\beta L_{hard} L=αLsoft+βLhard
    distillation loss:将教师网络输出logits温度为T的蒸馏,经过softmax层之后得到类别预测概率分布,作为soft targets,同时,学生网络输出logits经过相同温度T进行蒸馏,经过softmax层之后得到类别预测概率,作为soft predictions。蒸馏的目的是让学生网络的类别输出预测分布尽可能拟合教师网络输出预测分布
    student loss:教师网络也有一定的错误率,使用真实标签作为hard targets,可以有效防止教师网络中的错误信息被蒸馏到学生网络中。
    在这里插入图片描述
    在不同损失函数权重设置时,给蒸馏损失较大权重,学生网络损失较小权重能得到更好结果。
    soft targets产生的梯度的大小按 1 T 2 \frac{1}{T^2} T21缩放,因此,在同时使用soft targets和hard targets时,要将蒸馏损失项乘以 T 2 T^2 T2
  • 蒸馏的特殊形式:直接利用logits
    直接使用softmax层的输入logits作为soft targets,需要最小化的目标函数是教师网络和学生网络的logits之间的平方差
    在这里插入图片描述
    在大数据集上训练专家集成模型
    动机:利用并行计算训练集成模型很容易,但如果单个模型已经是大型神经网络并且数据集非常大,则即使很容易并行化,训练时所需的计算量也会过多。因此,通过知识蒸馏,训练包含专家模型的集成模型,减少计算量。
    集成模型包含一个通用模型(generalist model)和多个专家模型(specialist model)
    在这里插入图片描述
    generalist model(通用模型):负责将数据进行粗略地区分,将相似地图片归为一类
    specialist model(专家模型):负责将相似度图片进行更细致地分类
  • 训练专家模型时,模型地参数在初始化地时候是完全复制地通用模型的值,这样可以保留通用模型的所有知识,但专家模型若只专注于分配的数据集,网络很容易过拟合。
  • 为了减少过拟合,每个专家模型都要用通用模型的权重进行初始化。然后,通过训练专家模型对这些权重进行略微修改:训练数据的选择上,一般来自其特殊子集,另一半从其余训练集中随机抽样。
  • 用一般的时间进行hard label训练,另一半时间用知识蒸馏的方法学习generalist生成的soft label
  • 将图片输入通用模型得到输出的概率分布,取概率最大的类别K
  • 取除数据集包含类别K的所有专家模型,作为集合,求解能使公式最小化的概率分布q作为预测分布:
    在这里插入图片描述

attention transfer

**动机:**在知识蒸馏中,教师网络学习到的注意力图可以作为一种知识,蒸馏到学生网络中,让学生网络尝试生成与教师网络相近的注意力图,从而提升学生网络的性能表现。(利用KL散度逼近)
在这里插入图片描述
在注意力图的生成方式上,提出基于激活(activation-based)和基于梯度(gradient-based)的两种注意力图生成方式。
CV中的注意力机制
视觉注意力机制是人类视觉所特有的大脑信号处理机制,即人类视觉通过快速扫描全部图像,获得需要关注的目标区域,而后重点获取所需要关注的目标信息,抑制其他无用信息。

  • 决定需要关注输入的哪部分
  • 分配有限的信息处理资源给重要的部分
  • 注意力机制类型:
    空间域(spatial domain):更多关注特征空间信息,决定空间中哪些区域是重要的,哪些是不重要的
    通道域(channel domain):更多关注特征通道之间的信息,来决定不同通道之间的重要程度
    混合域(mixed domain):同时关注特征空间和通道之间的关系。
    空间域
    在这里插入图片描述
    将注意力集中在空间中的重点区域
    动态容量网络:包含两个自网络,即coarse model(粗略子网),用于对全图进行处理,定位到感兴趣的关键区域;fine model(精准子网),对所有感兴趣区域进行更精细的特征提取。
    通道域
    在这里插入图片描述
    将注意力集中在学习通道间的重要程度
    SENet:squeeze(压缩),即把原本HWC的特征压缩为11C,每个通道用一个数值表示;excitation(激励),对上一步骤得到的11C特征进行重要性预测,学习不同通道的重要程度;scale(重定向),根据学习到通道重要性权重,与原始特征图相乘,得到最终特征图输出。
    混合域
    将注意力机制同时应用在特征空间和特征通道上
    CBAM:
  • 通道注意力机制:首先经过两种池化方式聚合信息,得到两个特征输出;然后通过一个MLP学习通道间的重要程度,将两个通道注意力图相加,与原特征图相乘,得到最终特征输出。
    在这里插入图片描述
  • 空间注意力机制:首先沿着通道方向进行最大池化和平均池化,将两个输出特征进行通道叠加;对叠加后的特征图,利用7*7卷积生成空间注意力图
    在这里插入图片描述
    注意力机制应用
    在这里插入图片描述
    基于激活的注意力
    假定CNN中某层激活后特征图为: A ∈ R C × H × W A \in R^{C \times H\times W} ARC×H×W,其中C为特征图通道数,H为特征图高,W为特征图宽
    F : R C × H × W − > R H × W F: R^{C \times H\times W}->R^{ H\times W} FRC×H×W>RH×W基于激活的注意力转移,以某层激活后的特征图A作为输入,输出空间注意力图。
    三种实现方式:
  • 计算特征图中每个点的绝对值,按照通道方向累加
    在这里插入图片描述
  • 计算特征图中每个点绝对值的P次方,按照通道方向累加
    在这里插入图片描述
  • 对特征图中的每个点,首先找到对应所有通道的绝对值最大值,然后计算该值的P次方
    在这里插入图片描述
  • 结论:网络中不同层有不同的注意力区域,会生成不同的注意力图。比如:中间层对于最具有判别性的区域激活程度最高,最高层则会反应目标整体的特征区域。
    在这里插入图片描述
  • 几点差异:与Fsum(A)相比,Fpsum(A)将更大的权重分配给与激活成都最高的神经元相对应的空间位置。比如,将更多的权重分配给最有判别性的部分;在相同空间位置的所有激活神经元中,Fpmax(A)只选择其中最大的一个来赋予权重,而Fpsum(A)更倾向于多个神经元都激活的区域。
    基于激活的注意力转移(知识蒸馏)
    首先生成教师网络的注意力图,这个注意力图可以利用上述三种方式任意一种得到。知识蒸馏的目标是让学生网络生成的注意力图与教师网络生成的注意力图尽可能相似,从而提升学生网络准确率。
    在这里插入图片描述
    当教师网络和学生网络的网络深度不同时:
  • 相同深度:在每个残差块后做注意力转移
  • 不同深度:在每个残差块组后做注意力转移。
  • 损失函数(AT Loss)设计:
    在这里插入图片描述
    其中S:学生网络;T:教师网络; W s W_s Ws:学生网络权重参数;j:教师网络和学生网络相对应激活层编号; Q s Q_s Qs:学生网络激活图的向量表示; Q t Q_t Qt:教师网络激活图的向量表示; L ( W s , x ) L(W_s,x) L(Ws,x):学生网络交叉熵损失;P:正则化类型
    基于梯度的注意力转移
    用输入的梯度表示注意力:关注那些对输出影响大的区域。比如:只变化输入图像很小的一个像素块,就能使网络输出发生巨大变化,那么可以认为这个像素块值得我们关注。
  • 对教师网络和学生网络的交叉熵损失函数分别求梯度(求导),作为梯度注意力转移的损失函数
    在这里插入图片描述
  • 目标是:最小化 J S J_S JS J T J_T JT之间的距离,由此将教师网络中对网络输出影响很大的区域转移到学生网络中
    在这里插入图片描述
  • 当教师网络的参数和输入均给定时,对学生网络的参数求导,可得到:
    在这里插入图片描述
  • 利用注意力转移进行知识蒸馏
    在这里插入图片描述
    流程:首先需要进行一次向前传播和一次反向传播,得到 J S J_S JS J T J_T JT,然后再进行以传播,实现学生网络的参数更新。
    特别情况下:提出了迫使梯度注意力图的水平翻转不变的损失函数。把原图和水平翻转的图像都做传播,然后加上得到的注意力图和输出的L2损失,做第二次传播。

learning weights and connections

剪枝动机

  • 通过在训练过程中改变模型结构,可以减少模型参数量,降低模型计算量,加快模型推理速度
    在这里插入图片描述
  • 模型通过训练学习到的权重不仅可以用来推理除最后结构,也可以当作判断神经元重要性的指标。
    在这里插入图片描述
  • 同时训练权重和要剪枝的神经元可以降低损失
    在这里插入图片描述
    本文方法:首先在数据集上对未压缩的模型进行完整的训练,直至收敛;其次在经过完整训练的未压缩模型基础上,剪掉一批权重小于阈值的神经元;最后在数据集上对剪枝过的模型进行权重微调,使其恢复精度。
    网络参数量和计算量
    网络参数量:模型所有带参数的层的权重参数总量。视觉类网络组件中带参数的层,主要有卷积层、BN层、全连接层等(激活函数层、pooling层和upsample层是没有参数的,不需要学习)
    在这里插入图片描述
    其中K为卷积核的长和宽, C i C_i Ci为输入通道数, C o C_o Co为输出通道数。
    FLOPS
    FLOPS,即每秒浮点运算次数,是用于估算电脑的执行效能(尤其是在使用大量浮点运算的科学计算领域)
    在这里插入图片描述
    MAC
    MAC,即内存访问成本,计算机在进行计算时要加载到缓存中,然后再计算,这个加载过程是需要时间的,其中分组卷积是对MAC消耗比较多的操作。
    在这里插入图片描述
    神经网络剪枝
    人工神经网络中的剪枝受启发于人脑中的突触修剪。
    神经网络中的剪枝:
    在这里插入图片描述
    通常情况下,神经网络中下层的每个神经元与上层都有连接,但这种情况下,我们需要进行大量的浮点相乘运算。那么,在完美情况下,经过剪枝,我们只需将每个神经元与几个其他神经元连接起来,不需要进行其他浮点相乘操作,即稀疏网络
  • 非结构化剪枝:是把每个单一的权重设为0(并没有减少参数量,要搭配CSC/SCR等类似方法)。因此若矩阵含有几乎不重要的行跟列,非结构化剪枝并没办法完全把它移除掉,只能把它大部分的权重设为0
    在这里插入图片描述
  • 结构化剪枝:是把整列和整行的权重移除掉(即把一个神经元去掉)。若在一个重要的行跟列里有些许不重要的权重,结构化剪枝没法把它设为0.
    在这里插入图片描述
  • 如何判断神经元的重要性:
    在这里插入图片描述
    三步剪枝方法
  1. 在数据集上从头训练一个网络,获得连接权值
  2. 根据规则剪掉一定数量的神经元
  3. 将剪完后的神经网络继续在数据集上进行微调,使其恢复正确率
    在这里插入图片描述
  • 迭代剪枝:不同的连接方式下,每个神经元的重要程度是不一样的,经过多次剪枝可以对每个神经元进行更多地评估,从而选出最优的连接方式。
    在这里插入图片描述

Network slimming

动机

  • 通过在训练过程中剪去部分权重,可以减少模型参数量,降低模型计算量,并加快模型推理速度。但是剪枝后的模型参数由于是非结构的,是无法直接部署在通用计算设备上。

  • 通道剪枝往往直接剪去整个通道参数,那么如何快速又准确地判断通道地重要性至关重要
    在这里插入图片描述

  • 迭代式训练可以降低剪枝带来地精度损失。
    在这里插入图片描述
    CNN通道剪枝

  • CNN剪枝的种类:weight-level(权重)剪枝;channel-level(通道)剪枝;layer-level(层)剪枝
    在这里插入图片描述

  • 通道剪枝:核心思想是移除一些冗余的channel,从而简化模型。通道剪枝的目的是把B中的某些通道剪掉,但是剪掉后的B和W的卷积结果能尽可能和C接近,即当删减B中的某些通道时,同时也裁剪了W中与这些通道的对应卷积核,因此通过剪枝可以减少卷积的运算量。
    在这里插入图片描述

  • 通道卷积的优点:通道剪枝是对网络结构的一部分做剪枝或稀疏化,而不是对个别权重。因此不太需要特别的库来实现推理加速和运行时的内存节省。

  • 通道剪枝的数学表达:X表示输入的feature map,W表示卷积核,Y表示输出的feature map。 β \beta β表示通道系数,当 β \beta β为0时,表示该通道可以被删除。那么,我们的期望目标是将输入的feature map的channel从c压缩为 c ′ c^{'} c ( 0 < = c ′ < = c ) (0<=c^{'}<=c) (0<=c<=c),同时要使得构造误差尽可能地小。数学表达式为:
    在这里插入图片描述
    BN层
    一种数据归一化方法,其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或梯度消失,并且可以起到一定的正则化作用,也可以缓解内部协方差偏移问题(ICS)
    在这里插入图片描述

  1. 首先计算B的均值和方差,之后将B集合的均值、方差变换为N(0,1)
  2. 将B中每个元素乘以 γ \gamma γ,再加上 β \beta β输出。 γ \gamma γ β \beta β都是可训练参数,参与整个网络的BP。

基于BN的通道剪枝
使用BN层中的缩放参数 γ \gamma γ来判断通道的重要性。当值越小时,代表可以被裁剪掉。
当同一个BN层中 γ \gamma γ值很接近时应该怎么办,可以利用L1正则化来对通道进行稀疏,即:
在这里插入图片描述
在这里插入图片描述

  • 通过正则化进行通道稀疏,随着惩罚系数变大,越来越多的通道被约束到了。由于采用迭代式的剪枝方案,随着训练次数的增多,越来越多的通道被约束至0,同时要进行下采样的区域会被保留的更多(避免特征流失)
  • 对跨层连接结构的网络进行剪枝

在这里插入图片描述
通道剪枝对ResNet这种跨层连接的网络不太好,这是因为每一层的输出会作为后续多个层的输入,即要保证通道数一致。
因此,可以增加一个channel selection模块。
在这里插入图片描述

pruing for efficient inference

动机

  • 通过采用结构化剪枝方法,从而避免非结构化剪枝无法直接用于加速的问题
  • 通过用一阶泰勒展开来计算通道对最后推理结果的影响,从而判断通道的重要性,从而大大降低剪枝过程中的计算量
    在这里插入图片描述
  • 迭代式训练可以降低剪枝带来的精度损失
    在这里插入图片描述
    现有判断通道重要性的方法
  • 权重大小
  • 激活值
  • 互信息
    I G ( y ∣ x ) = H ( x ) + H ( y ) − H ( x , y ) IG(y|x)=H(x)+H(y)-H(x,y) IG(yx)=H(x)+H(y)H(x,y)
  • BN层缩放参数
    对通道进行重要性判断
    对Oracle-abs进行一阶展开,并作为通道重要性的判断依据
    在这里插入图片描述
    通道重要性判断
  1. 根据Oracle-abs
    通道剪枝的本质是剪去无用的通道权重,即去除对最终结果影响最小的通道。
    在这里插入图片描述
    其中C表示Loss,W和 W ′ W^{'} W分别表示完整的通道和剪枝后的通道,D代表网络的输入输出。B为最大通道保留数量
  2. 根据权重的绝对值
    首先计算各个通道权重的绝对值之和,在根据计算所得对通道进行排序,最后剪去排名靠后的通道。
    基于泰勒展开的通道重要性判断
  • 泰勒展开
    泰勒公式是一个用函数在某点的信息描述其附近取值的公式。如果函数满足一定的条件,泰勒公式可以用函数在某一点的各阶导数值做系数构建一个多项式来近似表达这个函数。
    在这里插入图片描述
    在这里插入图片描述
  • 和optimal brain damage的区别
    基于一阶泰勒展开的通道重要性判断的核心思想与OBD是一致的,都是采用对Oracle-abs进行泰勒展开,从而判断通道的重要性。区别在于OBD采用更高阶的泰勒展开。
    由于一般剪枝之前,我们都会对完整的模型在数据集上进行预训练。因此,当网络渐渐收敛后,网络权重一阶导数的期望会趋向于0
    在这里插入图片描述
    因此,OBD更关注高阶的泰勒展开项
    但是,模型收敛后再次进行更新时,权重一阶导数的方差不为0:
    在这里插入图片描述
    在不考虑动量的情况下,每一批的输入图片是独立同分布的,因此每次权重一阶导数也是独立同分布的。 ∣ y ∣ |y| y的期望可以用半正态分布表示,是一个非0值。因此,只考虑一阶泰勒展开就可以判断通道有效性。
    在这里插入图片描述
    与其他判断方法进行联合
    在这里插入图片描述
    对每个通道的重要性进行归一化
    在这里插入图片描述
    FLOPs正则化
    来自不同层的通道,代表的计算量是不同的。因此,在评判标准中加入每个通道所在FLOPs可以让剪枝真正降低计算量,而不是只降低参数量。
    在这里插入图片描述
    这里的FLOPs正则化是对计算量大小的限制,同样可以改成其他的限制,比如内存大小、推理时间等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值