一种基于通道重排的轻量级目标检测网络
2020-04-02徐晗智艾中良张志超
徐晗智,艾中良,张志超
(中国电子科技集团公司第十五研究所,北京 100083)
0 引 言
目标检测一直以来都是计算机视觉的一个重要研究方向[1],目前已经被广泛应用于人脸识别、无人车等诸多领域。目标检测的任务主要是在一张图片上用边框标出待检测物体,并识别出框内物体所属的类别[2]。
传统的目标检测算法是基于创建建议区域的检测算法(如R-CNN系列),这一思路是首先将图片分为若干候选区域[3],将每个候选区域内的部分经过尺寸的变换得到一张特征图,然后将这些特征图输入到卷积神经网络[4]中学习其特征,进行分类,最后再回归最准确的边框的位置。很多学者沿着这一思想继续研究,得到了一系列性能更好的网络。然而由于刚开始候选区域的数量往往都很大,后面又需要反复的选择最合适的边框,实际上算法的步骤是比较繁琐的,整个检测网络的耗时是相当高的[5]。于是出现了以YOLO[6]为代表的直接回归的目标检测算法,它将边框的位置也纳入网络要学习的特征之中,将输入网络的图片划分为若干个格子,每个格子都用来检测中心落在该格子中的物体,对于有物体的格子,直接使用卷积神经网络回归其代表物体的种类以及标出该物体边框的坐标信息。这样一来,数据在送入网络之前无需进行众多建议区域的选择,后面也无需繁琐的最佳边框回归,只需使用最简洁的卷积神经网络去提取回归所需的特征和信息。本质上讲,后者是均匀地对图片在不同位置进行密集抽样[7],通过卷积神经网络对不同长宽比的边框进行回归。相较于传统的建议区域类检测算法,直接回归的方法在准确度上稍有下降,但较大地提升了实时性。
目前在提升目标检测网络性能方面,主流的方法都是设计性能更优秀的网络结构去提取到更丰富的特征,或者参数更少计算量更少[8]。例如,YOLO的作者在其基础上已经更新了2个版本的检测算法,其精确度和速度都得到了明显的提升;2016年Liu等人[9]在ECCV(欧洲计算机视觉会议)上提出SSD目标检测网络,其性能超越同时期的YOLO算法和Fast R-CNN[10]算法。值得一提的是,最近一些原设计用于图像分类的网络也得到了蓬勃的发展,如谷歌提出的MobileNet[11]网络引入分组卷积,大大减少了网络参数量,提高了网络性能;而后Zhang等人[12]提出ShuffleNet网络,使用通道重排技术解决了分组卷积中通道组间信息隔绝的问题,提高了网络的准确率。
本文通过实验验证了原本用于图像分类的网络结构基本单元有能力完成目标检测任务,证明了BN层[13]的时间消耗较大;根据分组卷积的原则设计一个轻量级的目标检测网络,解决了通道重排在分组卷积单元并不多时效果不明显、反而时间开销比较大的问题,改进通道重排的具体实现方法,增加了重排通道的速度;改进YOLO的损失函数,在回归的内容上增加识别框的面积来约束框的长和宽之间的关系,通过计算改进损失函数中的不同项在总损失中所占的比例,使之在轻量级网络中发挥更好的目标检测效果,在训练的过程中约束识别框长和宽的比,最后训练得到的目标检测网络,性能在速度上超过Tiny-YOLO,达到每秒钟处理260张以上图片。
1 相关工作
1.1 YOLO-tiny算法
YOLO-tiny是YOLO的作者提供的一种轻量级高速目标识别网络,其最突出的特点就是运行速度快,根据官方提供的数据其fps(每秒计算的图片数)可以达到244之高,在当今的目标检测网络中实属佼佼者。相较于传统的R-CNN类算法,YOLO的作者首次提出了在目标检测任务中直接使用网络回归得出物体识别框的位置以及物体种类,并开发了适用于其网络运行的平台框架,将一张输入的图片分为若干个格子,这样使得网络更加简洁,除去了传统的对感兴趣区域预测的部分,极大地减少了计算量和参数数量,提高了网络的处理速度。而YOLO-tiny是作者给出的一个更加高速更加轻量的一个网络模型,仍然使用同样的回归算法,但使用更少的卷积层数,准确率在COCO数据集上达到23.7的mAP(Mean Average Precision)值,目前已经被作者更新到第3个版本,每秒运算220张图片,在COCO数据集上的mAP值达到33.1。
1.2 Batch Normalization层分析
BN层,即Batch Normalization层,由Loffe等人[14]于2015年提出,其作用是针对每个神经元做归一化处理。一经提出,便受到了广泛的使用,这源于其加速网络收敛、改善梯度弥散、防止过拟合等优越性能[15],尤其在深度网络中,网络层数越多这些优越性能效果越明显。但使用BN层将会给网络增加很大计算量,其中一个重要原因是Caffe框架对于BN层采用分离式写法[16],在切换层传播时,操作系统需要执行多个函数,在底层(比如栈)调度上会浪费一些时间[17]。经过实验,可以得知相同数据通过卷积层与通过BN层所用时间相仿,且网络层数越多,对速度的影响越明显;同时由于轻量级网络过拟合可能性小,网络层数少并结合使用梯度比较明显的Leaky ReLU激活函数[18],所以本文选择在网络后端的卷积层中取消BN层的使用,以减少计算量,提高网络速度。实验结果见表1。
表1 BN层对网络速度的影响
网络类型1层卷积+1层BN层1层卷积9层卷积+9层BN层9层卷积速度/fps315050597812225
本实验使用的网络中仅包含卷积层和BN层。所用CPU为2块Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20 GHz,GPU使用一块Titan X (Pascal)。测试所使用的数据集通过在VOC 2007数据集中随机抽取20%得到,统一输入尺寸为224×224像素,卷积的输出特征图数设置为16。
由于实验中每个卷积层仅仅输出16通道的特征图像,使得参数量远远小于正常用于目标检测网络的参数量;同时本文只测得数据通过网络层的时间,并不考虑损失处理和目标回归的部分,所以整体上实验结果远远高于正常用于目标检测网络的速度,同时更加明显地体现了卷积层与BN层运行速度的关系。
1.3 通道重排
通道重排(Shuffle Channel)首先被Face++团队提出于ShuffleNet网络中,它的作用是将特征图像通道分成的各个组打乱顺序,以增加不同分组的通道之间的特征交流。在之前的分组卷积中,它将一个特征图像的多个通道分成若干个组,使得卷积操作在各个组的通道内部进行,不同组的通道互相之间不影响,这样将会大大地减少计算量,但同时这种分组让不同组通道彻底隔断,减少了信息的交流,从而减少了网络精确度。为了解决这个问题,Face++团队提出了重排的方法,将每组通道内部再次分组,然后将其重新组成为新的分组,送入之后的卷积层。通过重排通道来增加通道之间的信息交流,而不是某些输出的通道只由之前特定的通道产生。但是这种通道重排在实现的时候需要大量的指针跳转和内存操作,并且难以良好发挥GPU的并行加速能力,这将带来很大的时间损耗。
2 基于通道重排的轻量级目标检测网络
2.1 网络结构设计
本文根据上文的实验设计一种基于通道重排的轻量级目标检测网络,其性能在速度上超过Tiny-YOLO,在精确度上与其相仿。首先,为了大幅提高速度,本文摒弃层数较多的深度网络,使用与Tiny-YOLO相同的9层卷积层网络,以减少冗余的参数带来的过多计算量,同时也可以减少模型的存储空间。在网络的前几层,本文使用普通的卷积来快速增加特征图像的通道数。然后,使用类似于分组卷积的方法,将特征图像的通道分为2个部分,一部分不进行运算原样向后传递,另一部分则使用计算量较小的DW卷积和普通卷积,将两者输出的特征图像连接。最后,将特征图像按通道做重排操作,这样可以在接下来的一个卷积层中增加不同通道之间的信息交流。相较于原来的ShuffleNet网络,本文将1×1卷积核替换为3×3的尺寸,这样可以增加网络提取特征的能力。网络结构如图1所示。
图1 网络结构图
2.2 改进通道重排的实现
本文对通道重排的实现方法进行改进。从当前的实现方式上讲,主流的选择都是将分为g组的通道每组再分为n组,这样一共是g×n组通道;然后将这些组通道重叠成g行n列的形式;再将这些通道矩阵转置成n行g列的形式;最后按顺序将其取出,这样达到了将原来的通道均匀重排的目的。但这样的实现方式在内存中大量地进行数组操作,耗时较多。本文采用将g×n组通道直接重排后再用张量拼接(concat)的方式连接,避免了之前数组矩阵的重塑、转置等操作,节约了时间成本,且更适合用于分组数并不多的通道重排。如图2所示,左侧为原来的通道重排的实现流程,右侧是经过改进后的算法流程,直接使用各个数组的首地址,减少了2次数组的内存操作。
图2 通道重排的改进方法
2.3 损失函数
在损失函数部分,本文采用如同YOLOv3[19]的位置定位框和测得物体置信度同时回归的方式,这样相对于传统的在建议区域提取特征后做分类的方法大大缩小了计算复杂度,同时更适用于层数少的轻量级网络。整个损失函数同样由4个部分组成,分别是定位框中心点的损失、定位框宽和高的损失、预测类别的损失以及预测置信度的损失。在此基础上,经过一个轻量级能力较弱的网络,不包含物体的每个格子产生的损失将会更大,并且多个不存在物体的格子会将这种损失叠加,于是需要调整损失函数中的系数。若从平衡的角度出发,需先将有物体的格子在损失函数中所占的权重,调整为不含物体项的48倍,以达到有无物体的格子对整个损失的贡献度相等。如果按照传统的YOLO的设计,10倍的系数比在网络的训练中很容易造成物体识别率达到负值,从而影响网络的收敛。
本文选择将像素大小为224×224的图片划分为7×7的网格阵,对于每个网格预测n个种类以及2组定位框信息,其中定位框信息除了中心点坐标和框的宽高之外,还包含检测到物体的种类。此时,与传统的YOLO检测网络的不同之处在于,原始的网络选择预测框与标记框的重叠比(Intersection Over Union, IOU)最大的那组数据作为所需要继续学习的数据,本文抛弃这个做法,不再计算二者的IOU,而是直接选择带来2个最小的损失的那组数据作为继续学习的部分,也就是选择与标签图片中心坐标损失最小的数据和与标签图片长宽损失最小的数据。在网络层数比较少、参数量比较小的情况下,网络的学习能力并不特别强,所以希望直接得到最接近真实值的信息,而计算IOU则会将数据按组分开,一组最小的损失未必会导致中心坐标和框的大小损失分别最小。
在损失函数中,增加所需回归的内容,直接引入识别框的面积,这样反向求导时增加了对边框位置的二维约束,加强了对框的形状的回归。在网络的训练方式上,为了让网络更好地收敛,对损失回归的过程做以下操作:当边框的长宽比大于某值时,则会将网络反向传播的学习率增大一倍来增大参数的变化,以防止坏数据对网络的训练造成较大影响,增加网络的学习能力,同时加速网络收敛。在实际的实验中,根据数据集的特点本文将这个阈值设置为4。损失函数见公式(1)。其中S为划分的网格数,B为预测框的数量,x、y、w、h分别为预测框的中心横纵坐标、宽度和高度,C为置信度得分,p为识别出物体的概率。
(1)
3 实验结果及分析
为了便于下文中展示实验结果,本文将提出的网络模型命名为Tiny-ShuffleNet。在实验中,本文分别使用COCO数据集和PASCAL VOC数据集对本网络模型进行训练和测试,在训练的过程中,直到各项损失都不再明显下降时停止训练,然后在保存下来的模型中将取得效果最好的模型参与对比实验。算法使用当下工业界流行的Caffe框架[20]实现,实验所用CPU为2块Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz,GPU使用一块Titan X (Pascal),内存环境由8块金士顿16 GB大小、速度为2133 MHz的内存条所提供。对比结果如表2和表3所示。
表2 在VOC 2007数据集上测试结果对比
检测算法mAP/%速率/fpsFaster R-CNN(VGG-16)73.27.0Faster R-CNN(ResNet-101)76.42.4R-FCN(ResNet-101)80.59.0YOLOv163.445.0YOLOv276.867.0YOLOv2 544x54478.640.0SSD30074.346.0SSD50076.819.0DSSD32178.69.5Tiny YOLO54.2204.0Tiny ShuffleNet(original)55.8259.0Tiny-ShuffleNet55.8265.0
训练网络时,本文统一输入的图片大小为224×224像素,均使用开源的原始数据集,不做数据增强处理。网络总共迭代6万次,参数更新方案设置为Adam,初始学习率设置为0.001,权重衰减设置为0.0005。每组均反复训练多次以保证网络达到最佳水平[21]。
表3 在COCO数据集上测试结果对比
检测算法mAP/%速率/fpsSSD30041.246SSD50046.519SSD32145.416R-FCN51.912YOLOv2 608x60848.140YOLOv3 416x41655.335YOLOv3 608x60857.920Tiny YOLO23.7244YOLOv3-tiny33.1220Tiny ShuffleNet(original)32.4265Tiny-ShuffleNet32.4272
通过实验,与Faster R-CNN[22]、YOLO、SSD、R-FCN[23]等网络性能对比,可以轻易地发现本文所提出的Tiny-ShuffleNet网络模型在速度上具有明显的优势。首先,由于数据集自身特点的不同,COCO数据集中平均每张图片的目标数较多,总目标类别数较多,同时COCO数据集每个类别的目标数量也远超PASCAL VOC数据集,所以前者在学习和检测中的难度是明显高于后者的,从实验的结果上看也是显而易见的,相同的网络模型其准确率在前者的表现上不如后者。
为了更加直观地体现出改进通道重排算法对于网络性能的提升,本文使用未改进的通道重排层替换改进后的该层作为对比网络,并命名为Tiny ShuffleNet(original),除了通道重排层外网络的其它层均不做改动。在2个数据集中,可以看到使用改进后的通道重排层的网络比未做改进的网络每秒多处理6~7张图片,以证明改进通道重排算法在本网络结构中确实有其实际意义。
在不同的网络模型之间,Tiny-ShuffleNet的速度是最快的,在2个数据集上分别达到265和272的fps值,相较于原先速度上的佼佼者Tiny YOLO和YOLOv3-tiny,比前者快出大概30张/秒图片的处理速度,超出后者大概50张/秒图片的处理速度。在准确度上,Tiny-ShuffleNet在2个数据集上的mAP值明显低于原先较复杂较深的网络,但与速度快的轻量级网络相仿,数值上高于Tiny YOLO而比YOLOv3-tiny略低。
4 结束语
本文提出了一种新的轻量级目标检测网络,该算法以YOLOv3-tiny为基础,在网络模型部分使用分组卷积,引入并改进通道重排算法,合理使用BN层以加速网络训练收敛,调整损失函数中的系数,在损失函数中直接增加回归框面积为所要回归的一项以增加网络检测的准确度,训练时增加对回归框的约束以加速收敛。其实对于层数比较少的网络模型,通道重排的作用并没有在复杂的深层网络中效果那么明显,同时尽管经过改进,通道重排本身仍然具有一定的时间开销,在后续的研究中,笔者将试图找到在轻量级网络中取代通道重排的算法,来提高目标检测网络的性能。