CornerNet-Ghost:基于Hourglass-Ghost的轻量型目标检测模型
2023-10-09余松林
张 莲 余松林
(重庆理工大学电气与电子工程学院 重庆 400054)
0 引 言
深度卷积神经网络无论是在图像识别、目标检测或是语义分割上均有不错的表现。传统的CNN达到良好的性能往往是基于大量的参数和浮点运算(Floating point operations,FLOPs)才能实现的。但是随着计算机视觉任务的发展,以及各种人工智能行业(智能手机、无人驾驶汽车等)的兴起,深度神经网络的设计更加趋于可移动设备所需求的高效小型网络模型,但目前所存在的问题是便携式设备被应用在了工业的各个环节,轻量化网络模型的发展跟不上便携式设备的应用需求。
近些年来,众多学者已经对紧凑型神经网络进行了一系列研究,并取得了可观的成就。MobileNet是Google公司公布在CVPR2017上的一款轻量型网络,提出了一种新的卷积方式来设计网络,其特点是引入了深度可分离卷积。首先利用逐通道卷积获取特征图,一个卷积核负责一个通道,其次用逐点卷积串联特征图,避免输出特征图中只包含了局部特征的问题,取得了较好的效果[1]。不久之后由Face++团队在arXiv上公开的ShuffleNet也用了类似的方式进行了网络设计,采用了分组卷积对特征图进行获取,再用Shuffle操作打乱各个特征图的通道以构成新的特征图,解决由分组卷积所带来的信息交流不通畅的问题[2]。可以看出,轻量化模型目前主要得益于使用深度可分离卷积和分组卷积来减少参数,再解决信息交流不通畅的问题从而完成网络设计。虽然都取得了不错的成果,但网络设计目前还停留在互相借鉴的阶段,轻量化网络没有什么突破性进展。而且MobileNet和ShuffleNet大量使用1×1卷积,依然会产生较大的计算量,这与网络设计的初衷相悖。
直到华为诺亚方舟实验室在CVPR2020公布了一篇轻量级网络论文GhostNet,其核心思想为利用线性变换来生成新的特征图,从而达到减少计算量的目的[3]。本文借助该思想设计了一个轻量级角点检测的特征提取网络,网络通过Ghost Bottleneck与堆叠沙漏相融合,较目前主流轻量级角点检测网络而言,无论是在准确性和快速性上都具有一定的提升。由于本模型相当于CornerNet的新型轻量级改进网络,故将其命名为CornerNet-Ghost。
1 融合Ghost Bottleneck的堆叠沙漏网络的设计
1.1 Ghost Bottleneck设计
为了保证对输入图像的充分学习,训练好的网络中含有丰富的特征图,其中不乏有两幅相似的特征图,将这两幅图设为对方的幽灵(Ghost)。文献[3]认为这些冗余的特征图是网络进行目标检测的关键因素之一,所以与其去除它们,不如以一种廉价且高效的方式来获取这些特征图。Ghost Module正是在做这个工作,如图1所示。
(a) 普通卷积工作方式
常规卷积操作如图1(a)所示,输入特征图为X∈Rc×h×w(c表示输入通道数,h和w分别为输入的高和宽),卷积操作如式(1)所示,Y∈Rh′×w′×n为输出的n维特征图,f∈Rc×k×k×n(k为卷积核大小)为该层的卷积核,b为偏置,由此可得该层的计算量如式(2)所示的OFLPs1,由于n和c通常都会很大,因此计算量和参数量会相应的更大。
Y=X*f+b
(1)
OFLPs1=n·h′·w′·c·k·k
(2)
(3)
因此,上述两种方式计算量之比如式(4)所示。
(4)
与主流轻量级模型卷积相比,Ghost Module有以下不同点:
(1) 无论是MobileNet、ShuffleNet还是SqueezeNet,都大量使用1×1的逐点卷积,而Ghost Module中卷积核大小能够自定义。
(2) 主流的大部分方法都是采用深度可分离卷积进行降维以及特征提取,Ghost Module先是进行原始卷积操作,再通过简单的线性变换来获取更多的特征。
(3) Ghost Module采用线性变换处理特征图,可以有很大的多样性。
(4) Ghost同样使用了Identity mapping来保持原有特征。
Ghost Bottleneck是基于Ghost Module设计而来,如图2所示,模型设计思路来自于轻量型网络MobileNet V2,采用反残差结构。传统的残差结构设计思路是先将特征用1×1的卷积核降维,其次采用3×3卷积核进行滤波,最后再用1×1卷积升维并与Short Connection相加。而反残差结构反其道而行之,先升维再降维[4]。采用这种结构是因为模块的输入包含了整体特征的必要信息,升维会让信息更加丰富甚至冗余,再进行降维,如此理论上可以保证信息不丢失从而保证检测精度。具体结构如图2所示。
(a) (b)
Ghost Bottleneck分为步长(stride)为1和2两种情况,分别如图2(a)和图2(b)所示。利用第一个Ghost Module升维,升维后的通道数与输入通道数的比值称为扩展比,第二个Ghost Module降维,然后与Short Connection相加。除此之外在stride=2的模块中,为保证信息处理的快速性,两个Ghost Module间插入了stride为2的深度卷积。
1.2 基于Ghost Bottleneck的沙漏网络设计
沙漏网络最初是Newell等[5]提出的一种用于检测人体关键点的特征提取网络,在当时取得了颠覆性的成就,因为其强大的性能,一直到今天各个基于角点的目标检测模型仍然沿用沙漏网络及其变体作为骨干网络,本文同样采用两个四阶沙漏网络堆叠再融合Ghost Bottleneck作为特征提取网络。单个四阶网络模型如图3所示。
图3 沙漏网络结构
向下箭头表示进行一次下采样,本文不采用池化方式,而是用步长为2的卷积来降低分辨率,每次下采样之前设计一次跳连接保留原尺度信息。一共进行四次下采样,之所以使用多次是由于对不同尺度的特征进行提取可以弥补下采样导致的信息丢失,保证检测精度。每次下采样后通道数变成(256,256,384,512)。向上箭头表示上采样用于恢复分辨率保持输入与输出的特征图分辨率一致,本文不使用近邻插值法,而是用4×4卷积进行升维。
实际上一个沙漏网络就已经可以实现特征提取,但是本文采用了两个沙漏网络堆叠而成的模型,因为各个点的位置是可以相互参考的。比如在人体姿态估计中,知道腰部位置后可以更好地预测膝盖位置,知道膝盖位置后又可以更好地预测踝关节位置。因此将第一个沙漏网络提取的特征作为第二个沙漏网络的输入,实际上是在给第二个沙漏网络提供关键点相互参考的预测信息,也就意味着第二个沙漏网络在使用关键点的相互关系,能进一步提升预测精度。
两个沙漏网络之间引入了中继监督对每个网络进行预测[5],即对中间输出的热点图(Heatmap)计算损失。将第一个沙漏网络输出的特征先经过一个1×1的全卷积网络,再分为两个分支,上半分支在经过1×1的卷积后输入下一个沙漏网络。下半分支生成与输入相同尺寸的Heatmap,最后经过1×1的卷积进入下一个网络。
另外设计采用了一些小细节上的处理,假设网络输入大小为512×512,由于输入图像的分辨率都较大,如果直接输入网络的话会导致计算了太大致使推理速度很慢,因此图像在输入沙漏网络之前都先经过一个7×7的卷积将图像分辨率缩小为原来的四分之一,后面添加两个Ghost Module进行降采样且将通道数增加至256,也就是说在输入沙漏网络之前已经对图像进行了三次降采样,相当于对图像进行预处理。最后,将该特征提取网络命名为Hourglass-Ghost。
2 基于Hourglass-Ghost的目标检测网络模型
2.1 整体模型
网络模型可细分为特征提取模块与预测模块,特征提取模块如前文设计所示,预测模块借助了Cornernet的结构,因此整体网络类似于一个Cornernet的改进版本。在骨干网络后面设置了两个预测模块,一个负责左上角点的预测,另一个负责右下角点的预测,与CornerNet一样有Heatmaps、Embeddings和Offsetss三个输出[6]。整体模型如图4所示。
图4 网络整体模型
输出处理流程与文献[6]相同:先对Heatmaps进行非极大值抑制,取Top70的左上角点和Top70的右下角点。随后用Offset矫正角点位置,在尺寸的缩放过程中运用了取整操作,造成精度丢失,因此需要位置矫正。然后在Embeddings中找到同一物体的两个角点进行配对和画框。
2.2 池化方式改进
除了骨干网络不同以外,本文改进了CornerNet中采用的角点池化(Corner Pooling)。改进如图5所示。
鉴于要使用左上角点和右下角点以矩形的方式完全包围待检测物体,因此角点一般都会在物体之外,CornerNet使用Corner Pooling来寻找角点,即通过沿边界最大值来确定角点,原理如图5(a)所示。但这种方式使网络只关注了外部信息,对待测物体全局信息获取能力较弱,也就是说这样会导致算法对目标框过于敏感,在选取关键点和画框的时候容易出现误选或者漏选等问题。因此为了获取更多待测目标的内部信息,本文在Corner Pooling的基础上进行改进,称之为级联角点池化(Cascade Corner Pooling)[7],原理如图5(b)所示,沿边界寻找最大值,根据边界沿物体内部方向寻找最大值,将两个最大值相加。通过这样的改进获取的角点带有边界信息和内部信息,能有效地避免画框失败,提升算法检测准确率。
由于结构上的类似,Loss计算以及一些超参数设置方面仍然沿用了CornerNet的设计。
3 实验与结果分析
3.1 数据整理与训练细节
实验数据来自BUERHOP_LUTZ[8]等公开的太阳能电池缺陷数据集,对这些图像进行筛选,去除无法进行检测的图像,最后选出有缺陷以及正常图像2 000幅,大小为300×300,缺陷种类分为裂纹、断栅、缺角和黑斑等,并进行标注,制作成JSON格式的数据集。为了解决缺陷分布不均匀造成检测效率降低的问题,采用随机翻转以及垂直翻转的方法对数据集进行扩充,保证检测的准确性。
实验所采用的计算机内存为16 GB,显存为6 GB,运行环境为Windows 10 64位系统,GPU为NVIDIA 1660s,在Anaconda虚拟环境下环境配置为:Python 3.7.4,CUDA10.0.0,PyTorch 1.0.0。
实验数据集分为训练集、验证集以及测试集,划分占比为70%、15%和15%。采用批量训练的方法,由于设备限制,采取batch=4的方式训练,初始学习率设定为0.000 5,每迭代3万次下降为原来的十分之一,使用Adam优化训练损失。
由于CornerNet也是采用堆叠沙漏网络作为骨干网络的目标检测算法,CornerNet-Squeeze是基于CornerNet的轻量级网络改进,精度较CornerNet较差但是检测速度快。因此与这两种网络做对比实验,验证融合Ghost Bottleneck的沙漏网络以及Cascade Corner Pooling的性能到底如何。
3.2 精度与效率权衡曲线
由文献[3]可知,当d=3且s=2时Ghost Module处于最佳性能点。因此本文沿用了原文的d与s,比较了CornerNet-Ghost、CornerNett、CornerNet-Squeeze的精度与效率权衡曲线,这种方式开始是在CornerNet-Lite中提出的[9],即在原始图像分辨率的不同单尺度下进行评估,包括0.5、0.6、0.7、0.8、0.9和1.0(原始图像分辨率),从而找出网络的最佳性能点。由图6可知CornerNet-Ghost的最佳性能点为(50.0 ms,78.2%),即网络整体检测精度能达到78.2%的测试AP值,且检测每幅图像的平均推理时间为50.0 ms。而Cornernet和CornerNet-Squeeze分别达到了(230.1 ms,79.1%)和(59.3 ms,72.6%)。
图6 精度与效率权衡曲线
3.3 结果分析
由于算法设计的初衷是适用于便携设备,因此模型除了对算法的准确性有要求以外,更看重算法检测的实时性。常用的目标检测算法分为单阶段和二阶段算法,单阶段算法实时性高但准确性一般,同时根据画框方式可分为基于anchors和基于角点两种,Cornernet-Ghost为基于角点的单阶段检测算法;二阶段准确性高但是耗时太长。因此前者一般用于在线实时检测,后者用于离线检测。
因此本文在同一数据集下,除了将前文提到的三种算法的检测结果进行了对比以外,还另外引进了经典的基于anchors的单阶段算法YOLO v3和RetinaNet,与CornerNet-Ghost做对比分析,检测结果如表1所示。
表1 检测结果
由表1可知,AP为目标检测评价指标,APs、APm、APl分别对应小(较长边小于32)、中(较长边介于32-192之间)、大(较长边大于192)目标。在同为轻量级检测网络的基础上,CornerNet-Ghost相较于CornerNet-Squeeze而言,推理时间减少了9.1 ms,而AP却增长了5.8%,且无论大、中、小目标的检测精度都是CornerNet-Ghost更高。此外,在CornerNet-Ghost与CornerNet的对比中可以发现前者AP值略低于后者,原因是后者所采用的骨干网络是未经轻量化改进的堆叠沙漏网络,性能强大,但缺点是计算量较大,检测时间较长,而CornerNet-Ghost只用了CornerNet所花时间的21%就能达到与其相接近的效果。在与基于anchors的单阶段算法对比中可以得出,CornerNet-Ghost的综合性能要强于YOLO v3与RetinaNet。综上可知,CornerNet-Ghost是一款性能领先于当前主流单阶段算法的目标检测模型。
3.4 Hourglass-Ghost的应用分析
由上文所示,单阶段目标检测模型可分为基于anchors和基于角点两种,因此将Hourglass-Ghost作为骨干网络,应用于YOLO v3和CornerNet-Squeeze中观察其性能,实验结果如表2所示。
表2 Hourglass-Ghost对不同算法的影响
由表2可知,Hourglass-Ghost的应用让CornerNet-Squeez的性能得到提升,应用于YOLO v3却造成了准确性降低,说明其更适用于角点检测网络中。究其原因在于Hourglass-Ghost采用的堆叠沙漏网络结构与中继监督设计,在角点检测任务中具有很大的优势,但在基于anchors的算法中相当于无用操作,直接影响检测的准确率。
3.5 计算量对比
FLOPs(Floating point operations)意思是指浮点运算数,可以理解为计算量,常用来衡量一个算法/模型的复杂度[10]。计算方法是由NVIDIA公司发表文章提出的[11],具体如式(5)所示。
OFLPs=2HW(CinK2+1)Cout
(5)
式中:H、W和Cin指输入的高、宽和通道数,K指卷积核的大小,Cout指输出通道数。由于CornerNet网络较为复杂,计算量与参数量远大于另外两个网络,因此本文将两种轻量级模型CornerNet-Ghost和CornerNet-Squeeze的FLOPs做对比,如表3所示。
表3 计算量对比
由表3可知,相比于CornerNet-Squeeze,CornerNet-Ghost的计算量更小,模型更简单,却能达到更好的效果,充分说明了本文设计网络的优越性。
3.6 消融实验及分析
前文已经论证了CornerNet-Ghost与同类型网络相比拥有更优秀的性能。为了明确各个网络模块对推理时间的影响,通过控制不同模块的添加观察其对性能的影响。实验结果如表4所示。
表4 检测时间影响因素
在CornerNet中,进入沙漏网络前会有7×7的卷积和残差模块对输入进行两次降采样,相对应的在CornerNet-Ghost中设置了7×7卷积以及两个Ghost Module,一共进行了三次降采样。如此可将检测时间减少58.9 ms。此外Hourglass-Ghost的采用减少了123.8 ms,充分说明了轻量级改进的有效性。最后引进Cascade Corner Pooling,是对原来Corner Pooling的改进,虽然会增加模型的复杂度,增加了少量的检测时间,但是却对AP有不小的提升。
4 结 语
针对现有轻量型目标检测网络较少的情况,本文通过改进CornerNet,设计出其轻量化改进模型CornerNet-Ghost。设计采用了自主设计轻量型特征提取网络:Hourglass-Ghost,并通过基于角点的方式对目标进行检测。模型仍在角点池化中做出改进。最后,通过对比效率与精度权衡曲线、目标检测结果与计算量等指标,证明CornerNet-Ghost拥有更优秀的性能。此外,本文还验证了Hourglass-Ghost只对基于角点的目标检测网络有提升作用,并对算法进行消融实验分析,明确了各个模块对检测时间与检测精度的影响。在后续研究中,将会加强算法的泛化能力和可迁移性,使其能适用于更多目标检测的任务中。