↑↑↑关注后"星标"Datawhale

每日干货 & 每月组队学习,不错过

Datawhale学术

作者:宋志龙,浙江工业大学,Datawhale成员

在目标检测中训练模型时,样本间往往有差异性,不能被简单地同等对待。这次介绍的论文提出了一种重要样本的关注机制,在训练过程中帮助模型分辨哪些是重要的样本,从而优化整个训练过程。

论文标题:Prime Sample Attention in Object Detection

论文链接:https://arxiv.org/pdf/1904.04821.pdf

后台回复“210717”可进目标检测群

背景

论文是基于anchor的目标检测中正负样本采样的。首先来一起回顾下整个过程。

以经典two-stage目标检测网络Faster-rcnn为例,如图所示,过程大致为:

  1. 图片输入经过backbone得到feature_map,

  2. 然后经过RPN网络得到proposal,

  3. 再将proposal进行1:3的正负样本的采样,

  4. 将采样后的正负样本送入rcnn阶段进行分类和回归。

图中蓝框区域就是本文要研究的内容:

问题分析

在这样一个正负样本采样阶段,目前主流的算法都是怎么做的?

  1. Faster-rcnn,将采样后的正负样本直接送入rcnn阶段进行分类和回归;

  2. ohem,将loss大的proposal视为难例,在采样的时候优先采样这些样本;

  3. focal_loss,通过两个超参数调节不同难易程度样本的loss。

还有很多别的关于正负样本采样的研究,这里不一一列举,但是目前来看,大部分关于这部分的优化,都是想要去优化难例样本,也就是说,一个proposal在训练的时候贡献的loss越大,越需要去优化,但是这样真的是对的吗?或者说,对于模型来说,这些难例样本真的是最重要的吗?

这里我们举一个例子,看一下本文认为什么是重要的样本,如下图所示:

左图:白色虚线表示ground truth,红色框表示本文认为的重要样本(prime sample),蓝框为难例样本。

右图:不同采样策略下模型的PR曲线,random表示平等对待各个样本,hard表示重点关注难例样本,prima表示重点关注重要样本。

可以看到,基于prime sample的采样策略能够更好地提升检测器的性能,原因是什么呢?

我们以左图为例,对于左图来说,对于这样一个检测结果,往往我们希望去优化蓝框,因为它的loss更大,这是可以理解的。

但是对于这样一个图片,已经有更好的红框了,其实是没有必要去优化蓝框的,因为最终蓝框只要比红框得分低,它就会被后处理NMS干掉,从而不对检测指标有贡献,因此,此时,与其去优化蓝框,不如进一步优化红框,使其更加精确。换句话说,红框才是更重要的。

重新审视mAP

以COCO计算mAP的过程为例,大致分为以下四步:

  1. 以间隔0.05对在0.5~0.95内采样iou阈值

  2. 在每个iou阈值下,计算PR曲线,得到AP值

  3. 将所有iou阈值下的AP值平均得到mAP(m--mean iou)

  4. 所有类别的mAP进行平均得到总的mAP(m--mean  class)

接下来我们看一下,从mAP的指标上来看,哪些正负样本是更重要的?

1. 正样本

文章中说,对于单一gt bbox来说,与其重叠的所有预测边界框中,具有最高IoU的bbox最为重要。以图左边这个目标为例:

对于白色虚线gt来说,预测边界框有bbox A, bbox B,bbox C,那么bbox C是最重要的,其原因在于它和gt的IOU是最高的,倘若不考虑每个框的置信度以及NMS的影响,当计算AP50的时候,ABC都可以被认为检测到gt。

但是当计算AP70的时候,只有C表示检测到了gt,而此时A、B虽然表示没有检测到gt,但是有C检测到了,就不影响recall了,所以C是直接影响召回的,因此它是最重要的。

对于多目标gt bbox来说,在所有针对不同对象的IoU最高bbox中(图中bbox C和bbox D),具有更高IoU的bbox(图中bbox D)更为重要。以图中两个目标为例:

依旧类比单目标的思路,这里假设要计算AP50,那么两个目标分别被C和D很好的检测到,但是要计算AP90,就只有D贡献recall了,要计算AP95,那整张图的mAP直接到0,也就是说,随着mAP计算过程中IOU阈值的增大,最后还是靠D一直在顶着,因此它是最重要的。

2. 负样本

以图为例,负样本是没有IOU的概念的,只有置信度得分,在nms之后,每一簇负样本中(蓝色的一簇,红色的一簇)分数最高的被保留下来,因为它们背景区域被检测为某类别正样本的负样本,所以被预测为某类别分数越高代表其错的越厉害,也就是越重要。越重要也就是越需要重点关注去优化,但是与优化正样本不一样,对负样本的优化是希望高分数能够降下来。

