nanodet阅读:(2)正负样本定义(ATSS)

一、 前言

本篇博客主要是ATSS部分,这部分个人认为是核心之一,毕竟正负样本的选择很重要,ATSS论文证实,anchor-basedanchor-free性能差异的根本原因在于正负样本的定义,好的正负样本定义方法能在很大程度上降低模型对Anchor Num, Anchor Size的依赖。这点在yolo v5上也得到了证实——“正确的正负样本定义方式能引入更多的高质量正样本,加快拟合 并 提高模型性能”。
首先推荐一个写的很好的 ATSS博客,看完它再看代码会清晰许多。以及我写的ATSS部分代码注释

二、 正文

根据代码总结的ATSS流程如下:

  1. 遍历每个ground truth,遍历每个输出层,找出每层前topk(超参,nanodet中是9)个L2距离(anchorgt box中心点距离)最小的anchornanodet一共3层输出层,则每个gt会匹配到27个候选anchor,输出数组shape=(27, gt_num)。这些anchor里可能会有重复,但是没关系,下面还有筛选措施;
  2. 计算每个gt和与之对应的27anchorIOU值,shape=(27, gt_num)(注意是与anchor左上右下的坐标做iou,不是和bbox,现在是给anchor做正负样本分类,还没到bbox呢);
  3. 按列计算每个gt对应的27IOU值的均值mean_IOU和标准差std_IOU,两者相加得到每个gt的自适应阈值,shape = (gt_num, );
  4. 从每个gt27anchor中筛选出IOU大于对应自适应阈值的anchor
  5. 再计算每个anchor中心到其对应gt四条边界线的距离,取四个距离中的最小值,过滤掉最小值小于0.01anchor,剩下的就是挑选出的正样本;
  6. 到这步时,可能有些anchor同时匹配了多个gt,此时需选出IOU值最大的那个gt作为匹配对象。即一个anchor只能匹配到一个gt,但是一个gt可以同时被多个anchcor匹配。

从上面流程来看,一个anchor要成为一个正样本,需要满足三个条件:
① 其中心要与任何一个gt中心的距离要排在前topk内(升序);
② 其与gtiou值要大于对应的iou阈值;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值