优化目标检测方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化目标检测方案相关的知识,希望对你有一定的参考价值。

参考技术A 解决当前基于深度学习的目标检测器的问题,系统地来看,应该分别从数据集、网络架构、损失函数、后处理,以及学习算法等方面考虑。

(1)数据集平衡扩增:干净且均衡的数据,从来都是解决问题最有力的办法。通常数据集中的各个类别的样本呈“长尾”分布,直接用来训练检测器容易导致对样本少的类别出现漏检。这时可以考虑对样本少的类别,进行样本扩增。扩增过程最好考虑新增样本的diversity以及context,比如这篇文章就是很好的小目标检测中的数据扩增方法;

(2)改进网络结构:神经网络结构设计,决定了从数据集到检测结果之间映射的假设空间。正如  @wen  Hedes 和  @chenyh  提到的Anchor的设计,可以很好地引入样本少的类别的bbox分布先验,使生成的region proposals在这些类别有较高的召回(Recall)。除此之外,由于漏检也很大程度上来自于目标尺度的巨大变化,比如自动驾驶场景中,同是Car类别的bbox样本在远处只占据极小部分pixels,而在近处甚至占据近半幅图像。经典的做法包括image/featur pyramid 如FPN等,以及Multi-scale Training/Testing策略,但最近  @NaiYan  Wang 等人提出的Trident Network提出使用不同ratio的dilated conv分别匹配不同的感受野,达到检测不同尺度目标的目的,效果也很惊艳,应该能够很好地解决尺度变化带来的漏检问题;

(3)改进损失函数:前面提到的Class-balanced Focal Loss是个很好的尝试方法。除此之外,Online Hard Example Ming(OHEM)策略,如mtcnn文献loss方法,也可以尝试。由于易漏检样本通常在训练过程中较容易产生较大的loss,那么在每次训练迭代中,将loss值较大的的样本筛选出来加入训练集进入下一次迭代,使得检测模型更多关注易漏检样本;

(4)后处理:在崇尚end-to-end检测模型的今天,一般不提倡使用过多后处理设计,但实际工程应用中后处理经常起到至关重要的作用。前面已有提到改进NMS后处理算法,在目标遮挡严重的场景中效果非常明显。其中关键是如何区分目标的duplicated bbox及其周围目标的occluded bbox。解决的好得话,能够显著改善漏检问题;

(5)其它学习算法:除了目前主流的监督学习模型,也可以考虑其它的学习算法,比如我最近比较感兴趣的lifelong/continual learning。针对目标检测漏检问题,可以考虑将不同类别的检测问题,划分为不同难度的task分别训练检测器,利用lifelong learning实现一个模型解决不同类别目标的检测。不同于multi-task learning,lifelong learning无需要求在每个task的训练过程中获取全部task的数据(所有类别的样本)。以经典的Elastic Weights Consolidation (EWC)算法为例,可以根据各类样本分布,划分不同的子数据集得到不同的detection tasks,训练完一个task后,在新的task的训练过程中,利用EWC regularizer调整weights的优化方向,使模型能够学习当前detection task的同时,不遗忘已经学习过的detection tasks。这样最终得到的模型能够处理所有task中的所有类别的检测,对漏检问题应该有一定的改善作用,但是否会削弱容易检测的类别的性能,需要实验验证;

(6)知识蒸馏和迁移学习方法;

转自:https://github.com/eeric/Pedestrian-detection-paper-list/issues/1

目标检测算法优化技巧

目标检测算法优化技巧

论文:Bag of Freebies for Training Object Detection Neural Networks
论文链接:https://arxiv.org/abs/1902.04103

这篇论文介绍目标检测算法的一些优化技巧,目前已经在GluonCV中实现了,整体看下来和之前的那篇图像分类算法优化技巧的论文(Bag of Tricks for Image Classification with Convolutional Neural Networks)类似。这篇介绍的优化技巧具体而言包括mixup、label smoothing、学习率修改策略的选择、跨卡BN层计算和随机尺度训练,接下来详细介绍。

