目标检测正负样本区分策略和平衡策略总结(一) - 知乎0 简介本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为 正负样本定义、正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的head部分。所…https://zhuanlan.zhihu.com/p/138824387目标检测正负样本区分策略和平衡策略总结(二) - 知乎0 简介本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为 正负样本定义、正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的head部分。所…https://zhuanlan.zhihu.com/p/138828372目标检测正负样本区分策略和平衡策略总结(三) - 知乎0 简介本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为 正负样本定义、正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的head部分。…https://zhuanlan.zhihu.com/p/144659734

在看完二阶段的faster rcnn,cascade rcnn和一阶段的retinanet,centernet,fcos,atss以及yolo系列1-x之后,再来总结一下正负样本分配和平衡策略,探究影响目标检测的核心问题。

1.faster rcnn and cascade rcnn

faster rcnn和cascade rcnn的正负样本分配和采样完全一致,在mmdet中都是MaxIouAssigner和RandomSampler,在二阶段算法中,分为rpn和rcnn两部分,两部分主要是控制正负样本的阈值不同,

    train_cfg=dict(rpn=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.7,neg_iou_thr=0.3,min_pos_iou=0.3,match_low_quality=True,ignore_iof_thr=-1),sampler=dict(type='RandomSampler',num=256,pos_fraction=0.5,neg_pos_ub=-1,add_gt_as_proposals=False),allowed_border=-1,pos_weight=-1,debug=False),rpn_proposal=dict(nms_pre=2000,max_per_img=1000,nms=dict(type='nms', iou_threshold=0.7),min_bbox_size=0),rcnn=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.5,neg_iou_thr=0.5,min_pos_iou=0.5,match_low_quality=False,ignore_iof_thr=-1),sampler=dict(type='RandomSampler',num=512,pos_fraction=0.25,neg_pos_ub=-1,add_gt_as_proposals=True),pos_weight=-1,debug=False)),

MaxIoUAssigner:1.将每个anchor和所有gt的最大iou小于neg_iou_thr的设为负样本,2.将每个anchor和所有gt的最大iou大于等于pos_iou_thr的设为正样本,3.2的操作可能会导致部分gt没有anchor,iou低于pos_iou_thr,每个gt和所有anchor最大iou的那个anchor,如果其iou大于min_pos_iou,则设为正样本,4.剩下的所有样本为忽略样本。

这里面假设只有2个gt,1个anchor,anchor和第一个gt的iou为0.75,和第二个gt的iou为0.45,则在2中其为gt1正样本,但是在3分配其变成gt2正样本,可见3会有一些副作用,会引入一些低质量的正样本,需要match_low_quality=True.

在上述配置中可见在rcnn中,pos_iou_thr和neg_iou_thr都是0.5,说明没有忽略样本了。

RandomSampler:num = 256 表示采样后每张图片的样本总数,pos_fraction表示其中的正样本比例,具体是正样本采样 128 个,那么理论上负样本采样也是 128 个,neg_pos_ub表示负和正样本比例上限,用于确定负样本采样个数上界,例如打算采样 1000 个样本,正样本打算采样 500 个,但是可能正样本才 200 个,那么正样本实际上只能采样 200 个,如果设置neg_pos_ub=-1那么就会对负样本采样 800 个,用于凑足 1000 个,但是如果设置了neg_pos_ub比例,例如 1.5,那么负样本最多采样 200x1.5=300 个,最终返回的样本实际上不够 1000 个,默认情况neg_pos_ub=-1,add_gt_as_proposals=True,是防止高质量正样本太少而加入的,可以保证前期收敛更快、更稳定,属于训练技巧,在 RPN 模块设置为 False,主要用于 R-CNN,因为前期 RPN 提供的正样本不够,可能会导致训练不稳定或者前期收敛慢的问题。

2 libra rcnn

libra rcnn中的CombinedSampler和balanced l1 loss.

