基于改进YOLOv4 算法的轻量化网络设计与实现

2022-03-12 05:56孔维刚李文婧王秋艳曹鹏程宋庆增
计算机工程 2022年3期
关键词:网络结构嵌入式卷积

孔维刚,李文婧,王秋艳,曹鹏程,宋庆增

(1.天津工业大学 计算机科学与技术学院,天津 300387;2.天津工业大学 电气工程与自动化学院,天津 300387;3.中国电子科技集团公司信息科学研究院,北京 100086)

0 概述

在计算机视觉领域,图像识别算法不断推陈出新,其在遥感监测、医疗卫生、军事科技等方面取得了较大成就。从算法的角度来看,卷积神经网络凭借其卓越的特征提取能力和可扩展性,在图像识别领域表现优异,使得目标检测不断地从传统的识别方法向基于深度学习的识别方法发展。目前的深度学习算法大致可分为二阶段算法和一阶段算法两类:二阶段算法先从图像中选取候选框,然后在该候选框中得到分类和回归结果,该类算法包括RCNN[1]、Fast-RCNN[2]、Faster-RCNN[3]等,算法能得到较高的准确率,但训练步骤繁琐,且占用了较多空间;一阶段目标检测算法(如SSD[4]、YOLO[5-7]等)不需要候选框,它们直接通过卷积操作来进行分类和回归预测,进而得到物体的类别和坐标信息,该类算法的速度快、占用空间小。嵌入式平台对低功耗和低能耗有较大需求,因此,需要一个更加轻便灵活的网络结构来完成推理工作。

本文在YOLOv4 算法[8]的基础上进行网络结构改进和量化处理,使其满足微算力、低功耗的需求。在特征提取层,采用更加轻便的MobileNetv3[9]设计,利用深度可分离卷积(PW 和DW)降低参数量和计算量,并对MobileNetv3 进行改进,使其更加贴合YOLOv4 的检测层。在此基础上,对网络进行8 bit的量化操作,从而在牺牲少量精确度的前提下大幅降低模型所占空间。

1 相关工作

YOLOv4 是YOLO(You Only Look Once)系列目标检测算法中的第四版,相较YOLOv3 算法,YOLOv4 网络结构并没有太大改变,但是在数据预处理层面、损失函数层面都对YOLOv3 进行了改进,使得网络在速度未降低的前提下精确度大幅提升。YOLOv4 算法流程如图1 所示。

图1 YOLOv4 算法流程Fig.1 YOLOv4 algorithm procedure

YOLOv4 的主要创新在于Bag of freebies[10]和Bag of specials:

1)Bag of freebies 是指目标检测器在不增加推理损耗的情况下达到更好的精度,通常只需转变训练策略或只增加训练成本,如用马赛克增强(Mosaic data augmentation)方法将4 张图片拼成1 张,增加单GPU 的显存利用率从而提升其训练能力,或利用自对抗训练在原始图片上增加一些轻微扰动,使得在人分辨不清的情况下诱导模型进行分类,或在标签处理中采用组内标签平滑的手段,损失函数层面运用Focal Loss 等不改变网络结构的方法,并利用模拟余弦退火的方法改进学习率。

2)Bag of specials 是指插入模块用来增强某些属性,从而大幅提高目标检测的准确性。

2 网络结构设计

2.1 YOLOv4 结构介绍

特征提取网络CSPDarkNet53 中采用CSPNet,可以大幅减少计算量并提高推理速度和准确性。YOLOv4 将DarkNet53 分成若干个CSPNet 进行处理,进而形成CSPDarkNet53 特征提取网络结构。此外,通过添加SENet[11]来学习通道之间的相互依赖关系,从而给通道间施加注意力机制,使网络有主次地学习通道间的特征。

采用空间金字塔池化(Spatial Pyramid Pooling,SPP)[12]的原理是对全连接层前的卷积层,执行3 个不同尺度的最大池化操作,然后进行拼接形成一个一维的向量,上述过程对输入图片尺寸没有要求,因此,输入图片的高宽比和大小可以任意取值。

2.2 MobileNetv3 介绍

本文利用Pytorch 框架,将YOLOv4 的特征提取层改为MobileNetv3-large 网络结构,该网络是NetAdapt算法与自动神经网络搜索(Neural Architecture Search,NAS)的结合。