mixup是指将2张输入图像按照一定权重合并成一张图像,基于这种合成图像进行训练的模型更加鲁棒,能够有效降低对抗图像的影响。如图Figure2是在分类算法中使用mixup的例子:
技术图片
Figure3是在目标检测算法中使用mixup的例子,合并之后的图像标签包含2张输入图像的所有标签,可以看出这种思想在实现上还是比较容易理解的。
技术图片
针对mixup作者做了不同参数设置下的实验效果对比,如Table1所示,这里涉及一个名词:weighted loss,在图表中也做了解释,因为模型训练用的图像来自2张原输入图像通过不同权重合并得到的(如Figure3所示),因此在计算损失函数时(损失函数是基于目标计算的),属于不同输入图像的目标的权重也是不一样的,需要和输入图像在合并时的权重对应。而Table5中第二行的0.5:0.5 evenly表示合成是按照0.5和0.5的权重进行,因此最后计算损失时目标的权重也相等。
技术图片
为了证明mixup的视觉效果,作者做了前段时间比较有意思的大象贴图实验,如Figure5所示,第一行使用常规的训练方式训练YOLO v3模型,第二行则是采用mixup方式训练YOLO v3模型,可以看出后者能够有效检测到图像贴上的大象(mix-1和orig-1的对比),不过在orig-2和mix-2的对比中,二者都能检测到大象,这一点在文中没有做详细的解释。
技术图片
label smoothing是分类算法中采用的优化方式,作者将其引入到目标检测算法的分类支路部分。label smoothing的思想很直接,首先来看看原来分类算法的交叉熵损失函数,公式如下:
技术图片
其中qi表示真实标签,pi是预测值,因为q是one-hot形式(假设分类类别数是K,那么q就是1×K的向量,且其中只有对应的真实类别位置是1,其余都为0)。pi的计算公式如下,这是常见的softmax函数,假设真实类别是i,那么模型训练过程中会不断使得zi远大于zj,这样pi就越接近1,这样公式2中的L就越接近0,虽然这是训练目标,但训练过程越趋近于这种情况,反而是越容易过拟合的。
技术图片
所以label smoothing的思想就是对真实标签q进行改造,使其不再是one-hot形式,公式如下所示,其中K表示类别数,e是一个很小的常数。举个例子,假设K=5,e=0.1,那么原来q=[0,0,1,0,0],现在q’=[0.02,0.02,0.92,0.02,0.02]。这样在公式2中,当q‘处于非真实标签时仍然有损失值(比如0.02),就使得pi不会非常接近1,这就降低了过拟合风险。
技术图片

学习率变化采用cosine函数且增加warm-up,这部分内容可以直接看Figure6。图中(a)是常见的step修改策略和cosine修改策略+warm-up的学习率变化对比图,可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定,包括warm-up的引入,也是为了训练的起始阶段能够更加稳定地进行。
技术图片

跨卡BN层的计算(synchronized batch normalization),因为目标检测算法的单卡batch size一般不能设置得像分类算法那样大,但是较小的batch size对于单卡计算BN层参数而言并不是很有利,因此跨卡BN层相当于基于多卡数据计算BN层参数,这样计算得到的统计结果更加可靠。

随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自YOLO算法,尺寸一般在固定的几个数值中随机选择,比如320, 352, 284, 416, 448, 480, 512, 544, 576, 608,相邻数值相差32,表示stride。

实验结果:
实验部分采用的模型包括YOLO v3和Faster RCNN,数据集部分采用PASCAL VOC和COCO。Table2是优化的YOLO v3模型在VOC2007测试集上的效果提升对比。
技术图片
Table3是优化的Faster RCNN模型在VOC2007测试集上的效果对比。数据增强部分,因为two stage算法涉及ROI的裁剪,因此影响小一些,相比之下在one stage类型算法中影响较大。
技术图片
Table4是在COCO数据集上的效果对比,YOLO v3的效果提升尤其明显。
技术图片

以上是关于优化目标检测方案的主要内容,如果未能解决你的问题,请参考以下文章

谈谈基于深度学习的目标检测网络为什么会误检,以及如何优化目标检测的误检问题

谈谈基于深度学习的目标检测网络为什么会误检,以及如何优化目标检测的误检问题

目标检测实战

CNN调参目标检测算法优化技巧

通用目标检测开源框架YOLOv6在美团的量化部署实战

《南溪的目标检测学习笔记》——性能优化的学习笔记