芯学长 | 掌握芯资讯,引领芯未来

您当前所在位置:首页 > 集创赛 > 赛事分享

全国集创赛经验分享-SSD-MobileNetV1网络结构

发布时间:2023-06-02 0

本文主要对本次比赛使用的SSD-MobileNetV1网络结构以及使用paddleslim和PaddleDetection做神经网络剪枝量化的大致流程,具体方法详见paddle相关在线文档。

1.1模型、剪枝与量化

1.1.1 MobileNetV1

MobileNetV1是基于深度级可分离卷积构建的网络[1]。MobileNetV1将标准卷积拆分为了两个操作:深度卷积(DW)和逐点卷积(PW),DW卷积和标准卷积不同,对于标准卷积其卷积核是用在所有的输入通道上,而DW卷积针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道。而PW卷积其实就是普通的卷积,只不过其采用1x1的卷积核。

图1.深度可分离卷积

两种卷积方式的计算量差异分析如下:

两种卷积方式的计算量差异分析如下:

输入尺寸为��∗ ��∗ � ,标准卷积核的尺寸为 ��∗ ��∗ �∗ �

1. 采用标准卷积核进行卷积,步长为1且padding,那么输出尺寸应该为 DF x DF x N,计算量为 �� ∗ �� ∗ � ∗ � ∗ �� ∗ �� ;

2. 采用深度可分离卷积,先使用 M个深度卷积对输入的M个通道分别进行卷积得到尺寸为 �� ∗ �� ∗ � ,计算量为 � ∗ �� ∗ � ∗ �� ∗ �� ;再使用N个 1 ∗ 1 ∗ � 的卷积核进行逐点卷积得到输出尺寸为 �� ∗ �� ∗ � ∗ � ,计算量为 � ∗ � ∗ �� ∗ �� ;故总的计算量为 �� ∗ �� ∗ � ∗ �� ∗ �� + � ∗ � ∗ �� ∗ �� 。

第二种卷积方式的计算量与第一种相比:

��⋅��⋅�⋅��⋅��+�⋅�⋅��⋅����⋅��⋅�⋅�⋅��⋅��=1�+1��2

一般情况下 � 取值比较大,那么如果采用 3 * 3 卷积核的话,深度可分离卷积相较标准卷积可以降低大约9倍的计算量。

对MobilenetV1网络进行时间分析如下,可以看到,MobileNet的95%的计算都花费在了1×1的卷积上。所以后文对网络进行优化的时候,应该特别注意对PW卷积进行优化。

图2. MobilenetV1网络各部分占比

1.1.2 SSD检测头

主流的算法主要分为两个类型:(1)two-stage方法,如R-CNN系算法,two-stage方法的优势是准确度高;(2)one-stage方法,如Yolo和SSD,YOLO系列模型速度很快,准确度略低,RCNN系列模型速度很慢,准确度较高,SSD系列模型在速度和准确度之间做了折中。

SSD核心设计理念总结为以下三点[2]:

(1)采用多尺度特征图用于检测

CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小。一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标。

image

图3. SSD多特征图检测

(2)采用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 的特征图,只需要采用 这样比较小的卷积核得到检测值。

(3)设置先验框

SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异。

(4)非极大值抑制(NMS)算法

有时,一个物体可能被多个边界框包含,造成不好的视觉效果。可以用非极大值抑制(NMS)算法,遍历所有重叠在一起的边界框,选取其中置信度最高的一个作为最终的结果。

1.1.3整体网络结构

image

图4. SSD-MobileNetV1网络架构

1.1.4模型剪枝

深度神经网络结构中,有着大量的冗余参数。在推理过程中,仅有少部分的权值参与有效的计算,并对推理结果产生主要影响。剪枝方法通过把网络结构中冗余的权值、节点或层去掉,减少网络的规模,降低计算复杂度。让模型在推理效果、推理速度上达到平衡[3,4]。

常见的剪枝方式可分为结构化剪枝和非结构化剪枝。前者在某个特定维度(特征通道、卷积核等等)上对卷积、矩阵乘法做剪枝操作,然后生成一个更小的模型结构,这样可以复用已有的卷积、矩阵乘计算,无需特殊实现推理算子;后者以每一个参数为单元稀疏化,然而并不会改变参数矩阵的形状,只是变成了含有大量零值的稀疏矩阵,所以更依赖于推理库、硬件对于稀疏后矩阵运算的加速能力。

结构化剪枝的基本修剪单元是滤波器或权重矩阵的一个或多个Channel。由于结构化剪枝没有改变权重矩阵本身的稀疏程度,现有的计算平台和框架都可以实现很好的支持。

模型剪枝的主要流程如下:

(1)训练一个性能较好的原始模型。原模型网络参数量较大,推理速度较慢。

(2)判断原模型中参数的重要程度。

(3)去除重要程度较低的参数。

(4)在训练集上微调,尽量避免由于网络结构变化而出现的性能下降。

(5)判断模型大小、推理速度、效果等是否满足要求,不满足则继续剪枝。

1.1.5剪枝敏感度分析

对于结构化剪枝,一般不同的卷积层对剪枝的敏感度不同,剪枝时计算网络中每个卷积层的敏感度。每个卷积层的敏感度信息统计方法为:给一个层先设置一个剪枝等级,也就是预先确定一个稀疏度,然后执行一次剪枝,在测试集上评估剪枝后的模型并记录准确率得分。 模型的所有参数都做以上步骤,且每层都用多个稀疏度检查,得到敏感度信息后,可以通过观察或其它方式确定每层卷积的剪裁率。

使用敏感度分析有一个重要的前提,模型应该是已经训练到最佳性能,再做以上分析。

1.1.6模型量化

把深度网络模型中高比特的权值和特征值用更低比特来表示的方法称为模型量化。在深度模型训练和推理过程中,我们最常使用的是32bit浮点型精度。但是高比特意味着模型的体积更大,推理速度更慢,硬件资源的消耗更多。这对于部署在计算资源和存储资源有限的边缘设备上是很不友好的。通过使用更低比特的精度,在尽量保持原模型效果的同时,获得尺寸更小、推理速度更快、硬件资源占用更少的模型是目前研究的重点方向[4]。

训练感知量化QAT:

量化过程不可避免的会带来模型精度的损失,为了能够尽量保持原模型的精度,通常会对量化后的模型做fine tuning,或者进行重新训练。这种方式称作;训练感知量化。

QAT的量化方法如下:

(1)训练一个高比特的浮点模型;

(2)确定模型网络中需要量化的部分,并在网络相应位置插入伪量化的Ops;

(3)在模拟量化过程(simulated quantization,伪量化)的模式下迭代训练。

(4)存储量化参数,生成并优化低比特的量化推理模型。

(5)使用量化模型执行推理。

在paddleslim中,模型量化包含三种量化方法,分别是动态离线量化方法、静态离线量化方法和量化训练方法。

下图展示了如何选择模型量化方法。

图5.不同情况下量化方法的选择

下表综合对比了模型量化方法的使用条件、易用性、精度损失和预期收益。

image

图6.不同量化方法的对比

内容来源:知乎“北城以南single”,侵权删除。

【免责声明】:本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。

文章评价

-   全部 0 条 我要点评