目标检测之小目标检测和遮挡问题
小目标检测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.以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于32×32个像素点(中物体是指32*32-96*96,大物体是指大于96*96). 2.在实际应用场景中,通常更倾向于使用相 ...
- 从目标检测到小目标检测
目标检测 目标检测(object detection),就是在给定的一张图片中精确找到物体所在的位置,并标注出物体的类别.所以,目标检测要解决的问题就是物体在哪里以及是什么的整个流程问题.但是,在实际 ...
- 目标检测难题 | 小目标检测策略汇总
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 在计算机视觉中,检测小目标是最 ...
- 【目标检测】小目标检测相关
文章相关 [CVPR2022]QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detecti ...
- 【目标检测】小目标检测问题及解决方法
本部分主要节选自 <Augmentation for small object detection>. 针对目标检测中的小目标问题,主要有以下几种解决方法: (1) 增加输入图片分辨率 [ ...
- 针对遥感目标检测(小目标、旋转框、密集目标)的论文整理
文献整理 文章目录 文献整理 A Multi-Feature Fusion-Based Change Detection Method for Remote Sensing Images 内容摘要 A ...
- 深度学习检测小目标常用方法
作者丨船长@知乎 来源丨https://zhuanlan.zhihu.com/p/83220498 编辑丨极市平台 本文仅用于学术分享,如有侵权,请联系后台作删文处理. 引言 在深度学习目标检测中,特 ...
- 干货 | 深度学习检测小目标常用方法
点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 github地址:https://github.com/Captain1986/Captain ...
- 检测到目标服务器启用了trace方法_深度学习检测小目标常用方法
引言 在深度学习目标检测中,特别是人脸检测中,小目标.小人脸的检测由于分辨率低,图片模糊,信息少,噪音多,所以一直是一个实际且常见的困难问题.不过在这几年的发展中,也涌现了一些提高小目标检测性能的解决 ...
最新文章
- 科普:浅谈 Hellinger Distance
- WEB开发者应该有哪些必备的技能?
- android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
- Oracle函数初探
- 根据字符串自动构造对应类
- Teradata Fastload 使用方法
- raspberry pi_Raspberry Pi支持的杂耍性能
- 【数据蒋堂】第28期:迭代聚合语法
- Xamarin自定义布局系列——PivotPage(多页面切换控件)
- 天刀找不到服务器,《天涯明月刀手游》好友服务器查看方法 怎么查看好友在哪个区...
- GitHub常用优秀开源Android项目
- js中函数传参的问题
- Android入门教程五之使用AndroidStudio+SDK开发安卓APP
- Android 8内测版本,安卓qq v8.0.8内测版
- 皕杰报表web应用服务器的差异
- JAVA-Gson-格式化输出json字符串
- 如何在Google上下载高清原图
- 3.ConcurrentMap-并发Map
- python高级编程
- php字符串截取substr,php字符串处理函数:substr、mb_substr
热门文章
- Python 读写文件详解 with open() as
- 小米笔记本电脑的触控板突然用不了是怎么了
- 社群运营,做好这4点,快速提升社群运营工作效率
- 19.1.2 递归CTE
- 树的基本概念和二叉树的遍历
- 机器学习 | Python实现GBDT梯度提升树模型设计
- 伸展树详解(SplayTree)(可视化工具)
- Redis —— Redis In Action —— Redis 实战—— 基础篇 —— Redis 的常见命令解析 以及 Redis 结合客户端的快速上手使用—— SpringData Redis
- java排队算法_贪心算法-排队问题-JAVA
- Java面试常见问题整理(项目阶段 附答案)