PISA算法

基于以上内容,我们再来看一下PISA这篇论文是怎么做的,其实主要内容上面已经说了,就是为了得到高的mAP,分析出哪些正负样本对mAP指标的提高是最重要的。因此,下面主要就涉及两方面内容,第一,如何去找重要的样本?第二,对重要程度不同的样本分别做什么操作?

一、查找重要样本--HLR

(1)IOU-HLR,对正样本进行分层排序

排序的过程图中表示地比较清楚,总结一下就是,对于单一目标附近的样本(ABC, DE),首先根据IOU在组内排序(CAB,DE),然后对不同类别同一顺位的样本排序(DC, AE, B),最后将排序后的样本重新组合。这么做既考虑了组内重要性,又考虑了组间重要性。

这里有一个简单的小实验,简单验证了本方法的有效性:

图中展示的是,不同IOU阈值下的PR曲线,top5/top25表示按照IOU-HLR排序方法排序后得到的top5/top25的重要样本。两点结论,第一,关注重要样本,的确能提升AP。第二,关注重要样本,对高IOU阈值下的AP增益更大。

(2)Score-HLR,对负样本进行分层排序

这个过程跟正样本差不多,不同的是正样本依据的是IOU,负样本依据的是Score,都能跟前面的分析照应。

二、算法实现

1. ISR

在对所有样本重要性进行排序之后,怎么跟训练过程联系起来呢?

这里采用的方法叫做ISR(Importance-based Sample Reweighting),即基于样本重要性重新赋予权重。

分为以下几个步骤:

(1) 首先将每个类别的样本分组(N个前景类别+1个背景类别),n_max表示在每个类别中样本数最多的数目,在每个组内对正样本进行IoU-HLR操作,对负样本进行Score-HLR操作,得到重要性排序。

然后按照公式(1)将重要性排序进行线性变换,r_i表示某样本排序后的次序,r_i越小表示排序越靠前,可以看到r_i越小,u_i越大。

(2)再按照公式(2)将u和每个样本的权重w建立联系,为不同重要性的样本赋予不同的权重,其中β和γ是超参数。

(3)最后将重新赋值的权重应用到分类损失的计算上。

其中i表示正样本,j表示负样本,这里为了保证应用ISR之后不改变总的loss值,对ISR之后的每个样本的权重进行了归一化。

2. CARL

在为不同的样本根据重要性排序结果赋予不同权重之后,本来进而提出了CARL(Classification-Aware Regression Loss),来解决分类和回归不一致的问题,也就是有时候回归的好,但是分类分数差之类的问题。因为我们计算mAP的时候,不仅需要高的IOU阈值,更要高的分类置信度,毕竟NMS会首先保留下来分数最好的检测结果。

其做法如公式(4)所示,就是将分类置信度p_i引入到回归损失中,经过推倒可以证明,回归损失L(d_i, ^d_i)和L_carl对p_i的倒数是正相关的,回归损失较大的样本的分类分数会被抑制,这样让样本的回归结果指导分类分支,加强分类和回归的一致性。

实验结果

1. PISA应用在不同检测器时,在COCO和VOC测试集上带来的增益。

可以看到,基本都有涨点,尤其是对高IOU阈值下的AP指标(AP75)涨点较多。

2. 消融实验

表3中,R表示平等对待所有样本,H表示关注难例样本,P表示关注主要样本。

表4中,ISP-R/ISR-N分别表示为正/负样本基于重要性重新赋予权重。CARL指分类和回归分支联合调优的应用。

3. 超参数搜索实验

表5为公式(2)和公式(4)的超参数搜索实验结果。

4.ISR对样本分数的影响

横坐标表示样本的重要性顺序,纵坐标表示样本分数。

可以看到,ISR-P能够提升重要性排名靠前的正样本的分数,且抑制重要性排名靠后的样本的分数。

ISR-N也的确能够抑制负样本的分数,且重要性排名越靠前,其分数被抑制的越多。

5. CARL对样本分数的影响

图8展示了应用CARL之后,不同IOU下样本分数均值的变化,可以看到,CARL能够提升高IOU下重要样本得分,低IOU阈值下样本得分会被抑制,也就是说,有了更好的,不那么好的就可以考虑丢了呀。

6. 可视化结果

从可视化结果可以看到,PISA能够使模型更关注于重要样本的优化,使得检测结果中有更少的假阳,且真阳的分数更高。

以上解读仅代表个人观点,水平有限,欢迎交流~

论文下载:https://arxiv.org/pdf/1904.04821.pdf

解读视频:https://www.bilibili.com/video/BV1664y1b7qf

学习交流:后台回复“210717”可进群交流

本文来自由周郴莲负责的Datawhale论文分享项目「Whalepaper」,NLP、CV、Res…每周一起解读论文!