CombinedSampler:随机对正负样本采样是不合理的,正样本没什么影响,因为正样本都是iou大于等于pos_iou_thr的,但是负样本因为多,随机采样后的iou都是偏小的,难负样本过小,由于负样本本身iou的不平衡,当采用随机采样后,会出现难负(iou 0.5附近)和易负(iou接近0)样本不平衡采样,导致后面性能不好。作者发现了如果是随机采样的话,随机采样到的样本超过70%都是在IoU在0到0.05之间的,都是易学习负样本,作者觉得是不科学的,而实际统计得到的事实是60%的hard negative都落在IoU大于0.05的地方,但是随机采样只提供了30%,实在是太少了,iou balanced sampling操作会尽量保证各个iou区间内都会采样到。 由于该操作比较简单,就不贴论文公式了。核心操作是对负样本按照iou划分k个区间,每个区间再进行随机采样,保证易学习负样本和难负样本比例尽量平衡。

balanced l1 loss:faster rcnn的rcnn head,使用的回归loss是smooth l1,作者认为这个依然存在不平衡。作者分析是:loss解决Classification和Localization的问题,属于多任务loss,那么就存在一个平衡权重,一般来说回归权重会大一些,但一味的提高regression的loss其实会让outlier的影响变大(类似于OHEM中的noise label),outlier外点样本这里作者认为是样本损失大于等于1.0,这些样本会产生巨大的梯度不利于训练过程,小于的叫做inliers。平衡回归loss的目的是既不希望放大外点对梯度的影响,又要突出内点中难负样本的梯度,从而实现对外点容忍,对内点区分难负样本的作用。为此作者在smooth l1的基础上进行重新设计,得到Balanced L1 Loss。核心操作就是想要得到一个当样本在 |x|<1附近产生稍微大点的梯度的函数。

3.focal loss

    train_cfg=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.5,neg_iou_thr=0.4,min_pos_iou=0,ignore_iof_thr=-1),allowed_border=-1,pos_weight=-1,debug=False),

retinanet中min_pos_iou=0,表明每个gt都至少有一个anchor与之对应,retinanet不采用正负样本采样,分配上和fasterrcnn类似,主要通过focal loss来对不同样本进行处理。

4.yolov1-x

yolov1-3中正负样本的分配几乎完全一致,它和MaxIoUAssigner还是不同的。v1中没有anchor的概念,每个网格单元预测两个边界框,边界框和gt的iou最大的负责预测该gt,其余的均作为负样本,v2-v3中引入了anchor,每个网格单元有3个anchor,但是只有和gt的iou最大的anchor才负责预测gt,计算loss,但是由于v2中的边界框其实比v1多,此时定了一个iou阈值,anchor和gt的iou小于iou阈值的才是负样本,如果在iou阈值和最大iou之间的样本均作为忽略样本,v3中也是这么操作的,这个就和rpn比较类似了,但是yolo系列的正样本还是很少的,v4中作者其实是有做尝试的设定一个正样本的iou阈值,用多个anchor去预测gt,但是复现的pytorch版本几乎都没这么做,依然是v3的最大iou匹配机制,v5在正负样本匹配上做了很大改动,首先,不再通过iou去选正样本,而是通过宽高比,自然也没有忽略样本了,正样本的选择也不再是一个网格单元,而是临近的三个网格单元,不再采用分层预测,而是多层预测,v5还是极大的增加了正样本,不过也会引入一些低质量的正样本,yolox的话,在正负样本分配上更接近atss和fcos那一套了,yolox把fcos的正负样本用在yolo上做anchor-free是涨点的,yolox通过simota来给不同的gt分配正样本,首先通过中心采样的原则,预测框落在gt框内的和以gt为中心,边长为5的范围内的左右的预测框均为候选正样本,计算所有候选正样本和所有gt的iou,分类和回归损失,利用回归和分类损失得到cost值,cost类似于候选正样本质量的一个指标,给每个gt调整k个iou最大的值,其和即为正样本个数,再根据cost值将候选框相应位置的正样本选出来作为gt的预测框,全程是anchor-free的。

5.ssd

