2019 年 4 月放到 arxiv 上的(似乎投的是 ICCV2019,没有中?)然后又投了 ICLR2020,没有中,在 这里 可以看到 ICLR 的公开审稿意见,这篇笔记也是关于 ICLR2020 版本的(应该相差不大)。

这也是一篇 anchor-free 的文章,FoveaBox 不用 anchor,直接学类别和回归坐标。通过以下两点来实现:

  1. 对于存在物体的概率预测类别敏感的语义图
  2. 对于每一个位置生成与类别无关的 bbox

目标检测需要解决两个任务:识别和定位。给定一张图片,需要确定图片中是否含有给定类别范围的物体,如果有,还要返回物体的坐标。在之前,定位主要依靠滑动窗口法(sliding window)

深度学习可以自动从数据中学到特征表示,从 Faster RCNN 开始,两阶段的检测器通常使用 anchor-based RPN(region proposal network)来提取局部特征。简而言之,anchor 的目的在于将图片分成离散的盒子,然后在各自盒子中完成对 bbox 的精细调整。anchor 可以看成特征共享的滑动窗口法,其目的仍然是尽可能地去覆盖目标所有可能出现地位置。

但是,anchor 必须精心设计:

  1. anchor 覆盖的密集程度需要精心设计,为了达到尽可能高的召回,需要用到数据集的统计信息
  2. 对于一个数据集的设计并不总能应用到其他地方,影响泛化能力
  3. 在训练时,anchor-based 需要计算 IoU 来进行正负样本的定义,这一步骤耗时并且引入了超参。(讲道理我觉得 IoU 的计算时间没那么夸张吧)

而与之相对,我们人眼并不需要预先定义的形状模板就可以识别并完成定位。也就是说,人类根本不需要枚举候选框,所以很自然地想到 anchor 也许并不是必要的。

FoveaBox 的动机来源于人眼的 fovea:视觉域的中心有着最强烈的视觉敏锐度。


整体的结构我感觉和 FCOS 很像,也是基于 FPN,然后 detection head 由两个子网络构成:分类和定位


核心部分:

  • 物体出现概率(Object Occurrence Possibility)

ground truth 定义为 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1​,y1​,x2​,y2​) 分别表示左上角和右下角的坐标,首先将其映射到目标 feature level P l P_l Pl​ 上:


s l s_l sl​ 为 feature level 的 stride (FoveaBox 用的 FPN 的尺度为 8, 16, 32, 64, 128), ( c x , c y ) (c_x,c_y) (cx​,cy​) 为中心点的坐标,然后定义正样本区域 R p o s R^{pos} Rpos:


其中 σ \sigma σ 是缩减因子,所以正样本区域就是 gt 映射到 feature level 之后形成框框的中间区域;而负样本区域就是剩下所有的区域。预测时每个 feature level 出来的 subnet 维度为 C × H × W C\times H\times W C×H×W 其中 C C C 是种类数, H , W H,W H,W 是 feature map 的大小,每个 channel 表示该类别的概率。由于正样本区域相较于整个区域较小,因此使用了 Focal Loss。

  • 尺度分配 (Scale Assignment)

目标是预测每个物体的坐标,但是直接回归是不稳定的,因为有的很大,有的很小。因此定义一系列的尺度范围,每个 feature level 都对应一个范围,每个 feature level 有一个基准 scale r l r_l rl​ ,这个范围计算为:

[ r l η , η ⋅ r l ] [\frac{r_l}{\eta},\eta\cdot r_l] [ηrl​​,η⋅rl​]

η \eta η 是用来控制范围的, r l r_l rl​ 对于 FPN 出来的 5 个 feature level 的取值为 32,64,128,256,512。

  • bbox 预测

每个 gt 是 G = ( x 1 , y 1 , x 2 , y 2 ) G=(x_1,y_1,x_2,y_2) G=(x1​,y1​,x2​,y2​) ,从 R p o s R^{pos} Rpos 中的一个正样本点 ( x , y ) (x,y) (x,y) 出发,FoveaBox 直接计算 ( x , y ) (x,y) (x,y) 和 四个边界之间的归一化的偏移:


即首先将 ( x , y ) (x,y) (x,y) 映射回原图,然后计算归一化之后的偏移。

使用 Smooth L1 loss 进行计算。在 box subnet 中,每层 feature level 由 4 个 channel,分别回归 ( t x 1 , t y 1 , t x 2 , t y 2 ) (t_{x_1},t_{y_1},t_{x_2},t_{y_2}) (tx1​​,ty1​​,tx2​​,ty2​​)

  • 网络结构

  • 实现

很常规,没什么需要很注意的

实验部分

  • 消融实验

不同的 anchor 密度: 通常认为一个位置的 anchor 数量越多,效果越好,但是实验证明,超过 6-9 个时并不会带来更多的提升。


