张士峰大佬近期发了一篇论文解读Anchor-base和Anchor-free方法间的差别,其本质在于正负样本的选取方式不同。

论文:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》

链接:https://arxiv.org/abs/1912.02424

知乎解读(作者本人出没):https://www.zhihu.com/question/359595879

Anchor-base和Center-base的区别?

有读过FCOS的朋友还记得, FCOS是先判定正负样本的中心点,然后以中心点来回归boundingbox的:

其实这种方式和RetinaNet这种anchor-base的方法本质上大同小异,只不过一个是在Anchor的基础上做回归,另一个把Anchor换成了中心点而已。文章中首先探究了FCOS相比RetinaNet有一些improvements,包括:

  • GroupNorm
  • GIoU
  • GT Box
  • Centerness
  • Scalar

把这些improvements用在RetinaNet上:

也能够使RetinaNet从AP32.5提升到37,这样二者之间的gap只有0.8了,而这0.8的gap可能来自于两点:

  1. Classification的方式不同,即正负样本的选取方式不同
  2. Regression的方式不同,一个基于anchor,一个基于point

作者通过试验证明了,anchor-base和anchor-free的gap主要来自于第一点:classification,及核心区别在于二者正负样本的选取方式不同。具体有什么样的不同,如下图:

第一行是RetinaNet,第二行是FCOS。

对于RetinaNet,其回归的基点是anchor,首先要判定哪些anchor是正样本,哪些anchor是负样本,然后在正样本anchor的基础上再做位置的回归。而判定anchor是否是正样本,是通过计算anchor和groundtruth的IoU来完成的,这样做的缺陷很明显,anchor是正样本还是负样本非常受限于anchor的设计,比如第一行RetinaNet中可以看到,蓝色的groundtruth包含了6个anchors,但是受限于anchor的大小,他们的IoU没有达到阈值要求,因此这些anchor都被判定成了负样本,显然这样是不太合理的。

而对于FCOS,作为center-base的方式,是通过判定feature上的每个点是否落入到groundtruth中来判定正负样本的,很显然这样就摆脱了类似于anchor这种受限于hard-craft的缺陷, 这也是FCOS效果优于RetinaNet的原因:基于center的方式,能够更有效的选取更多的正样本(不过其实这个点在FCOS的论文中也有提到过)。

一种“自适应”的训练样本选取方式ATSS

既然我们已经知道,Center-base和Anchor-base的区别在于正负样本的选取上,那怎样去弥补这种缺陷呢?作者提出了一种Anchor-base的基础上,自适应选取正负样本的方式,ATSS。

ATSS的伪代码:

流程大概是:

  1. 对于每个groundtruth,计算每个anchor到groundtruth的L2 distance,保留距离较近的anchor作为备选正样本anchor集合
  2. 对于备选正样本anchor 中的每个anchor, 计算和其对应groudtruth的IoU ,然后计算的均值和标准差
  3. 选取作为IoU的阈值,只有中与groundtruth IoU大于阈值的anchor被选为正样本anchor
  4. 保持正负anchor的总数一定

作者还证明了算法对于ATSS中anchor的大小这个超参数设计不敏感,达到了自适应。

几点思考

  1. 在本博客开头的链接里面很多大佬都对这篇论文发表了看法,ATSS仍旧有硬伤,本质上仍旧有设计上的超参数存在,hard-craft的痕迹很重,实际上我也觉得离"adaptive"这个目标还有一定距离。
  2. 文章的实验和分析还是很清晰的,读完这篇文章我们应该能体会到,anchor的这种方式本质上还是存在着label-assign的问题,能解决这个问题,也许能使得performance显著的提升。

Bridging the Gap Between Anchor-based and Anchor-free Detection相关推荐

  1. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生

    前言 我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anc ...

  2. Anchor Based和Anchor Free

    Anchor Based和Anchor Free之间区别主要有以下两点:1.分类差异(关键正负样本定义)2.回归差异 1.分类差异: 现阶段的算法多尺度预测,即GT是由哪一个特征层和位置Anchor预 ...

  3. 【AI面试】Anchor based 、 Anchor free 和 no anchor 的辨析

    深度学习的目标检测算法,通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整(回归)区域边界,从而更准确地预测目标的真实边界框(ground-truth boundin ...

  4. GHM(anchor based)

    https://blog.csdn.net/qq_21949357/article/details/102699367 目标检测论文阅读:GHM(anchor based) 论文链接:https:// ...

  5. 目标检测论文阅读:GHM(anchor based)

    目标检测论文阅读:GHM(anchor based) 论文链接:https://arxiv.org/abs/1811.05181 代码链接:https://github.com/libuyu/GHM_ ...

  6. 论文阅读 [TPAMI-2022] Grid Anchor Based Image Cropping: A New Benchmark and An Efficient Model

    论文阅读 [TPAMI-2022] Grid Anchor Based Image Cropping: A New Benchmark and An Efficient Model 论文搜索(stud ...

  7. Fast Fuzzy Clustering Based on Anchor Graph

    Fast Fuzzy Clustering Based on Anchor Graph 基于锚图的快速模糊聚类 FFCAG 模糊聚类十分流行: 大规模问题复杂度高,限制发挥 对噪声敏感 FFCAG算法 ...

  8. 【翻译】Bridging the Gap Between Anchor-based and Anchor-free Detection

    [翻译与个人理解]Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sampl ...

  9. 转载系列【检测】| CVPR2020:Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Trai

    目标检测论文阅读:Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sampl ...

最新文章

  1. VS中的 MD/MT设置
  2. 《编写高质量代码:改善C#程序的157个建议》勘误表
  3. 烂泥:CentOS命令学习之scp复制
  4. vlookup 公式使用及常见问题
  5. composer 完整路径才能访问_Docker 漏洞:允许攻击者获得主机 root 访问权限
  6. C/C++[codeup 1967]数组逆置
  7. 海康摄像头近距离不能对焦模糊问题
  8. 关于电感开始饱和,开关过应力时开关的电流曲线的解释// 《精通开关电源设计》P53 图2-7
  9. html页面小宠物代码大全,宠物店网页设计html代码
  10. 利用机器学习方法确定各个特征的权重
  11. 微信小程序泛滥的今天,你知道如何测试吗?
  12. bootstrap进度条媒体对象和Well组件
  13. 【智力题】小环绕大环
  14. EIE稀疏矩阵乘法硬件模拟
  15. 问卷调查+需求分析(部分)
  16. Robotics: Aerial Robotics(空中机器人)笔记(二):如何设计一架四旋翼无人机
  17. 鸿蒙王者荣耀评测,王者荣耀评测_妹纸玩家上手必坑英雄盘点 李白韩信榜首有名|攻略...
  18. 芯片破壁者(二):半导体“硅”铺就的文明阶梯
  19. STM32单片机上电不自动复位,需要手动复位才正常工作解决办法
  20. arduino接收数据

热门文章

  1. Redis【10】-Redis发布订阅
  2. Win10快捷键,管多
  3. 2020新版软件自动化测试自学全套教程——中级程序员学习路线
  4. 如何训练好一个神经网络?
  5. 美团小哥用计算机,美团2020算法工程师编程题--外卖小哥的保温箱
  6. “一键”控制 STM32 的 NRST 和 BOOT0
  7. 使用GetPixel要注意
  8. 如何查找专用 IP 地址?
  9. js是滚动条滑到固定位置_JavaScript 滚动条定位指定位置
  10. USB billboard