MobileNetv3 综合了MobileNetv1[13]的深度可分离卷积、MobileNetv2[14]的具有线性瓶颈的逆残差结构、MnasNet 的基于SE(Squeeze and Excitation)结构的轻量级注意力模型这3 种模型的思想,并将最后一步平均池化层前移同时移除最后一个卷积层。MobileNetv3 网络结构如表1所示,其中,k为扩展层通道数。

表1 MobileNetv3 网络结构Table 1 MobileNetv3 network structure

表1 所述网络结构为原始MobileNetv3 网络,该网络共20 层,其中,后3 层通过池化和卷积的方法完成图像分类任务,由于本文面向检测识别任务,因此只取前17 层并对其进行一些优化处理。

2.3 MobileNetv3 网络改进

本文在MobileNetv3 结构中保留了SE 模块,使网络有主次地学习每层特征。在检测层,输出3 个不同尺度的分支,分别在BottleNeck 的第7 层、第13 层、第17 层进行提取,撇弃第17 层之后的模块,然后对这3 层分别进行PW 卷积操作以变换维度,使其能够与检测层衔接。

为了能在保留高维特征的前提下缩短延时,本文将平均池化前的层移除并用1×1 卷积来计算特征图。特征生成层被移除后,先前用于瓶颈映射的层也不再需要,这将减少10 ms 的开销,在提速15%的同时降低了操作量。由于后续的量化操作中不能对Leaky ReLU、h-swish 等激活函数进行模型融合操作(感知量化操作的预处理),因此只能将MobileNetv3和YOLOv4 检测层中的激活函数全部改为ReLU 激活函数进行量化处理。

在经过MobileNetv3 的特征提取后,会在YOLO头部层输出最终结果,图2、图3 中的CBL 是YOLOv4 的基本组件,即Conv+BN+Leaky ReLU。对 于YOLOv4 而 言,BN 和Leaky ReLU 是和卷积层不可分离的部分(最后一层卷积除外),它们共同构成了最小组件,YOLOv4 采用3 个不同尺度的特征图来进行目标检测。

图2 YOLOv4-CSPDarkNet53 整体网络框架Fig.2 YOLOv4-CSPDarkNet53 overall network framework

图3 YOLOv4-MobileNetv3 整体网络框架Fig.3 YOLOv4-MobileNetv3 overall network framework

3 网络算法改进

3.1 量化方法简介

目前,支持量化训练的框架主要有Pytorch 1.30以上、Tensorflow 2.0 以上以及微软的推断框架,每种框架都有各自的优势。本文在尝试这3 种框架后,最后选择Pytorch 1.40 版本作为8 bit 量化框架。Pytorch 提供了3 种量化模型的方法:

1)训练后动态量化,这是一种最简单的量化方式,其中,权重首先会被量化,激活值会在inference的过程中动态地被量化。

2)训练后静态量化,这是最常用的量化形式,其中权重提前量化,并且基于观察校准过程中模型的行为来预先计算激活张量的比例因子和偏差。训练后量化通常是在内存带宽和计算能耗都很重要的情况下进行的,CNN 是典型的用例。

3)感知量化训练,在Post Training 量化不能提供足够精度的情况下,可以使用感知量化训练,通过torch.quantization.FakeQuantize 来模拟量化过程。计算过程使用FP32,但是数据会通过被固定在一定动态范围以及依据四舍五入来模拟INT8 量化的影响[15]。

3.2 具体量化实现

本文采用感知量化训练方法,将模型权重变为INT8 类型,原因是采用INT8 类型的量化最大能保留256 个值,在最大限度地保证精度的情况下对模型进行压缩,从而减少参数量计算。

在实现量化的过程中,必须能够保持0.1×f的精度,因为0 在深层神经网络(DNN)中发挥很大作用,如果原始的0 映射到量化后的值发生改变并出现了精度损失,则计算过程中将会出现误差。

实际值和量化值的映射关系如式(1)所示:

其中:a表示实际值;θ表示压缩比例;q表示量化的比特数,如INT4 量化就是4;f表示量化后的小数位值。