过于密集的 anchor 不仅会增加前景后景的优化难度,还会产生模糊的位置定义问题。每一个位置有 A 个 anchor,他们的分类目标通过其与 gt 之间的 IoU 来确定,同一个位置对应的 anchor 中,可能有些对应的是正样本,有些对应的是负样本,但是他们共享相同的输入特征,因此分类器不单单要分辨来自不同位置的样本,还要分辨来自相同位置的不同 anchor,这进一步加剧了训练难度。

作为对比,FoveaBox 在每个位置明确预测一个目标。和 anchor-based 相比,有以下好处:

  1. 输出空间降为了原来的 1/A
  2. 没有模糊的位置定义问题,优化目标也更加直接
  3. FoveaBox 有更少的参数,更加灵活

FoveaBox 对于框的分布更加鲁棒: 将 box 根据不同的长宽比进行分类查看效果,发现 FoveaBox 的效果更加鲁棒


生成高质量的 region proposals: 将分类目标改成类别无关的头是很直接的,并且可以生成 region proposal,FoveaBox 的效果更好。

IoU-based assignment vs. fovea area: 正负样本的定义不同造成的影响:


更好的检测头+特征对齐: RefineDet 和 RepPoints 都建议进行 feature alignment,所以论文中也用 deformable convolution 搞了一把,效果很好。


总体对比:


这个 feature alignment 的操作还是很有意思的,可以涨一个点。


简单总结:看完 FCOS 后再看这篇,就会发现两者的思想惊人的一致。而 FCOS 后来的 center sampling 的改进其实本质就是 FoveaBox 里面这种选取正样本的操作。

再看看 ICLR 的 review 意见吧,reject 的原因主要还是性能不足,我主观来看确实同期的 FCOS 做的更好一些(FCOS 还有一个 centerness 的分支),但是其实在 FCOS 没有加 center sampling 等一系列的改进之前,效果其实应该是差不多的(R50-FPN 大概在 37.1)

摘一些比较有启发性的 review:

The scale is still discretized. So that is essentially anchors in the scale space. I wonder how could the approach applies to scale to?

FoveaBox 笔记相关推荐

  1. FoveaBox:目标检测新纪元,无Anchor时代来临 | 技术头条

    作者 | CV君 转载自我爱计算机视觉(ID:aicvml) 目标检测的任务是"分类"并从图像中"定位"出物体,但长久以来,该领域的工作大多是这样:生成可能包含 ...

  2. 2019 sample-free(样本不平衡)目标检测论文阅读笔记

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自知乎,已获作者同意转载,请勿二次转载 (原文地址:https://zhuanlan.zhihu.com/p/100052168) 背景 < ...

  3. 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:本文授权转自知乎作者跑者小越,https://zhuanla ...

  4. PicoDet的学习笔记

    学习资源 Paddle官方教程: <AI快车道PaddleDetection – 课节4: 闪电版目标检测算法PP-PicoDet> PicoDet论文: PP-PicoDet: A Be ...

  5. 从基础综述、论文笔记到工程经验、训练技巧:值得一看的目标检测好文推荐...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转自知乎作者跑者小越,https://zhuanlan.z ...

  6. 论文阅读笔记 | 目标检测算法——SAPD算法

    如有错误,恳请指出. 文章目录 1. Introduction 2. Soft Anchor-Point Detector 2.1 Detection Formulation with Anchor ...

  7. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  8. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  9. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

最新文章

  1. 从 C++ 到 Objective-C
  2. Linux内存管理 (26)内存相关工具
  3. 第一个android程序HelloWorld
  4. 美国通过热像无人机找到失踪老人
  5. mysql注入写一句话_Mysql注入root权限直接写一句话马
  6. Java多线程之实现多线程的三种方法
  7. js 正则 显示千分号 支持整数和小数
  8. Java PushbackInputStream markSupported()方法与示例
  9. 服务器测试网址填写注意事项
  10. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记
  11. 区块链共识问题都有什么?
  12. 五线谱音名和组别对照表_五线谱最全知识及符号!
  13. 帝国CMS7.5仿千图网图片素材下载模板升级版
  14. 【运维面试】面试官:你觉得网站访问慢的原因有哪些?
  15. 【MySQL】函数提取字符串中的数字
  16. 基于融合的低照度图像增强
  17. SpringMVC入门上机实验,基于SpringMVC数据绑定的学生成绩信息管理
  18. Mysql 脚本创建触发器报错 1064 42000
  19. Python基础知识:3、操作列表
  20. java通用软件下载网址_一些常用软件下载网址(分享)

热门文章

  1. Hadoop中的FileInputFormat切片机制、FileInputFormat切片大小的参数配置、TextInputFormat、CombineTextInputFormat切片机制
  2. 简单onclick事件
  3. 【手写数字识别】基于matlab GUI BP神经网络单个或连续手写数字识别系统【含Matlab源码 2296期】
  4. C#自定义用户控件之分页
  5. 编辑任务EditorTask控件为什么不能使用
  6. Finger.03 - ESP8266与MQTT服务器通信
  7. 用python爬取图片(四)
  8. C语言复制文本文件(功能)
  9. 银行卡号验证js(银行卡号Luhm校验)
  10. 程序员专访:钱就是命!“小镇做题家”的成长与救赎