【目标检测】Anchor Free —— OneNet(不需要NMS)


开始之前学习一个单词热热身:

canonical 英[kəˈnɒnɪkl]
adj. 被收入真经篇目的; 经典的;
Some of the paintings were canonical, included in art-history books.
有些画是经典的,收录在艺术史书中。


0 写在前面

      OneNet: End-to-End One-Stage Object Detection by Classification Cost.

      OneNet是一个不需要NMS后处理的网络。与其说是这是一个创新的目标检测网络,不如说其是改变了目标检测过程中对于正样本的判定问题。(论文中表述为" label assignment ",我就用"判定"这个词代替吧)。这篇论文最大创新点是改变了以往One-Stage方法中,对于某个anchor是否为正样本的判定方法(Anchor-Based)或是特征图上某个网格点是否是正样本(Anchor-Free)的判定方法;使得在训练过程中,每个真实框都仅有一个正样本所对应;在 Inference 阶段,预测出的每一个物体即可认为是图片中的不同物体,不会出现以往One-Stage方法预测结果出现一个物体对应很多Score很高的预测框进而需要NMS来抑制冗余的预测框。

      回顾一下One-Stage方法判定 候选框/候选网格点 是否为正样本的方法:

  • 对于 Anchor-Based 方法,若anchor与真实框的IoU大于某个阈值,则被认为是正样本;
  • 对于Anchor-Free方法,CornerNet和CenterNet仅仅是将真实框中心点对应的特征图上的某个网格为正样本,而FCOS是在真实框对应到特征图上的区域内所有网格点为正样本,可以看到其被判定是否为正样本仅仅与其真实框的位置有关。

在这里回顾下YOLO中是如何定义正负样本的:

  • 正样本的选择:
    首先计算目标中心点落在哪个grid上,然后计算这个grid的9个anchor 和目标真实位置的IoU值(直接计算,不考虑二者的中心位置),取IoU值最大的anchor和目标匹配。于是,找到的 该grid中的 该anchor 负责预测这个目标,其余的网格、anchor都不负责;
  • 负样本的选择:
    计算所有的anchor和所有的真实框之间的IoU,如果某 anchor 和图像中所有物体最大的IoU都小于阈值(一般0.5),那么就认为该先验框不含目标,记作负样本;
  • 不参与计算部分
    这部分虽然不负责预测对象,但IoU较大,可以认为包含了目标的一部分,不可简单当作负样本,所以这部分不参与误差计算。
    综上,如下图所示:
    在这里插入图片描述

      所以对于每个定义的正样本,在训练时计算正样本的边界框回归损失;在预测时,根据网络模型预测出的分类Score来执行NMS用以筛取冗余的预测框。(正样本有很多,分类Score最高的正样本附近肯定有一些正样本的分类Score也不会低,NMS正是要去掉这些不是最高但还很高的冗余检测框)


1 Introduction

     论文中提到 " The detection performance is largely sensitive to sizes, aspect ratios, and the number of anchor boxes. "

     是这样的,所以在YOLO/RetinaNet中,针对于不同数据集的大小分布,可以适当的选取(保留或去掉)不同尺度的预测层,以及修改anchor的个数来 “设计” 符合特定任务的网络模型。

     作者提到:"We discover that the lack of classification cost between sample and ground-truth in label assignment is the main obstacle for a one-stage detector to remove NMS and reach end-to-end. "

     正如开头提到的,解决了多个正样本对应一个真实物体的情况,即实现仅仅判定出一个正样本对应一个真实物体,而其他样本均为负样本的方案,即可去掉NMS后处理。同时避免判定正样本仅仅与真实框的位置有关,作者也把真实框的类别标签作为判定正样本的部分依据。

     " However, if trained with only location cost, the classification branch is forced to output the approximate solution; that is, one object has multiple predictions. "


2 Label Assignment

     之前提到,label assignment 是正负样本的判定问题。作者是怎么解决以往的 仅根据真实框的位置来判定正负样本 的问题,进而加入真实框的类别标签作为判定正样本的部分依据的呢?

在这里插入图片描述

     首先OneNet仍是借鉴FCOS的检测方法,即对预测特征图上的每个网格来判定是正样本还是负样本。如上图,在 cls 分支预测出每个网格点是某类物体的Score,在reg分支预测每个网格点对于物体边界框的上下左右距离。作者通过计算以下公式并选取结果最小值对应的那个网格点,即为正样本:

在这里插入图片描述
     其中λcls、λL1、λgiou是超参数(论文中实验取λcls=2、λL1=5、λgiou=2),Ccls是预测类别与真实类别间的Focal Loss,CL1和Cgiou是预测框和真实框间的归一化中心坐标和宽高。

     也就是说,这里是通过计算出来的cost值的大小来判定正负样本的,最小的cost值对应的网格点即为正样本,其余均为负样本。对于图片中的每个真实框,计算出对应的最小cost值来选取每个真实框所对应的唯一正样本。

3 实施细节

     输入图片(H×W×3),backbone产生feature map(H/4×W/4×C),head预测分类(H/4×W/4×K,K为类别数)和边框回归(H/4×W/4×4),最后的输出直接取top-k(e.g., 100)得分框。

      在训练过程中,OneNet网络的损失函数同样采用上述公式,即Focal Loss、L1 Loss和GIOU Loss。
      在Inference阶段,直接选取top-k(e.g., 100)得分框(个人认为k不也是一个超参数吗???即表示一张图片中预测出k个物体)


4 最后的最后

      其实我对该网络是有一些怀疑的,与CenterNet相同,这两个网络没有采用NMS后处理,但是都在 Inference 阶段通过选取阈值的方式来获得最终的结果,比如OneNet直接选取top-k(e.g., 100)得分框最为输出结果,而这个k表示一张图片中有个物体;
     同样的,对于CenterNet,在预测阶段,通过将特征图中的每个类的峰值点单独地提取出来。具体怎么提取呢?就是检测当前热点的值是该点的八领域中最大的点,然后一共取100个这样的点,采用的方式是一个3x3的MaxPool,类似于anchor-based检测中NMS的效果。
     根据模型预测出来的 heatmap中的值,也就是当前中心点存在物体的概率值,代码中设置的阈值为0.3,也就是从上面选出的100个结果中筛选出大于该阈值的中心点作为最终的预测结果。

     下图分别对应取top=100的检测结果、阈值筛选后的最终图。
在这里插入图片描述
在这里插入图片描述
     那么CenterNet中的阈值 0.3 以及 OneNet中的超参数 top-k 中的 k又是如何选取的呢,应该也是要根据经验来选择的吧。😟😰


欢迎关注【OAOA

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值