小目标检测trick

小目标难检测原因

小目标在原图中尺寸比较小,通用目标检测模型中,一般的基础骨干神经网络(VGG系列和Resnet系列)都有几次下采样处理:

  • 导致小目标在特征图的尺寸基本上只有个位数的像素大小,导致设计的目标检测分类器对小目标的分类效果差
  • 如果分类和回归操作在经过几层下采样处理的 特征层进行,小目标特征的感受野映射回原图将可能大于小目标在原图的尺寸,造成检测效果差

小目标在原图中的数量较少,检测器提取的特征较少,导致小目标的检测效果差。

神经网络在学习中被大目标主导小目标在整个学习过程被忽视,导致导致小目标的检测效果差。

Tricks

(1) data-augmentation.简单粗暴,比如将图像放大,利用 image pyramid多尺度检测,最后将检测结果融合.缺点是操作复杂,计算量大,实际情况中不实用;
(2) 特征融合方法:FPN这些,多尺度feature map预测,feature stride可以从更小的开始;
(3)合适的训练方法:CVPR2018的SNIP以及SNIPER;
(4)设置更小更稠密的anchor,回归的好不如预设的好, 设计anchor match strategy等,参考S3FD;
(5)利用GAN将小物体放大再检测,CVPR2018有这样的论文;
(6)利用context信息,建立object和context的联系,比如relation network;
(7)有密集遮挡,如何把location 和Classification 做的更好,参考IoU loss, repulsion loss等.
(8)卷积神经网络设计时尽量采用步长为1,尽可能保留多的目标特征。
(9)matching strategy。对于小物体不设置过于严格的 IoU threshold,或者借鉴 Cascade R-CNN 的思路。

那么,有一个十分简单的方法可以提升小物体的精度,那就是为 bounding box regression 这项损失上,加一个针对于小物体的权重
以 YOLOv3 为例,默认对于 regression 损失都会上一个(2−w×h)(2-w \times h)(2−w×h) 的损失,w 和 h 分别是ground truth 的宽和高。如果不减去 w×hw\times hw×h,AP 会有一个明显下降。如果继续往上加,如 (2−w×h)×1.5(2-w\times h)\times1.5(2−w×h)×1.5,总体的 AP 还会涨一个点左右(包括验证集和测试集)。当然这大概也有 COCO 中小物体实在太多的原因。

有遮挡的目标检测

Repulsion Loss: Detecting Pedestrians in a Crowd-CVPR2018

遮挡情况

目标检测中存在两类遮挡,(1)待检测的目标之间相互遮挡;(2)待检测的目标被干扰物体遮挡。比如下图

具体来说,如果检测任务的目标是汽车和人,那么汽车被人遮挡,而且人被干扰物体(牛)遮挡。因为算法只学习待检测的物体的特征,所以第二种遮挡只能通过增加样本来优化检测效果

在现实的检测任务中,只有比较特殊的场景需要考虑遮挡问题,比如行人检测、公交车上密集人群检测、牲畜数量计算等

问题描述


如图所示,其中T1,T2为Groundtruth框,而P1,P2,P3为anchors,由于P2中包含了T2的部分区域,所以P2对应的proposals很容易受到T2的干扰,导致回归出来的proposal同时包含了目标T1,T2的部分区域,不精准

假设图中的预测框P1不存在,也即T1对应的proposals只有P2,如果T2对应的max score的proposal近似为P3,那么当P2和P3的IOU大于阈值时,在后处理nms阶段就会把P2过滤掉,从而导致更严重的情况,T1被漏召回

方案一:repulsion loss

针对不精准和漏召回的情况,使用repulsion loss(斥力损失),类比磁铁的吸引力和排斥力作用

斥力损失的作用是对预测的proposal进行约束,使其不仅要靠近target T(引力作用),还要远离其他的Groundtruth物体B以及B对应的proposals(斥力作用).如果T的Surrounding Groundtruth包含了除B以外的其他目标,则斥力损失会要求预测的proposal远离所有这些目标

具体实现-repulsion loss

论文提出了两个损失函数,RepGT和RepBox,前者用于对proposal向其他目标(gt)偏移的情况进行惩罚,从而实现斥力作用(编号为A),后者用于对proposal向其他目标(gt)对应的proposals靠近的情况进行惩罚,从而实现斥力作用(编号为B),因此检测结果对NMS算法更加鲁棒

为了简化,只考虑了两类的情况,前景和背景,所有前景为同一类别

引力作用

对于指定的anchor P∈P+P\in P_+P∈P+​,可以计算它与所有的groundtruth框的IOU,取IOU最大的作为target框

定义BPB^PBP为anchor P对应的预测框,那么需要满足预测框逼近target框,度量两个框的逼近程度的方式包括欧式距离,smoothL1距离,IOU等,论文中使用了smoothL1距离,并且对于训练集batch中的每一张图,需要考虑所有的anchors,因此表达式如下

斥力作用A

对于指定的anchor P∈P+P\in P_+P∈P+​,可以计算它与所有的groundtruth框的IOU,取IOU第二大的作为target框,公式如下

斥力作用A用于对BPB^PBP逼近GRepPG_{Rep}^PGRepP​的情况进行惩罚,作者使用了IoG(intersection over Groundtruth)指标来衡量逼近程度,公式如下

斥力作用B

当不同Target对应的预测框太近时,容易出现漏召回的情况,斥力作用B用于将不同Target对应的预测框分离开

对于所有的groundtruth框G0=GG^0={G}G0=G,每个框GGG都对应了一组anchors,那么所有的anchors可以分为∣G0∣|G^0|∣G0∣组

