Contents

  • 0 写在前面
  • 1 Introduction
  • 2 Label Assignment
  • 3 实施细节
  • 4 最后的最后

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

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又是如何选取的呢,应该也是要根据经验来选择的吧。

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

  1. 目标检测(后处理):从 NMS 到 Soft-NMS 到 Softer NMS

    目标检测(后处理):从 NMS 到 Soft-NMS 到 Softer NMS 1.NMS 2.Soft-NMS 3.Softer-NMS 4.总结 1.NMS 非最大抑制(NMS)主要用于基于深度学 ...

  2. 目标检测Anchor的What/Where/When/Why/How

    编译|yanwan,https://zhuanlan.zhihu.com/p/150332784 来源|https://www.wovenware.com/blog/2020/06/anchor-bo ...

  3. 科普:目标检测Anchor是什么?怎么科学设置?[附代码]

    文章来源于AIZOO,作者元峰 在基于anchor的目标检测网络(Faster RCNN.SSD.YOLO v2&v3等)中,一个至关重要的步骤就是科学的设置anchor,可以说,Anchor ...

  4. 目标检测的Tricks | 【Trick9】nms非极大值抑制处理(包括变体merge-nms、and-nms、soft-nms、diou-nms等介绍)

    如有错误,恳请指出. 用这篇博客记录一下nms,也就是非极大值抑制处理,算是目标检测后处理的一个难点. 在训练阶段是不需要nms处理的,只有在验证或者是测试阶段才需要将预测结果进行非极大值抑制处理,来 ...

  5. 五问目标检测Anchor

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎  作者 | yanwan 链接 | https:/ ...

  6. 【目标检测系列】非极大值抑制(NMS)的各类变体汇总

    关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! [导读]前面已经先后为大家详细介绍过了目标检测领域的基础知识:[目标检测基础积累] ...

  7. 目标检测_目标检测 | Anchor free的目标检测进阶版本

    今天说的是<Soft Anchor-Point Object Detection>,其也是最近关于anchor free的目标检测的论文,作者来自于CMU,一作同样也是FSAF(2019 ...

  8. 目标检测 --- Anchor的生成

    1.Faster rcnn 1.1.概述 anchor本身的设置是基于各层输出分辨率上的各点,由各点回归出anchor的偏移量,预测anchor的类别:故anchor的布局需要和各层输出分辨率对应. ...

  9. 目标检测 | Anchor free之CenterNet深度解析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 1 前言 本文接着上一讲对CornerNet的网络结构和损失函数的 ...

  10. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾

    前段时间,YOLOv4&v5大火,很多人忽视了yolov5在anchor上的一些细节变化,因此,本文从Faster RCNN着手,逐步分析SSD.YOLOv4&v5的anchor机制. ...

最新文章

  1. 如何获取浏览器的DNS解析时间
  2. 服务器不能显示中文,彻底解决delphi WebBroker服务器中文乱码 delphi WebBroker服务器不能显示中文网页 WebBroker中文显示乱码...
  3. IOS开发基础之OC的Block入门_Day09-Block
  4. 【NLP】语言模型和迁移学习
  5. 可转债的投资价值算法
  6. python:使用sklearn 计算 precision、recall、F1 score(多分类)
  7. pycharm 代码跳转
  8. pgadmin3连接mysql_启动PostgreSQL服务器 并用pgAdmin连接操作
  9. TAOCP-Reading-计算机程序设计艺术阅读-1-0
  10. ydui的datetime日期选择组件
  11. Spring(三) 表单页面处理
  12. JAVA内存泄漏原因和检测工具
  13. centos7通过startx后进入图形界面,使用eog命令提示unable to open display
  14. 高数_第3章重积分_三重积分的奇偶性
  15. WeChatDeveloper
  16. 华清见远 pcie网卡驱动_使用PCIe交换网结构在多主机系统中优化资源部署
  17. java 中国地图_高级UI-svg实现可交互的中国地图
  18. 专杀工具编写思路(转)
  19. 求任意凸多边形的面积(计算几何)
  20. 如何将nginx安装到Windows服务

热门文章

  1. 数据库日常之修改MySQL数据库密码的方法
  2. 利用浏览器缓存抓取网络资源:【炉石传说】所有卡牌png图片地址
  3. java常见的命名规则
  4. 聊一聊ResNet系列(ResNet、ResNeXt)
  5. 瞧,他的代码,他的内裤
  6. 时延、时间带宽积、RTT、利用率
  7. c语言 数字翻译成英文,100数字翻译成英语?
  8. Java IO 之BIO讲解
  9. 2019年第十届蓝桥杯C/C++ 省赛B组真题+题解
  10. 安卓学习 Day18:利用单选按钮实现底部导航条