其他分享
首页 > 其他分享> > 【目标检测】Anchor Free —— OneNet(不需要NMS)

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

作者:互联网

Contents


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

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方法判定 候选框/候选网格点 是否为正样本的方法:

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

      所以对于每个定义的正样本,在训练时计算正样本的边界框回归损失;在预测时,根据网络模型预测出的分类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又是如何选取的呢,应该也是要根据经验来选择的吧。

标签:真实,OneNet,NMS,样本,网格,Free,判定,anchor
来源: https://blog.csdn.net/qq_43360533/article/details/113530074