Whalepaper介绍及加入方式:https://datawhale.feishu.cn/docs/doccnAbq5hJPaVB645IztpFPdld

一种关注于重要样本的目标检测方法!相关推荐

  1. 【深度学习】一种关注于重要样本的目标检测方法!

    作者:宋志龙,浙江工业大学,Datawhale成员 在目标检测中训练模型时,样本间往往有差异性,不能被简单地同等对待.这次介绍的论文提出了一种重要样本的关注机制,在训练过程中帮助模型分辨哪些是重要的样 ...

  2. 一种新的无监督前景目标检测方法 A New Unsupervised Foreground Object Detection Method

    14.一种新的无监督前景目标检测方法 A New Unsupervised Foreground Object Detection Method 摘要:针对基于无监督特征提取的目标检测方法效率不高的问 ...

  3. 通过形状先验引导的3D目标检测方法(Disp R-CNN解读)

    来源丨AI 修炼之路 问题,我们提出在不需要雷达点云的情况下,使用统计形状模型生成密集视差伪真值,这使得我们的系统具有更广泛的适用性.在KITTI数据集上进行的实验表明,即使在训练时不使用雷达数据,D ...

  4. 深度学习目标检测方法

    转自:http://blog.csdn.net/yimingsilence/article/details/53995721 这里搜集了一些关于物体检测的方法分析和介绍,看好哪个可以去详细研究一下,基 ...

  5. LVC | 一种简单的小样本目标检测方法

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文解读一下 Label, Verify, Correct (LVC):一种简单的小样本目标检测方法.   本文的 ...

  6. 肺结节目标检测_一种基于CT图像的肺结节检测方法及系统与流程

    本发明属于医学图像分析和计算机辅助诊断等技术领域,更具体地,涉及一种基于CT图像的肺结节检测方法及系统. 背景技术: 肺癌是导致患癌死亡的最危险的疾病之一,其发病率占所有癌症的三分之二,且5年存活率为 ...

  7. 一种投影法的点云目标检测网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文来源于早期的一篇基于投影法的三维目标检测文章<An Euler-Region-Pr ...

  8. 一种改进的高光谱图像CEM目标检测算法

    一种改进的高光谱图像CEM目标检测算法 人工智能技术与咨询 来源:< 应用物理> ,作者付铜铜等 关键词: 高光谱图像:光谱重排:CEM算法:目标检测: 摘要: 约束能量最小化(Const ...

  9. MATLAB目标检测恒虚警技术,一种自适应的恒虚警率目标检测方法

    一种自适应的恒虚警率目标检测方法 [专利摘要]本发明涉及一种自适应的恒虚警率目标检测方法,包括以下步骤:1):将雷达接收到的数据传入匹配滤波器中:2):将匹配滤波器输出的信号传入平方律检波器中进行处理 ...

最新文章

  1. 解决IndexClosedException: closed
  2. AS3.0 位图翻转、旋转
  3. js laypage mysql_layui中的分页laypage
  4. SpringMVC处理请求或响应数据
  5. ApacheCN 数据科学译文集 2020.8
  6. python化学公式_(CSP)201912-3化学方程式-python实现
  7. 负离子程序员的一组未来手绘,酷毙了
  8. 疯狂ios之cocos2d中的文本
  9. 三菱plc分拣程序_三菱PLC实现电梯控制方案,含全套程序设计
  10. 操作系统实验 文件复制/复制文件
  11. Keil5编译环境搭建流程----STM32和GD32
  12. grubbs准则 matlab_(转)格拉布斯准则(Grubbs Criterion)处理数据异常
  13. 低代码平台表单引擎技术方案选型
  14. SCAU 1038 打印图案
  15. c语言以字符输出88,C语言88案例完整版
  16. ESP32-IDF开发笔记 | 01 - ESP-IDF开发环境搭建(2023.04.08更新)
  17. 深入了解JVM之内存模型(四)
  18. 完美解决Ubuntu16.04虚拟机窗口全屏问题
  19. Pointofix ,截屏神器,好用到飞的软件
  20. JavaScript 反调试技巧

热门文章

  1. 『TensorFlow』命令行参数解析
  2. C++_volatile限定修饰符 Pair类型
  3. 【青少年编程竞赛交流】01月份微信图文索引
  4. June:Datawhale开源学习小程序升级啦!
  5. 【青少年编程】【Scratch】06 侦测模块
  6. 题目 1470:【蓝桥杯】【入门题】【基础练习VIP】时间转换
  7. 技术图文:进一步完善自动化交易系统 - 01
  8. 如何利用 C# 爬取Gate.io交易所的公告!
  9. Matlab与线性代数 -- 矩阵的水平连接和垂直连接
  10. mysql实训报告_mysql数据库技术》实验报告.doc