小目标检测

wujianming-110117 wujianming-110117     2023-03-21     106

关键词:

小目标检测

论文地址:
https://arxiv.org/pdf/2004.12432.pdf

 一.Stitcher: Feedback-driven Data Provider for Object Detection

目标检测通常根据尺度变化质量,其中对小目标的性能最不令人满意。本文研究了这种现象,发现:在大多数训练迭代中,小目标几乎不占总损失的一部分,从而导致不平衡优化的性能下降。受此启发,本文提出了Stitcher,一个反馈驱动的数据提供商,旨在以平衡的方式训练目标检测器。在Stitcher中,图像被调整成更小的组件,然后Stitch成与常规图像相同的大小。Stitch图像包含不可避免的较小对象,这将有利于作者的核心思想,利用损失统计作为反馈,以指导下一次迭代更新。在不同的检测、骨干网、训练周期、数据集上进行了实验,甚至在实例分割上也进行了实验。Stitcher在所有设置中都稳定地提高了性能,特别是对于小对象,在训练和测试阶段几乎没有额外的计算。代码和模型将公开提供。
二. Motivation
在COCO数据集中,研究detection的training方式,当时尝试了Multi-scale training的各种settings、SNIP[1]/SNIPER[2]、CSN[3]等。发现Multi-scale training对模型训练是真的很有帮助,即使在接近50 AP的高baseline上还有不俗的提升。

然而,普通的Multi-scale training太低效了,而SNIPER是真的复杂,需要处理好label assignments, valid range tuning, positive/negative chip selection,费了作者很大的力气才把它从MXNet源码迁移到自己的框架上。

这样的心态和需求,迫使去研究一种更简洁实用的multi-scale training 方法。

不管是普通训练还是Multi-scale training,作者发现在COCO上训练出来的模型,小物体的AP永远是比中物体和大物体低很多。

比如,在最常用的baseline: Faster R-CNN + ResNet 50-FPN (1x) 的结果(AP: 36.7 %, AP small: 21.1 %, AP mid: 39.9 %, AP large : 48.1 %)中,AP small 比 AP large 低了两倍还多。

接下来,作者就开始研究,小物体到底出了什么问题,以及怎样解决这样的问题。

首先,作者统计了小物体在数据集中的分布,发现训练集中小物体的数量并不少。

如下表所示,在所有boxes中,有41.4 %是小物体,是这三类物体之中最多的;但小物体的分布却非常不均匀,只有52.3%的图片中包含了小物体,而中物体和大物体分布都相对均匀。

换句话说,小物体数量很多、但分布非常不均匀,有接近50%的图片中都没有小物体。

技术图片

 

 接下来,作者又统计了一下,在训练过程中小物体的loss分布。能直接反应模型学习情况的是loss,进一步发现,还是在这个Baseline: Faster R-CNN + ResNet 50-FPN (1x)的训练过程中,有超过50% iterations中,小物体所产生的loss都非常低(不到总loss的0.1)。

这说明在模型训练过程中,小物体提供给网络的监督是不足的。

技术图片

 

 通过上述分析,作者的猜疑链形成:数据集中小物体分布不均匀 --> 训练中小物体学习不充分(Loss不足) --> 训练完的模型小物体精度差。而接下来就是按照这个逻辑逐步设计解决方法。

三.Method
在已经有了前面multi-scale training和SNIPER的实验结果后,作者想到可以把图像缩小,并拼接在一起(逆SNIPER而行,SNIPER是裁剪,Stitcher是拼接)。

如下图所示,作者把batch内每4张图都缩小到同样大小,之后拼成一张与正常普通同样大小的图作为训练。通过这样的方式,把大物体和中物体缩小成中物体和小物体,来均衡不同Scale物体在训练过程中的分布。

技术图片

 

 (这里与YOLOv4-Mosaic类似,但不同的是作者没想到拼接的时候可以调整4张图为不同大小。)

接下来就是紧张刺激的实验环节,完全采用这种拼接图进行训练,在上文36.7% 的baseline上得到了32.1%的惊人结果。

然而,就算在32.1% 的 AP 中(AP small: 21.9, AP mid: 36.4, AP large: 36.8)的AP small仍然比36.7% 的baseline中的AP small要高,这让作者看到了希望。

这说明,拼接图是有用的,只是作者没用好,所以影响了最终效果。

前面对训练过程中loss的分析,给作者提供了一个自然而然的思路,就是直接用loss 作为反馈信号,来指导拼接图的使用。

