小目标检测相关技巧总结

Posted

tags:

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

参考技术A

小目标问题在物体检测和语义分割等视觉任务中一直是存在的一个难点,小目标的检测精度通常只有大目标的一半。

CVPR2019论文: Augmentation for small object detection 提到了一些应对小目标检测的方法,笔者结合这篇论文以及查阅其它资料,对小目标检测相关技巧在本文进行了部分总结。

小目标的定义: 在MS COCO数据集中,面积小于 32*32 的物体被认为是小物体。

小目标难以检测的原因: 分辨率低,图像模糊,携带的信息少。由此所导致特征表达能力弱,也就是在提取特征的过程中,能提取到的特征非常少,这不利于我们对小目标的检测。

1、由于小目标面积太小,可以放大图片后再做检测,也就是在尺度上做文章,如FPN(Feature Pyramid Networks for Object Detection),SNIP(An Analysis of Scale Invariance in Object Detection – SNIP)。

Feature-Fused SSD: Fast Detection for Small Objects, Detecting Small Objects Using a Channel-Aware Deconvolutional Network 也是在多尺度上做文章的论文。

2、在Anchor上做文章(Faster Rcnn,SSD, FPN都有各自的anchor设计),anchor在设置方面需要考虑三个因素:

anchor的密度: 由检测所用feature map的stride决定,这个值与前景阈值密切相关。

anchor的范围: RetinaNet中是anchor范围是32~512,这里应根据任务检测目标的范围确定,按需调整anchor范围,或目标变化范围太大如MS COCO,这时候应采用多尺度测试。

anchor的形状数量: RetinaNet每个位置预测三尺度三比例共9个形状的anchor,这样可以增加anchor的密度,但stride决定这些形状都是同样的滑窗步进,需考虑步进会不会太大,如RetinaNet框架前景阈值是0.5时,一般anchor大小是stride的4倍左右。

该部分anchor内容参考于: https://zhuanlan.zhihu.com/p/55824651

3、在ROI Pooling上做文章,文章SINet: A Scale-Insensitive Convolutional Neural Network for Fast Vehicle Detection 认为小目标在pooling之后会导致物体结构失真,于是提出了新的Context-Aware RoI Pooling方法。

4、用生成对抗网络(GAN)来做小目标检测:Perceptual Generative Adversarial Networks for Small Object Detection。

1、从COCO上的统计图可以发现,小目标的个数多,占到了41.43%,但是含有小目标的图片只有51.82%,大目标所占比例为24.24%,但是含有大目标的图像却有82.28%。这说明有一半的图像是不含小目标的,大部分的小目标都集中在一些少量的图片中。这就导致在训练的过程中,模型有一半的时间是学习不到小目标的特性的。

此外,对于小目标,平均能够匹配的anchor数量为1个,平均最大的IoU为0.29,这说明很多情况下,有些小目标是没有对应的anchor或者对应的anchor非常少的,即使有对应的anchor,他们的IoU也比较小,平均最大的IoU也才0.29。

如上图,左上角是一个anchor示意图,右上角是一个小目标所对应的anchor,一共有只有三个anchor能够与小目标配对,且配对的IoU也不高。左下角是一个大目标对应的anchor,可以发现有非常多的anchor能够与其匹配。匹配的anchor数量越多,则此目标被检出的概率也就越大。

实现方法:
1、Oversampling :我们通过在训练期间对这些图像进行过采样来解决包含小对象的相对较少图像的问题(多用这类图片)。在实验中,我们改变了过采样率和研究不仅对小物体检测而且对检测中大物体的过采样效果

2、Copy-Pasting Strategies:将小物体在图片中复制多分,在保证不影响其他物体的基础上,增加小物体在图片中出现的次数(把小目标扣下来贴到原图中去),提升被anchor包含的概率。

如上图右下角,本来只有一个小目标,对应的anchor数量为3个,现在将其复制三份,则在图中就出现了四个小目标,对应的anchor数量也就变成了12个,大大增加了这个小目标被检出的概率。从而让模型在训练的过程中,也能够有机会得到更多的小目标训练样本。

具体的实现方式如下图:图中网球和飞碟都是小物体,本来图中只有一个网球,一个飞碟,通过人工复制的方式,在图像中复制多份。同时要保证复制后的小物体不能够覆盖该原来存在的目标。

网上有人说可以试一下lucid data dreaming Lucid Data Dreaming for Multiple Object Tracking ,这是一种在视频跟踪/分割里面比较有效的数据增强手段,据说对于小目标物体检测也很有效。