量化过程中最重要的是确定合适的amax和amin。由于本文先训练模型,再利用训练好的模型进行量化训练(Post Training)操作,因此不存在确定amax和amin的问题。

在进行量化训练之前,还有一个重要步骤,即进行模型融合,将卷积层(Conv Layer)、批归一化层(Batch Norm Layer)和激活函数层(Activate Layer)相融合,方可进行后续的量化操作。由于MobileNetv3中的激活函数使用h-swish 和ReLU6,导致在进行感知量化时无法融合这类激活函数,因此本文将其都改为ReLU 激活函数,以进行模型融合操作。

在进行感知量化时,参数优化公式为:

其中:clamp 表示截止位数;N表示量化到多少位;ain表示待量化的数;β表示零点。式(2)即为一个位数的量化过程,若要进行INT8 类型的感知量化操作,则式(2)转换如下:

3.3 损失函数改进

本文损失函数选取YOLOv4 中最新设计的CIOU Loss 和DIOU Loss,使网络预测框更加准确。用IOU 代替L1 Loss 和L2 Loss,能够实现尺度统一[17-18]。IOU 计算公式如下:

其中:B为检测框的面积;Bgt为真实框的面积。

DIOU 是IOU 的改进版,用来反映检测框之间的距离。DIOU 计算公式如下:

其中:b是中心点;ρ是欧式距离;c是覆盖2 个框的最小框的对角线长。

CIOU 在DIOU 的基础上加入影响因子,其为目前性能表现最好的IOU Loss。CIOU 计算公式如下:

其中:α是平衡正数的参数;ν是确保长宽比具有一致性的参数。

可以看出,CIOU Loss 和DIOU Loss 都是对IOU Loss的改进,使得最后得出的预测框更加贴合实际目标。

3.4 激活函数改进

本文激活函数采用Mish[19]非线性激活函数,其在负值层面添加一段平滑点,而非ReLU 激活函数[20]中的零边界。平滑的激活函数允许更好的信息深入神经网络,从而得到更优的准确性和泛化能力。Mish 激活函数如式(7)所示:

其中:x为经归一化层传入的参数值。

4 实验验证

本文实验采用Pytorch 框架进行网络结构改进并执行量化操作,操作系统为Ubuntu 18.04.5,CPU为Inter Core i7-10875H,GPU 为NVIDIA RTX2060,在嵌入式设备上进行推理和测试操作,设备型号为NVIDIA Jetson NX。

4.1 实验数据集

本文目的是在嵌入式设备上完成无人机数据集的多目标检测任务,使用的数据集为12 分类的VisDrone2020 无人机数据集,其训练和验证图片共有10 890 张,测试图片有1 030 张。

4.2 实验设备

嵌入式设备使用NVIDIA 公司于2020 年最新推出的GPU 边缘计算设备Jetson Xavier NX,如图4 所示,它以10 W 的功耗每秒提供多达14 terra 运算(TOPS)或以15 W 的功耗每秒提供21 terra 运算,并行运行多个神经网络,设备运行基于Ubuntu 的Linux 操作系统。本文在该嵌入式设备上安装Ubuntu18.04 的操作系统镜像,并配置Python3.6 和Pytorch 环境。

图4 NVIDIA Jetson Xavier NX 设备Fig.4 NVIDIA Jetson Xavier NX equipment

4.3 实验过程

本文实验输入尺寸统一为1 024×1 024 像素的JPG 图像,将CIOU Loss 作为损失函数,总Batch size设置为16,每个GPU 的Batch size 为4,Epoch 设置为500,学习率设置为0.000 1,模拟余弦退火策略来调整网络学习率。数据增强手段采用马赛克数据增强方法,同时采用组内标签平滑的方法优化标签类。由于原始anchor 大小相比于无人机图像的目标而言过于庞大,因此本文使用KNN[21]聚类算法对输入数据集选取最合适的9 个anchor 大小,并将其应用到2 个网络中,分别训练原始YOLOv4-CSPDarkNet53网络、改进YOLOv4-MobileNetv3 网络以及经过感知量化训练的YOLOv4-MobileNetv3 网络,最后将上述3 种网络的结果进行对比。

4.4 结果分析