Occlusion-aware R-CNN: Detecting pedestrians in a Crowd-ECCV2018

方案二:Occlusion-aware R-CNN

loss优化

  • 所有的预测框逼近对应的target框 closely
  • 属于同一target框的多个预测框尽量集中 compactly

网络优化-PORoI

PORoI,全称为“Part Occlusion-aware RoI Pooling Unit”,在Faster RCNN算法中,RPN部分会生成目标的候选区域,如下图中的红色方框所示,ROI Pooling会将该红色区域缩放到固定尺寸,记作m×m,对于行人检测任务,作者考虑到人体具有特殊的结构,为了充分利用这一prior knowledge,从红色候选区域中切分出5个子区域,如图中蓝色的框所示。每一个蓝色框经过ROI Pooling操作后都会变成尺寸为m×m的特征图。

因为这5个子区域可能会有遮挡,图中的“Occlusion process unit”是用来生成对应子区域的“可见度”打分,若该子区域被遮挡,则打分较低,否则打分较高,作者作用用了element-wise sum操作将所有子区域的特征合并,用于最终的分类和定位任务。

笔者认为,该PORoI层存在两处待改进的地方,(1)将人体分成5个子区域是否合理,分成更多的子区域是否会效果更好,作者文中没有贴相关对比;(2)因为不同子区域对应不同的特征,“Eltw sum”操作进行特征融合,破坏了特征的结构性,需要探索更加合理的特征融合方式,使它能结合位置先验信息。

总结

两篇文章都是针对行人检测中的遮挡问题,提出解决办法
第一篇文章仅从优化目标的角度考虑,第二篇文章同时从优化目标和网络结构的角度考虑
两篇文章都是基于Faster RCNN算法框架做优化,且效果基本相当

参考知乎

目标检测之小目标检测和遮挡问题相关推荐

  1. 目标检测算法——小目标检测

    一.定义 1.以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于32×32个像素点(中物体是指32*32-96*96,大物体是指大于96*96). 2.在实际应用场景中,通常更倾向于使用相 ...

  2. 从目标检测到小目标检测

    目标检测 目标检测(object detection),就是在给定的一张图片中精确找到物体所在的位置,并标注出物体的类别.所以,目标检测要解决的问题就是物体在哪里以及是什么的整个流程问题.但是,在实际 ...

  3. 目标检测难题 | 小目标检测策略汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 在计算机视觉中,检测小目标是最 ...

  4. 【目标检测】小目标检测相关

    文章相关 [CVPR2022]QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detecti ...

  5. 【目标检测】小目标检测问题及解决方法

    本部分主要节选自 <Augmentation for small object detection>. 针对目标检测中的小目标问题,主要有以下几种解决方法: (1) 增加输入图片分辨率 [ ...

  6. 针对遥感目标检测(小目标、旋转框、密集目标)的论文整理

    文献整理 文章目录 文献整理 A Multi-Feature Fusion-Based Change Detection Method for Remote Sensing Images 内容摘要 A ...

  7. 深度学习检测小目标常用方法

    作者丨船长@知乎 来源丨https://zhuanlan.zhihu.com/p/83220498 编辑丨极市平台 本文仅用于学术分享,如有侵权,请联系后台作删文处理. 引言 在深度学习目标检测中,特 ...

  8. 干货 | 深度学习检测小目标常用方法

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 github地址:https://github.com/Captain1986/Captain ...

  9. 检测到目标服务器启用了trace方法_深度学习检测小目标常用方法

    引言 在深度学习目标检测中,特别是人脸检测中,小目标.小人脸的检测由于分辨率低,图片模糊,信息少,噪音多,所以一直是一个实际且常见的困难问题.不过在这几年的发展中,也涌现了一些提高小目标检测性能的解决 ...

最新文章

  1. 科普:浅谈 Hellinger Distance
  2. WEB开发者应该有哪些必备的技能?
  3. android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
  4. Oracle函数初探
  5. 根据字符串自动构造对应类
  6. Teradata Fastload 使用方法
  7. raspberry pi_Raspberry Pi支持的杂耍性能
  8. 【数据蒋堂】第28期:迭代聚合语法
  9. Xamarin自定义布局系列——PivotPage(多页面切换控件)
  10. 天刀找不到服务器,《天涯明月刀手游》好友服务器查看方法 怎么查看好友在哪个区...
  11. GitHub常用优秀开源Android项目
  12. js中函数传参的问题
  13. Android入门教程五之使用AndroidStudio+SDK开发安卓APP
  14. Android 8内测版本,安卓qq v8.0.8内测版
  15. 皕杰报表web应用服务器的差异
  16. JAVA-Gson-格式化输出json字符串
  17. 如何在Google上下载高清原图
  18. 3.ConcurrentMap-并发Map
  19. python高级编程
  20. php字符串截取substr,php字符串处理函数:substr、mb_substr

热门文章

  1. Python 读写文件详解 with open() as
  2. 小米笔记本电脑的触控板突然用不了是怎么了
  3. 社群运营,做好这4点,快速提升社群运营工作效率
  4. 19.1.2 递归CTE
  5. 树的基本概念和二叉树的遍历
  6. 机器学习 | Python实现GBDT梯度提升树模型设计
  7. 伸展树详解(SplayTree)(可视化工具)
  8. Redis —— Redis In Action —— Redis 实战—— 基础篇 —— Redis 的常见命令解析 以及 Redis 结合客户端的快速上手使用—— SpringData Redis
  9. java排队算法_贪心算法-排队问题-JAVA
  10. Java面试常见问题整理(项目阶段 附答案)