基于无人机拍摄图片的检测目前也是个热门研究点(难点是目标小,密度大)。
相关论文:
The Unmanned Aerial Vehicle Benchmark: Object Detection and Tracking(数据集)
Drone-based Object Counting by Spatially Regularized Regional Proposal Network
Simultaneously Detecting and Counting Dense Vehicles from Drone Images
Vision Meets Drones: A Challenge(数据集)

1: https://zhuanlan.zhihu.com/p/55824651
2: https://zhuanlan.zhihu.com/p/57760020
3: https://www.zhihu.com/question/269877902/answer/548594081
4: https://zhuanlan.zhihu.com/p/60033229
5: https://arxiv.org/abs/1902.07296
6: http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Perceptual_Generative_Adversarial_CVPR_2017_paper.pdf
7: http://openaccess.thecvf.com/content_cvpr_2017/papers/Lin_Feature_Pyramid_Networks_CVPR_2017_paper.pdf

目标检测评价指标总结

参考技术A 今天我们从交并比,准确率,精度,召回率, FPR , F1-Score , PR 曲线, ROC 曲线, AP 的值, AUC 的值以及很重要的 mAP 指标,模型的检测速度和非极大值抑制的相关方面来学习下目标检测中的评价指标。

交并比 IoU 是英文 intersection over union 的简写,意思是检测结果的矩形框与样本标注的矩形框的交集与并集的比值。如下图:

上图中假设 A 为模型的检测结果, B 为 Ground Truth 即样本的标注结果,那么 A 与 B 相交的区域即为 A∩B ,而 A 与 B 的并集即为 AB 共有的区域 A∪B ,那么 IoU 的计算公式即为: IoU = (A∩B) / (A∪B)

这个还是很简单就能理解的,反应到样本图上就如下图:

其中上图蓝色框框为检测结果,红色框框为真实标注。

一般情况下对于检测框的判定都会存在一个阈值,也就是 IoU 的阈值,一般可以设置当 IoU 的值大于 0.5 的时候,则可认为检测到目标物体。

不管是看论文,博客啥的,都会经常看到一堆简写, TP , TN , FP , FN ,这些简写经常见到,怎么能够很好的记住呢?其实是这样的:

那么从上面可以知道:

这样记起来是不是就好记了呢?知道了这几个定义,下面就好理解了。

准确率 accuracy 是我们最常见的评价指标,这个很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好,如下:

上公式中的 TP+TN 即为所有的正确预测为正样本的数据与正确预测为负样本的数据的总和, TP+TN+FP+FN 即为总样本的个数。

精度 precision 是从预测结果的角度来统计的,是说预测为正样本的数据中,有多少个是真正的正样本,即“找的对”的比例,如下:

上公式中的 TP+FP 即为所有的预测为正样本的数据, TP 即为预测正确的正样本个数。

召回率 recall 和 TPR (灵敏度( true positive rate ))是一个概念,都是从真实的样本集来统计的,是说在总的正样本中,模型找回了多少个正样本,即“找的全”的比例,如下:

上公式中的 TP+FN 即为所有真正为正样本的数据,而 TP 为预测正确的正样本个数。

FPR(false positive rate) ,它是指实际负例中,错误的判断为正例的比例,这个值往往越小越好,如下:

其中, FP+TN 即为实际样本中所有负样本的总和,而 FP 则是指判断为正样本的负样本。

F1 分数( F1-score )是分类问题的一个衡量指标。 F1 分数认为召回率和精度同等重要, 一些多分类问题的机器学习竞赛,常常将 F1-score 作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。计算公式如下:

此外还有 F2 分数和 F0.5 分数。 F2 分数认为召回率的重要程度是精度的2倍,而 F0.5 分数认为召回率的重要程度是精度的一半。计算公式为:
更一般地,我们可以定义 Fβ ( precision 和 recall 权重可调的 F1 score ):

常用的如 F2 和 F0.5 。

上面学习了关于精度,召回率, FPR ,和 F1-Score 的知识,但是通常,只有那些往往不能够直观的反应模型性能,所以就有了 PR 曲线, ROC 曲线, AUC 值。

PR 曲线,就是 precision 和 recall 的曲线, PR 曲线中 precision 为纵坐标, recall 为横坐标,如下图:

那么 PR 曲线如何评估模型的性能呢?从图上理解,如果模型的精度越高,召回率越高,那么模型的性能越好。也就是说 PR 曲线下面的面积越大,模型的性能越好。绘制的时候也是设定不同的分类阈值来获得对应的坐标,从而画出曲线。

PR 曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡。

