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. [数据结构] 迷宫问题(栈和队列,深搜和广搜)
  2. 第十七届智能车竞赛英飞凌专题培训 ——英飞凌无刷电机驱动专题
  3. 034:DTL常用过滤器(3)
  4. 按需路由选择(ODR)原理及实验
  5. mysql日期加减计算
  6. 案例:用户登录(html--servlet--mysql)
  7. 为什么很多人上班好好的,却选择去创业?
  8. null和空的区别 oracle,Oracle中NULL与空字符串''的区别的总结
  9. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)
  10. 创业经验点滴 五(转) 关于淘宝
  11. GAMBIT、ICEM、HYPERMESH耦合面的处理方法
  12. 整合ecshop与discuz论坛
  13. SAP SLT数据同步配置
  14. gis等高线注记掩膜
  15. python代码实现, SIR 模型进行信息传播模拟
  16. 论文修改建议 (JiangXY 20211108 突出自己的优势指标)
  17. 智能音箱音效哪个好_2018最火4款智能音箱横评:哪款性价比最高?
  18. Python获取中国疫情数据(最新版)
  19. Neo4j图数据库从入门到精通
  20. 搜索引擎系统学习与开发实践总结

热门文章

  1. 如何判断是否适合学编程?
  2. CMake基础教程(18)find_path查找文件路径
  3. git add . 和 git add * 区别
  4. MySQL查看表结构及查看建表语句
  5. docker 创建容器时指定容器ip
  6. Java OpenCV-4.0.0 图像处理11 自定义图像滤波(降噪) 算子
  7. 【深度之眼Python基础+数据科学入门训练营】第八章 文件、异常和模块
  8. vb.net 教程 5-9 屏幕范围内取色
  9. Django分页,过滤:
  10. 如何设置下拉框多选以及设置多选值