吴 亮 梁 振 张燚鑫 王子磊
(1.安徽医科大学生物医学工程学院 合肥 230000)
(2.合肥综合性国家科学中心人工智能研究院 合肥 230000)
目标检测作为车辆自动驾驶的核心技术,也是计算机视觉的基础任务,广泛应用于工业检测[1]、智能驾驶[2]、医学图像诊断[3]等诸多领域,具有重要的现实意义。在实际的交通场景下,由于采集的数据通常呈现长尾分布,训练时分类器各类别性能失衡,导致检测精度下降问题。因此解决样本不平衡带来的性能损失问题是交通多目标检测算法的关键,也是目标检测领域的研究重点。
目前主流的数据集(例如Pascal VOC[4]和COCO[5]等)经过人工筛选后,各类别的样本数量相对均衡。交通场景下的数据通常呈现长尾分布,各类别样本数量失衡,导致检测器出现精度损失。性能损失主要来自两个方面:首先,训练集中没有充足的尾部类别(样本很少的类)样本,难以让模型在训练过程中充分学习尾部类别的特征[6],引起尾部类的精度下降;其次,训练集中的头部类别(具有许多样本的类)的样本占较多比例,模型的分类器会偏向于头部类。
当前长尾学习的主流方法是数据重采样和代价敏感学习。数据重采样旨在通过对训练数据中尾部类的样本进行多种采样,让各类样本数量接近。Wang 等[6]提出的动态课程学习采用一种动态采样策略,在训练过程的后期根据动态策略采用更多的尾部类样本,让模型学习数量相近的不同类别样本。Kang 等[8]提出的LWS 通过多个不同的采样策略训练表征模块和分类器,以获得泛化性更好的表征模块和更加平衡的分类器。代价敏感学习策略则是通过提高损失函数中尾部类别损失的权重,平衡分类器头部类和尾部类的性能。Tan等[9]发现尾部类的正负样本的梯度不平衡现象,设计了基于梯度抑制的类别均损失(EQL)。在此基础上,EQLv2[10]采用基于梯度统计的权重再引导机制,在训练过程中动态调节每个类别的梯度,以缓解类别不平衡。通过这两种方式都可以有效缓解头部类对尾部类的抑制,但由于分类和检测任务有着本质区别,在直接应用时会有难以兼容的问题,并且这类方法是以牺牲头部类性能[11~12]为代价来改善尾部类性能,以实现提升模型性能。
为缓解头部类和尾部类的直接竞争关系,可以采用分组的方式,即根据各类别样本数量将类别划分为互不相交的若干组,通过不同分类器来进行组内的分类,以达到组内各类别样本数量的平衡,缓解头部类对尾部类的抑制程度。这种分组的方式需要构造多个分类器,单一的特征提取器输出的分类特征不够精细,不能满足分类器的需要,所以额外针对不同组的样本进行精细化特征提取。此外,根据样本数量将类别分组的方式会导致各组间的样本不平衡,则可以通过Logit调整[13]进行解决。
综上所述,本文提出一种基于多头注意力机制与类别均衡的长尾检测算法。首先,本文设计了一个类别均衡的多级分类器,通过对原始类别进行分组,得到粗粒度与细粒度的二级类别标签。具体地,将训练样本数相近的目标类别放入同一组,形成组内的细粒度类别,不同的组则构成粗粒度类别。进行不同粒度类别预测,完成平衡的学习过程。其次,构建基于多头注意力机制的特征分组重融合模块。通过多头自注意力机制提取候选框特征(Region of Interest Feature,RoI 特征)的细粒度信息,获得精细化特征,以帮助分类器提升性能。最后,在多级分类器的基础上进行Logit 联合调整,以抑制类别组间的不平衡程度。本文在两个长尾交通数据集上的实验结果表明,与其他长尾学习方法相比,本文方法在mAP 性能指标上有较为显著的提升,说明了本文方法可以更好地应用于实际交通场景的多目标检测任务。
本文改进的模型结构如图1 所示,主要包括类别均衡的多级分类器(Muti-level Granularity Classifier,MGC)和基于多头注意力机制的特征分组重融合模块(Group-feature Re-fusion Module,GRM)。
图1 基于多级学习的检测模型结构
针对分类器各类别性能难以平衡的问题,本文采用多级分组的方式进行解决。具体地,首先将分类过程解耦成多级分类方式,得到粗粒度类别PC和细粒度类别PF。通过粗粒度类别与坐标的匹配计算,得到正负样本,用于计算粗粒度类别损失、细粒度类别损失和坐标回归损失。粗粒度分组过程是根据训练的样本个数将所有K个类别分为G组,通过式(1)将第j(j≤K)个类别分到第k组:
这里M(j)是训练集中类别j的样本数量,和是第k组最小和最大样本数的超参数。通过设置,以确保每一组之间类别没有重叠,每个类别只能分配给一个组。G和根据数据特点进行经验设置,以确保组内的类别包含相似的训练样本总数。这种方式将类别划分为若干不相交的组,有相似数量样本的类别在组内竞争,有显著不同样本数量的类别在训练过程中相互隔离。
MGC结构如图1右下角,包含G个细粒度分类器、一个粗粒度分类器和Logit 联合调整,每个分类器由全连接层、归一化层和ReLU 激活层组成。通过GRM 模块得到的精细化特征fk(k≤G)和提议特征c进行融合,得到分类特征ek。ek作为细粒度分类器k的输入,得到预测分组PFk,最后将G个分类器输出的预测分组拼接,得到细粒度类别预测PF。另外,将提议特征c直接通过粗粒度分类器,得到粗粒度预测PC,同时通过位置回归器得到回归坐标R。最后将PF与PC进行Logit联合调整后处理,得到类别分数PF,PF就是最后的类别预测输出。
本文构建了基于多头注意力机制的分组特征重融合模块,提取不同组样本的精细化特征,为多级分类器提供输入。首先构建一个基于通道注意力、空间注意力[14]和细化注意力机制的多头注意力模 块(Multi-head Self-attention Module,MSM)。MSM 是由1 个通道注意力模块与1 个空间注意力模块顺序串联,G个细化注意力模块并行构成,如图2,下面分别介绍3个模块。
图2 MSM的结构图
1)通道注意力机制模块可以抑制类别无关特征,选择重要特征,结构如图3。具体是对特征进行维度置换后,输入两层感知机中,最后在激活前进行维度置换反转,得到注意力权重特征wc,然后wc和x相乘得到x'。
图3 通道注意力模块结构图
2)空间注意力模块可以增加对重点区域的关注度,提取关键特征,结构如图4。将由通道注意力模块得到的特征x'作为输入,首先做一个基于通道的全局最大池化和全局平均池化,再将结果拼接。最后通过卷积与激活得到注意力权重特征ws。
图4 空间注意力模块结构图
3)细化注意力模块则将全局和局部信息进行连接,通过信息互补来保留细粒度的语义特征,结构如图5。采用线性层作为信息共享的注意力单元,关注组内类别特征的细微差异,共享局部与全局语义信息。具体地,特征x输入全卷积层后,与注意力单元进行交互,然后融合输入卷积层后的x'',得到精细化特征fk。
图5 细化注意力模块结构图
如图1 左下角所示,GRM 主要由上述的MSM模块和特征分组重融合阶段组成。具体地,通过第k个细化注意力模块得到的精细化特征fk,分别与提议特征c进行融合,得到细粒度分类特征。通过MSM 的G个细化注意力模块得G个分组特征(分组数G与2.1 节MGC 的粗粒度组数相对应)。图6是算法中分类器各类别归一化权重的幅值。在加入GRM 后,分类器各类别的权重比基准模型的权重更加均衡,通过多头注意力机制可以提取精细化特征,提升对尾部类别判别性[13],以提高模型对不平衡数据的鲁棒性。
图6 分类器各类别权重的幅值
在多级分类的基础上,本文设计了一种基于先验的Logit 联合调整方法(Logit Joint Adjustment,Logit-JA),以有效缓解组间的不平衡。本文根据两级标签的频率对模型输出进行Logit 联合调整。长尾问题在于样本数目比较少的类别,在学习到的特征空间中各类别特征边界不准确[15],所以泛化性能弱。所以,本文的Logit-JA 方法采用将先验知识πC和πF融入到模型预测输出的方法。具体地,类别概率预测过程如式(2):
PC和PF分别是粗粒度类别输出和细粒度类别输出。PC对粗粒度类别预测进行后调整,PF是对细粒度类别预测的调整,也是推理阶段采用的类别概率。πC和πF分别是统计各类别样本数量的粗粒度类别标签和细粒度类别标签的频率。τ是Logit 联合调整的调节参数,一般情况下,τ默认取1。
本文模型输出固定数量的预测目标,所以采用的是集合预测损失[16~17]。通过匈牙利算法找到预测值和GT(Ground Truth)之间的最佳二分匹配,保证每个目标都有惟一的匹配。其中为了衡量预测值(候选框Ri)和GT(gtj)之间的匹配程度,需要定义一个匹配度量函数,其定义为式(3):
其中,Lcoarse是针对GT 粗粒度类别标签的损失,粗粒度类别预测采用的是经过logit 调整后的概率向量,中的第二个下标k表示概率向量
中对应于第k个类别的概率分量;表示第j个真实标注gtj对应的粗类别标签,γ是损失函数中的超参数;LLocation表示用于位置回归损失,可以采用目标检测任务中常用的回归损失,如L1 损失和IoU损失等。λcls和λL是平衡系数。损失函数是在上述函数的基础上增加细粒度分类损失,如式(5):
其中,式(5)中gti*表示Ri对应的GT框,Lfine表示细粒度类别的分类损失,细粒度类别预测采用的是经过logit 调整后的概率向量,中第二个下标k表示概率向量中对应于第k个类别的概率分量。λcls是平衡系数,和L1中的系数保持一致。最终损失由训练批次内样本的所有匹配对损失构成。
为验本文提出的交通多目标检测方法的有效性,实验采用了URTD(Urban Road Traffic Dataset)数据集和Cityscapes[18]数据集,进行一系列验证实验和消融实验。
1)Cityscapes 数据集由奔驰公司进行收集和开源,包含50 个城市不同场景的5000 张精细标注的图像。本文对Cityscapes 其中的类别重新选择,去除了背景的类别(如sky、road 和terrain 等),保留了10 个前景类别。URTD 数据集是通过对中国城市的交通场景进行采集,拍摄时间以白天和晴天为主,一共3825 张图片。数据集的训练集与测试集划分情况如表1。
表1 数据集划分信息
失衡率是衡量数据集的类别不平衡程度的指标。将类别按照样本数量降序排序(即:如果i1 表2 数据集头部类和尾部类的平均样本数 图7 数据集各类别样本数量比例 2)本次实验采用均值平均精度mAP(mean average precision @ intersection over union)作为评价指标,分别是10 个IoU 阈值(在0.50 和0.95 之间,间隔为0.05)平均值,直接记为AP;单一的IoU阈值0.50,记为AP50;单一的IoU 阈值0.75,记为AP75。在两个数据集中,均采用mAP 作为模型性能的主要评价指标。mAP计算公式如式(7): 其中,P 为预测精度,R 为召回率,APi为类别为i∈{1,2,3,…C}的AP 值。 为准确提取原始图像的细节特征,采用翻转、尺度抖动和色彩失真等不影响图像细节的增强方式,在不影响特征提取的情况下产生多样化数据。在损失中,λcls和λL分别设置为2、5。为稳定训练,除了候选框初始化外,梯度在候选框使用时不会被反向传播回去。分组过程中,粗粒度类别数G值在两个数据集上都设置为3。 3.3 实验结果 为验证本文提出的各个模块(MGC,GRM,Logit-JA)有效性,在3.3.1 节中进行了各模块(MGC,GRM,Logit-JA)消融实验。在3.3.2节中进行了分类器结构的探究,分析粗粒度-细粒度(Coarse-Fine)多级分类和分组分类方式之间的影响;在3.3.3 节中将本文方法与主流长尾学习方法对比,验证本文方法的有效性。 3.3.1 各模块消融实验和分析实验 本文在URTD 数据集进行了各模块消融实验,结果如表3。表3 中第一行是基准模型的实验结果,接下来是单独使用GRM 模块、Logit-JA 模块和MGC 模块的结果,单独采用各模块均在一定程度上提升模型性能。GRM 通过多头注意力机制,利于更好的表征学习,比基准模型提升了0.6%。Logit-JA 是基于多级分类器进行设计的模块,单独使用会使模型性能有0.5%提升。 MGC 的提升效果最好,相比于基准模型提升2.0%。在模块组合使用时,MGC 和Logit-JA 组合提升了3.3%;GRM 和MGC 组合提升了3.9%,比单独适用MGC 性能提升了1.9%,说明特征分组的必要性,可以进一步提升分类器性能。三个模块组合使用提升5.0%,比单独使用模块或者两两组合时提升效果更明显。图8 是本文的三个模块组合方法与基准模型在URTD数据集上的各类性能。可以看到,本文方法有效提升了尾部类性能。 表3 URTD数据集上模块组合结果 图8 本文方法与基准模型的各类别性能 3.3.2 不同分类器结构 为探究分类器结构对模型的性能的影响,本节实验设计了不同的分类器结构。SC(Standard Classifier)是标准分类器,用于结果对比;DGC(Direct Group Classifier)是只对类别分组且不采用粗粒度-细粒度方式的分类器,用于验证类别分组的效果;BFC(Branch Full-connection Classifier)是只采用粗粒度-细粒度方式的分类器,用于验证粗粒度-细粒度的分类的效果。为比较分类器结构的影响,其余模块均保持一致,即都同时采用了GRM、Logit-JA。结果如表4,相对于只用了GRM 和Logit-JA的基准模型,采用DGC 与BFC 的组合分别提升0.7%、1.6%,采用MGC 的组合提升了3.4%。实验结果说明了只采用分组分类的DGC 或者粗粒度-细粒度分类的方式的BFC虽然对模型性能有提升,同时采用粗粒度-细粒度和类别分组方法的MGC对模型性能有更显著的提升。从表3 中可以得出,粗粒度-细粒度分类和分组分类的方式可以相互促进性能。 表4 URTD数据集上采用不同分类器结果 3.3.3 与主流长尾学习方法对比 本次实验在这两个数据集上比较了主流的长尾学习方法:基于Faster R-CNN[19]的LWS和EQLv2目标检测长尾学习方法,以及尝试在更强的基准模型Sparse R-CNN[20]上采用本文的方法。表5和表6分别是不同目标检测学习方法在URTD 数据集和Cityscapes 数 据 集实 验结 果。EQLv2 在URTD 数 据集和Cityscapes 数据集上mAP 分别提升了0.9%和1.3%,LWS分别提升了0.1%和0.8%。可以看到,本文方法在性能更强的Sparse R-CNN 上也有显著性提升。以Faster R-CNN 和Sparse R-CNN 基准模型,本文方法在URTD数据集上的mAP分别提升了2.8%和4.8%;在Cityscapes数据集上的mAP分别提升了1.6%和1.8%。 表5 URTD数据集上对比实验结果 表6 Cityscapes数据集上对比实验结果 图9是采用主流长尾学习方法在URTD数据集上得到头部类和尾部类的平均性能。基准模型是Faster R-CNN,加入了LWS和EQLv2方法后虽然增强了尾部类性能,但造成头部类性能不同程度的下降。本文方法能保持头部类性能同时,提升尾部类性能。图10 展示了本文方法和基准模型在两个数据集部分的检测结果。在URTD 数据集中,本文方法能正确识别到基准模型未能检测的部分尾部类目标(如行人和信号灯)。在Cityscapes 数据集中,基准模型存在将尾部类目标(如train 类别)错误识别和漏检的问题;本文算法能够在这两个长尾数据集上一定程度上降低少尾部类目标的漏检率和误检率,提高定位和分类的精度。 图9 长尾学习方法的头部类与尾部类的平均性能 图10 在URTD和Cityscapes数据集上部分检测结果 针对在交通场景下目标检测任务遇到的类别不平衡问题,本文提出了一种基于多级学习的长尾检测方法。本文首先构建了多级分组分类器,提升尾部类性能的同时,避免头部类性能损失。然后设计了基于多头注意力机制的分组特征重融合模块,为多级分类器输入更精细的特征。最后,本文基于多级分类器提出了Logit 联合调整的方法,以缓解组间的不平衡。本文的改进方法,避免现有方法需要牺牲头部类性能的问题,有效地缓解了在交通场景下的类别不平衡。3.2 实验环境和参数设置
4 结语