PR 曲线有一个缺点就是会受到正负样本比例的影响。比如当负样本增加10倍后,在 racall 不变的情况下,必然召回了更多的负样本,所以精度就会大幅下降,所以 PR 曲线对正负样本分布比较敏感。对于不同正负样本比例的测试集, PR 曲线的变化就会非常大。

AP 即 Average Precision ,称为平均准确率,是对不同召回率点上的准确率进行平均,在 PR 曲线图上表现为 PR 曲线下面的面积。 AP 的值越大,则说明模型的平均准确率越高。

ROC 的全称是 Receiver Operating Characteristic Curve ,中文名字叫“受试者工作特征曲线”,对于 ROC 来说,横坐标就是 FPR ,而纵坐标就是 TPR ,因此可以想见,当 TPR 越大,而 FPR 越小时,说明分类结果是较好的。如下图:

ROC 曲线有个很好的特性,当测试集中的正负样本的分布变换的时候, ROC 曲线能够保持不变。
ROC 曲线可以反映二分类器的总体分类性能,但是无法直接从图中识别出分类最好的阈值,事实上最好的阈值也是视具体的场景所定。 ROC 曲线一定在 y=x 之上,否则就是一个不好的分类器。

AUC 是 Area under curve 的首字母缩写,即 ROC 曲线下的面积,介于0和1之间。计算方式即为 ROC 曲线的微积分值,其物理意义可以表示为:随机给定一正一负两个样本,将正样本排在负样本之前的概率,因此 AUC 越大,说明正样本越有可能被排在负样本之前,即正样本分类结果越好。

mAP 是英文 mean average precision 的缩写,意思是平均精度均值,这个词听起来有些拗口,我们来仔细捋一捋。上面我们知道了什么是 AP , AP 就是 PR 曲线下面的面积(如下图),是指不同召回率下的精度的平均值。
然而,在目标检测中,一个模型通常会检测很多种物体,那么每一类都能绘制一个 PR 曲线,进而计算出一个 AP 值。那么多个类别的 AP 值的平均就是 mAP .

mAP 衡量的是学出的模型在所有类别上的好坏,是目标检测中一个最为重要的指标,一般看论文或者评估一个目标检测模型,都会看这个值,这个值是在 0-1 直接,越大越好。

一般来说 mAP 针对整个数据集而言的, AP 针对数据集中某一个类别而言的,而 percision 和 recall 针对单张图片某一类别的。

检测速度,这个很好理解,简单的说就是一秒钟能够检测多少张图片。不同的目标检测技术往往会有不同的 mAP 和检测速度,如下图(后面我们将逐一学习):

目标检测技术的很多实际应用在准确度和速度上都有很高的要求,如果不计速度性能指标,只注重准确度表现的突破,但其代价是更高的计算复杂度和更多内存需求,对于全面行业部署而言,可扩展性仍是一个悬而未决的问题。

在实际问题中,通常需要综合考虑 mAP 和检测速度等因素。

非极大值抑制虽然一般不作评价指标,但是也是目标检测中一个很重要的步骤,因为下期就要步入经典模型的介绍了,所以这里随着评价指标简单介绍下。

NMS 的英文为 Non-Maximum Suppression ,就是在预测的结果框和相应的置信度中找到置信度比较高的 bounding box 。对于有重叠在一起的预测框,如果和当前最高分的候选框重叠面积 IoU 大于一定的阈值的时候,就将其删除,而只保留得分最高的那个。如下图:

1). NMS 计算出每一个 bounding box 的面积,然后根据置信度进行排序,把置信度最大的 bounding box 作为队列中首个要比较的对象;
2). 计算其余 bounding box 与当前最大 score 的 IoU ,去除 IoU 大于设定的阈值的 bounding box ,保留小的 IoU 预测框;
3). 然后重复上面的过程,直至候选 bounding box 为空。

当存在多目标预测时,如下图,先选取置信度最大的候选框 B1 ,然后根据 IoU 阈值来去除 B1 候选框周围的框。然后再选取置信度第二大的候选框 B2 ,再根据 IoU 阈值去掉 B2 候选框周围的框。

至此,我们已经学习了交并比,准确率,精度,召回率, FPR , F1-Score , PR 曲线, ROC 曲线, AP 的值, AUC 的值以及很重要的 mAP 指标,模型的检测速度和非极大值抑制的相关知识,希望大家有所收获。

以上是关于小目标检测相关技巧总结的主要内容,如果未能解决你的问题,请参考以下文章

小知识目标检测各类指标概念总结

深度学习检测小目标常用方法汇总

“多尺度”目标检测问题

目标检测——深度学习下的小目标检测(检测难的原因和Tricks)

GitHub:小目标检测最全资料集锦

小目标检测