ssd增加了非常多的anchor,正负样本定义仍然采用MaxIoUAssigner,且没有忽略样本,在损失设计上通过ohem+ce loss和smooth l1 loss。ssd因为用了ohem,因此也没有正负样本采用的操作。

    train_cfg=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.5,neg_iou_thr=0.5,min_pos_iou=0.,ignore_iof_thr=-1,gt_max_assign_all=False),smoothl1_beta=1.,allowed_border=-1,pos_weight=-1,neg_pos_ratio=3,debug=False),

6.fcos

首先是正负样本的分配,fcos的原版本中是落在gt框内即为正样本,在gt框外即为负样本,这种做法显而易见是不友好的,因为标注本身就含有大量噪声,如果gt全部区域都是正样本,那么在gt的边缘区域作为正样本预测是很难获得好结果的,在文本检测领域,都会采用shrink获取正样本区域,因此后面又提出了center_sample_radius,用于确定在半径范围内的样本都属于正样本区域,其余区域作为负样本,没有忽略样本,在预测是,根据回归分支输出的点到gt四边的距离的最大值来确定其预测的fpn层。

在loss设计上分类分支用了focal loss,回归用iou loss,centerness用ce.

7.centernet

centernet是gt中心落在哪个位置,那个位置就是正样本,其余位置都是负样本,对于centernet,其正负样本定义非常简单,可以看出会造成极其严重的正负样本不平衡问题,然后也无法像two-stage算法一样设计正负样本采样策略,那么平衡问题就必须要在loss上面解决。 对于offset和宽高预测分支,其只对正样本位置进行监督,故核心设计就在平衡分类上面。 对于分类平衡loss,首选肯定是focal loss了,但是还不够,focal loss的核心是压制大量易学习样本的权重,但是由于我们没有设置忽略区域,在正样本附近的样本,实际上非常靠近正样本,如果强行设置为0背景来学习,那其实相当于难负样本,focal loss会突出学这部分区域,导致loss难以下降、不稳定,同时也是没有必要的,因为我们的label虽然是0或者1的,但是在前向后处理时候是当做高斯热图(0~1之间呈现2d高斯分布特点)来处理的,我们学到最后的输出只要满足gt bbox中心值比附近区域大就行,不一定要学习出0或者1的图。基于上述设定,在不修改分类分支label的情况下,在使用focal loss的情况下,作者的做法是对正样本附近增加惩罚,基于2d高斯分布来降低这部分权重,相当于起到了类似于忽略区域的作用。还有个问题,centernet中对中心点的预测是很重要的,因为wh是依赖于中心点,wh和offset的监督仅仅在gt中心位置,回归的性能好不好,就看分类分支学的怎么样,中心定位不准,宽高也会不准。

8.atss

atss明确提出正负样本的定义和分配是影响目标检测的核心因素,atss是有anchor的,只不过它的anchor本身可以参与计算,也可以不参与计算loss。我们以mmdet中的atss的backbone以retinanet为例,其anchor是参与loss的,不过atss不需要MaxIoUAssigner这一套正负样本定义,其不需要iou阈值和fcos中的分层fpn范围定义,几乎是自适应的正负样本分配,atss中也像fcos一样,每个像素就是一个anchor,不过此像素点乘了个scale,然后在每一层上根据距离像素点距离选择了k个anchor,然后计算这k个anchor的iou均值和标准差,在这个之和上的为正样本,之和下的为负样本。

9.spad:soft anchor-point object detection

10.guided anchoring

11.yolo-asff