作者采用了一种“缺啥补啥”的简单思路:如果上一个iteration中,小物体产生的loss不足(比例小于一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练。

这个思路将32.1%的结果一下子增长到了38.6%,且统计loss比例几乎不需要额外的计算量。

技术图片

 

 四. Experimental Result

1.  作者在Faster R-CNN、RetinaNet的1x / 2x上都进行了实验,有2个点左右的AP提升,且涨点主要来自于AP small。这符合作者最初的Motivation和方法设计。

2.  此外,作者还在更大的backbone / 更高的baseline (ResNext + Deformable) 、其他数据集 (PASCAL VOC)、Instance Segmentation (Mask R-CNN) 等settings上都做了实验验证,都有不同程度的效果提升。

 技术图片

 

 五. Further Analysis

除了常规实验以外,还有一些其他的效果分析可供讨论。

1. 只能4张 (平方数) 拼接吗?答案是否定的。

不管是上文介绍的拼接方式还是YOLO v4,都是在Spatial维度 (h,w)上进行拼接的。如下图(c)中所示,本文还提供了一种在batch维度n上拼接的等价的实现方式,也能达到一样的效果。

这样的做法可以带来如下好处:

a.  拼接图像的数目不再需要因为spatial的限制局限于平方数,可以自由选择2、3、4、5、6等张数图像进行拼接。

b.  对于那些读写内存有限制的训练设备平台,提供了一定的自由度。

技术图片

 

 2. 过拟合问题(更长训练时间的增益)在后续实验中,作者还发现Stitcher可以起到防止过拟合的作用。在不用SyncBN之类的骚操作的情况下,把一个最普通的Faster R-CNN + FPN模型直接训练时间较长(6x)是会有严重的过拟合的(36.7-->35.6),但Stitcher却没有这个问题。因为在Stitcher训练过程中,拼接图像的挑选组合是随机的,拼接图像的多样性防止了过拟合的发生。

技术图片

 

 3. 计算量代价

a.  对于Inference阶段,Stitcher 没有做任何修改,不需要调multi-scale testing之类的操作。所以,如果使用者只关心Inference time 的话,Stitcher带来的涨点可以说是完全免费的。

b.  对于Training阶段,Stitcher 额外引入的操作包括:image stitching 和 loss ratio calculation这两步。经实测,后者可以忽略不计,额外的耗时集中在于前者对图像的interpolation. 作者在同一台 8 GPUs RTX 2080 TI 的机器上实测,对于Faster R-CNN + ResNet 50 + FPN的baseline上,加上Stitcher需要额外多训练15分钟左右。这相比于8个多小时的训练来说,多等15分钟也是可以接受的。

六.Conclusion
总结一下,作者这篇工作从小物体精度低这个问题入手分析,提出了一种新的multi-scale training方式 Stitcher,在常用的数据集、检测器、训练方式上均涨点明显,没有引入任何Inference负担,有一定的简洁实用性。代码和模型都会在近期开源。

参考文献:
1.An Analysis of Scale Invariance in Object Detection

SNIPhttp://openaccess.thecvf.com/content_cvpr_2018/papers/Singh_An_Analysis_of_CVPR_2018_paper.pdf

2.SNIPER: Efficient Multi-Scale

Traininghttps://papers.nips.cc/paper/8143-sniper-efficient-multi-scale-training.pdf

3.Consistent Scale Normalization for Object Recognition

目标检测sahi:切片辅助推理和微调小目标检测(代码片段)

前言在我之前的文章中,写过一种对于微小目标的检测策略,即将大图裁成多个小图,每个小图分别进行检测,最后将所有的检测结果进行叠加,统一使用NMS进行滤除。但是经过实验,该方法的效果并不是... 查看详情

小目标检测的增强算法

小目标检测的增强算法Augmentationforsmallobjectdetection摘要近年来,目标检测取得了令人瞩目的进展。尽管有了这些改进,但在检测小目标和大目标之间的性能仍有很大的差距。本文在一个具有挑战性的数据集上分析了当前最先进的... 查看详情

改进yolov7系列:首发最新结合多种x-transformer结构新增小目标检测层,让yolo目标检测任务中的小目标无处遁形

查看详情

小目标检测

小目标检测论文地址:https://arxiv.org/pdf/2004.12432.pdf 一.Stitcher:Feedback-drivenDataProviderforObjectDetection目标检测通常根据尺度变化质量,其中对小目标的性能最不令人满意。本文研究了这种现象,发现:在大多数训练迭代中,小目... 查看详情

lvc|一种简单的小样本目标检测方法(代码片段)

...本文解读一下Label,Verify,Correct(LVC):一种简单的小样本目标检测方法。 本文的目标是小样本目标检测(FSOD),即在给定少量训练实例的情况下,就将一个目标检测器扩展到一个新类别的检测上。作者引入了一种简单的... 查看详情

目标识别yolov5针对小目标检测的改进模型/添加帧率检测(代码片段)

...下采样。对于一些分辨率很高的遥感/无人机图片,小目标难以被训练识别。本篇博文就来尝试这篇博文YOLOV5模型和代码修改——针对小目标识别所提到的一种改进方案。我所使用的是YOLOv5-5.0版本,数据集采用VisDrone数据... 查看详情

对于ssd对小目标检测效果的思考

对于ssd模型对于小目标检测效果不好的问题,我认为可以结合.prototxt文件进行分析,以conv4_3_norm_mbox_priorbox为例:prior_box_parammin_size:30.0max_size:60.0aspect_ratio:2flip:trueclip:falsevariance:0.1variance:0.1varian 查看详情

推荐研究方向小样本开集目标检测(few-shotopen-setobjectdetection)

...rxiv.org/abs/2210.15996    1、任务:小样本开集目标检测,使用少量已知类样本训练模型,使得模型既能够检测小样本已知类又能够检测未知类。2、动机:解决FSOSOD问题有三个重要原因。1)可以识别小样本类别的开集... 查看详情