在衡量一个模型性能优劣时,通常会用准确度(Prescision)和召回率(Recall)来对其网络预测结果进行分析。在目标检测领域,对于单目标检测算法,通常用AP(Average Precision)指标来衡量某一类目标检测的精度;对于多目标检测算法,通常用mAP(mean Average Precision)来衡量多类目标检测的平均精度。由于本文是对12 分类无人机数据集进行目标检测,因此使用mAP 衡量指标。在嵌入式设备上进行推理检测,本文目标是在不降低mAP 或降低有限mAP 的前提下,最大化地压缩模型尺寸(size),减少模型计算量(FLOPs),提高嵌入式设备上的帧率(FPS)。

图5 所示为YOLOv4-MobileNetv3 模型在训练时Loss 的变化趋势。从图5 可以看出,当Epoch 逐渐迭代 时,Loss 在第150 个~第400 个Epoch 之间下降最快,当Epoch 为450 时,Loss 曲线逐渐平缓。

图5 模型训练时Loss 的变化趋势Fig.5 Trend of Loss during model training

传统的目标检测数据集(如COCO 数据集、VOC数据集),它们的检测目标较大且单张图片数量较少。基于无人机数据集的多目标多分类目标检测任务的难点在于:在一张图片中存在几个或几十个需要检测的目标,数量不定且庞大;目标类别有12 种,且图片尺寸较小,不易检测。

如表2 所示,实验经过1 024×1 024 像素大小的图片训练后,分别在608×608 像素、800×800 像素、1 024×1 024 像素的图片上进行测试,以CSPDarkNet53为骨干网络的YOLOv4 模型的检测mAP 最高可达35.2%,改进YOLOv4-MobileNetv3 模型在mAP 最高达33.3%的前提下,模型体积减小且检测速度提升;经过感知量化处理,模型更加灵巧,在嵌入式设备上能实现最快为73 的检测帧率。

表2 3 种模型在2 个设备上的性能对比Table 2 Performance comparison of three models on two devices

4.5 效果测试

图6、图7 分别为YOLOv4-CSPDarkNet53 和YOLOv4-MobileNetv3 在PC 端 对VisDrone2020 无人机数据集图像的测试效果。从中可以看出,YOLOv4-MobileNetv3 与YOLOv4-CSPDarkNet53 具有近似的测试结果,但YOLOv4-MobileNetv3 的模型大小和测试速度比YOLOv4-CSPDarkNet53更优。

图6 YOLOv4-CSPDarkNet53 在PC 端的测试效果Fig.6 Test effect of YOLOv4-CSPDarkNet53 on PC

图7 YOLOv4-MobileNetv3 在PC 端的测试效果Fig.7 Test effect of YOLOv4-MobileNetv3 on PC

图8、图9 分别为YOLOv4-MobileNetv3 和经过INT8 感知量化训练的YOLOv4-MobileNetv3 在NX 设备上对VisDrone2020 无人机数据集图像的测试结果。从中可以看出,量化后的模型效果略差于量化前模型。

图8 YOLOv4-MobileNetv3 在NX 端的测试效果Fig.8 Test effect of YOLOv4-MobileNetv3 on NX

图9 感知量化训练后的YOLOv4-MobileNetv3 在NX 端的测试效果Fig.9 Test effect of YOLOv4-MobileNetv3 on NX after perceptual quantization training

5 结束语

本文提出面向低功耗应用场景的神经网络加速算法实现方案,以解决RCNN 系列算法、SSD 算法、YOLO 系列算法在嵌入式领域高计算和低功耗需求之间的矛盾。设计一种轻量化神经网络,对网络进行量化处理,以在模型计算量与参数量均较小的情况下保证较高的准确率。实验结果表明,该神经网络加速算法能够在性能、功耗、运行效率上达到预期,可以在低功耗场景中对无人机图像进行准确识别。下一步将采用更大尺度的模型压缩方法,如通道剪枝算法或空间剪枝算法,将其与量化算法相结合,以提升模型压缩的效率。

猜你喜欢
网络结构嵌入式卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
快递网络结构研究进展
卷积神经网络的分析与设计
基于AutoML的保护区物种识别①
从滤波器理解卷积
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究
基于傅里叶域卷积表示的目标跟踪算法
嵌入式单片机在电机控制系统中的应用探讨