目标检测正负样本区分和平衡策略总结相关推荐

  1. yolo 负样本_目标检测正负样本区分策略和平衡策略总结(二)

    0 简介 本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为正负样本定义.正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的he ...

  2. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized

    正负样本不均衡问题一直是One-stage目标检测中被大家所诟病的地方,He Keming等人提出了Focal Loss来解决这个问题.而AAAI2019上的一篇论文<Gradient Harm ...

  3. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized,focal loss

    先转一波,后面看 https://blog.csdn.net/watermelon1123/article/details/89362220

  4. 堪比Focal Loss!解决目标检测中样本不平衡的无采样方法

    训练目标检测模型的一个难点是样本不均衡,特别是正负样本比例严重失衡.目前解决这类问题主要是两种方案(见综述Imbalance Problems in Object Detection: A Revie ...

  5. 目标检测之样本不平衡问题

    样本不平衡问题感觉近期研究的论文相对较多,如:2019 AAAI GHM,2019 CVPR AP-loss, 还有2019 DR loss, 2019 IoU-balanced loss,two-s ...

  6. 总结论文中正负样本的选择

    对正负样本的选择 1.ssd:设置一个阈值(0.5),大于这个阈值的框为正样本,其它框作为负样本鉴定为背景.但是负样本还是远大于正样本,因此采用了难样本挖掘.难样本挖掘的具体操作是计算出所以负样本的损 ...

  7. 【目标检测】YOLO系列Anchor标签分配、边框回归(坐标预测)方式、LOSS计算方式

    1.YOLOv1 标签分配:GT的中心落在哪个grid,那个grid对应的两个bbox中与GT的IOU最大的bbox为正样本,其余为负样本,(由于是回归模型,不是分类模型,其解决类别不平衡的方式为各项 ...

  8. 深度学习之小目标检测

    深度学习之小目标检测深度学习之小目标检测深度学习之小目标检测 百度网盘 提取码:1234 1.<小目标检测技术研究综述_梁鸿> 小目标检测是针对图像中像素占比少的目标,借助计算机视觉在图像 ...

  9. yolo 负样本_SSD——样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016)...

    SSD--样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016) 发布时间:2018-11-23 20:57, 浏览次数:1399 , 标签: SSD one ...

  10. 目标检测误检与负样本问题

    在做目标检测算法模型的时候,有时候会遇到模型预测,效果不好,或者误识别的情况(明明人眼都能识别出来的东西, 模型却识别错误,像狗识别成猫都好理解,但会遇到一个衣服会识别成猫的),出现这些误检问题分几种 ...

最新文章

  1. String、StringBuffer、与StringBuilder的区别
  2. asp.net的dropDownlist只显示第一个字
  3. 2 宽度优先爬虫和带偏好的爬虫(4)
  4. Bootstrap组件_路径导航,标签,徽章
  5. 联想tab.android 8,安卓平板顶级对决 联想TAB S8-50 PK 小米平板
  6. Database2Sharp之混合型Winform框架代码生成
  7. JSON Server在快速开发过程中的使用
  8. Android开发学习之卡片式布局的简单实现
  9. 试读《JavaScript语言精粹(修订版)》
  10. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里
  11. c4d安装oc后打开计算机丢失,c4d+oc的安装及使用的全过程
  12. 苹果屏蔽更新描述文件_iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉...
  13. 2021福建省地区高考成绩排名查询,福建省高考录取分数线2021
  14. 53.大数据之旅——java分布式项目14-信息检索技术之Lucene,Solr
  15. 实时网速监测app_实时网速app下载-实时网速下载1.0.0安卓版-西西软件下载
  16. Hexo博客配置笔记
  17. java 为什么要get,set方法
  18. NUS-WIDE-10K数据集制作
  19. arduino 土壤温湿度传感器_【教程】教你玩转Stduino之土壤湿度传感器模块
  20. 【测试工具】-性能测试-GT学习笔记

热门文章

  1. SharePoint - 如何查询SharePoint ID?
  2. 用.NET设计一个假装黑客的屏幕保护程序
  3. 第13节 IIS之WEB服务器—用于发布网站
  4. 阿里专家问答丨人工智能/机器学习技术在电商场景下的应用
  5. 快速非支配排序算法流程
  6. AI助力智能安检,基于目标检测模型实现X光安检图像智能检测分析
  7. On the eighth day
  8. 将7z分卷合并成一个7z文件,然后就可以使用7z或rar软件等打开
  9. Linux -- 代理服务器(Squid Server)的配置与应用2
  10. moss列表 查看字段长度