目标检测yolo+dota:小样本检测策略(代码片段)

前言之前在使用YOLOv5跑xView数据集时,发现准确率还是非常低的。在网上冲浪时,我发现了一种小样本检测策略:那就是把大分辨率的图片分割成小块进行训练,然后再输入大图进行检测。那么本篇博文就使用DOTA... 查看详情

“多尺度”目标检测问题

参考技术A在目标检测任务中,被测目标的大小经常是不固定的,自动驾驶相关检测任务可能要同时检测大卡车与小狗;工业质检相关检测任务可能要同时检测布料的大面积撕裂与小穿孔;医疗病灶检测任务可能要同时检测大小... 查看详情

目标检测小脚本:数据集划分(代码片段)

需求内容之前写了一篇【目标检测】YOLOv5跑通VOC2007数据集里面写了个脚本是将xml标注格式转换称Yolo格式,同时读取数据集划分。在训练自己的数据时,我发现没有现成的数据集划分文件,于是就写了这个小脚本来读... 查看详情

目标检测小脚本:根据xml文件统计类别数(代码片段)

问题场景搜到一个目标检测数据集,但是别人没有详细说明到底有多少类别以及各类别名称,这时候就需要查询xml的标注文件来获取这两个信息。脚本代码importxml.etree.ElementTreeasETimportnumpyasnpimportosif__name__=='__main_... 查看详情

目标检测yolov5跑xview数据集/小样本检测策略实验(代码片段)

前言在YOLOv5的6.1版本新出了xView.yaml数据配置文件,提供了遥感数据集xView的检测方法。此篇就使用YOLOv5来试跑xView数据集,并对一些小样本检测的策略进行消融实验。xView数据集下载:https://github.com/zstar1003/Dataset数据... 查看详情

《工业机器视觉检测123》(1.3)目标检测问题记录

...应用场景搭建无监督模型。(4)数据增强和极小目标检测研究。 检测极小目标检测( COCO 数据集定义小于32x32pix的为小目标,我们这里把小于10*10pix的 目标定义为极小目标) (1)训练和推理时将... 查看详情

sylph|一种用于增量小样本目标检测的超网络框架(代码片段)

...,我是极智视界,本文解读一下一种用于小样本目标检测的超网络框架Sylph。 作者研究了具有挑战性的增量小样本目标检测任务(iFSD)。近年来,基于超网络的方法在连续的、无微调的iFSD背景下进行了研究,但取... 查看详情

深度学习和目标检测系列教程23-300:fasterrcnn和yolov5训练飞机目标识别的小项目(代码片段)

@Author:RunsenFasterRCNN和yolov5训练飞机目标识别的项目目标检测算法主要包括:两类two-stage和one-stage一类是two-stage,two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域(regionproposals),然... 查看详情

目标检测小脚本:根据xml批量复制jpg图片(代码片段)

问题场景在使用LabelImg标注完目标检测的数据之后,由于很多样本是负例(没有目标的样本),将其输入到模型中意义不大,因此需要进行剔除。那么实现思路就是根据xml的名称来筛选对应的jpg图片。文件结构如图,... 查看详情

目标检测小脚本:提取训练集图片与标签并更新索引(代码片段)

问题场景在做目标检测任务时,我想提取训练集的图片单独进行外部数据增强。因此,需要根据划分出的train.txt来提取训练集图片与标签。需求实现我使用VOC数据集进行测试,实现比较简单。importshutilif__name__==&... 查看详情