1. 论文阅读-FCOS: Fully Convolutional One-Stage Object Detection
认真研究篇1-在20年的几篇cvpr基于这个做出了很精彩的论文
摘要:
- anchor-free proposal-free
- 因为没有anchor-box 所以省去很多不必要的计算
- 易用,没有anchor-box的很多超参,调试简单
- 仅仅使用一个后处理非最大抑制(NMS),在one-stage中表现最优
- hope that the proposed FCOS framework can serve as a simple and strong alternative for many other instance-level tasks. (简单有用很重要)
intro中的几个key points
- anchor-based detectors suffer some drawbacks:a. 超参的调试需要很细心的调试(the sizes-anchor, aspect-ratios, the number of boxs) b. 由于anchor是fixed的,所以面对obj size variations比较大和不能泛化到其他任务(需要重新调参)。 c. 由于anchor boxes大多是负样本,所以在训练anchor的那部分net的时候会出现极大的样本不平衡问题。 d. anchor boxes包含比较复杂的计算。(第一段)
- 重点重点重点:提出问题-- 可以像语义分割一样对探测问题也是以逐像素的问题解决吗?
- 观察发现本文方法会产生很多低质量的距target中心很远的检测框,所以提出了 “center-ness branch” (a layer)去除离中心比较远的框,并融合NMS产生的detection results.
- 前面的已经足够叙述本文的advantages,所以不再重复稳重的总结。
ralated work
- anchor-based Detetors 基本点都是与上面重复的
- anchor-free detectors 三种 a . YOLOv1 输出靠近目标中心的box, 但是只有near center的box,所以suffer了low recall (注:只有near the center的point才被看做可以产生高质量的box),houmianv2的时候就有采用了anchor。b. CornerNet 预测框的左上右下的坐标,但是需要复杂的后处理去group 属于same instance 的坐标。c. DenesBox 应对overlapping bounding boxes效果不好 and recall low。
在下文中找,1. recall low 怎么解决 2. overlapping的问题。3. NMS 4. center-ness 如何使simpler detector达到比较好的效果
Approch
- 以per-pixel 的方式重构目标检测(这句话够)
- 使用multi-level 来提高recall和消除overlapping带来的ambiguity results
- center-ness branch—supress the low-quality detected bounding boxes.
1. fully covolutional one-stage object detector![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a2be85a47a65859cdff2adf1a2f07480.png)
整体框架,每个head(multi-level)都输出对每个feature map的每个位置x,y预测的class(80D)和4D的(l, t, r, b)分3类的sample positive negative,ambiguous。对于4D的target(label)的如下
l
∗
=
x
−
x
0
i
l^* = x-x_0^i
l∗=x−x0i
t
∗
=
y
−
y
0
i
t^* = y-y_0^i
t∗=y−y0i /
r
∗
=
x
1
i
−
x
r^* = x_1^i-x
r∗=x1i−x /
b
∗
=
y
1
i
−
y
b^* = y_1^i-y
b∗=y1i−y
损失函数
是indictor function,背景不计算。
Multi-level Prediction with FPN for FCOS
面对两个问题的解决1. low best possible recall (BPR) ,本来first glance觉得BPR会不好,但是实验证明可以比anchor-based更好。2. 采用multi-level的prediction实验证明解决了ambiguity。
给每个feature level分配不同size的anchor box, 这样不同size的objs被分配到不同的feature level上去(FPN的),这样由于overlapping大多不同size的,ambiguity的程度会被减轻,另外,如果a pixel被分配不止一个gt box那选择较小的那个框作为target。
发现不同的feature level 需要不同的regress different size range,所以本文使用了
e
x
p
(
s
i
x
)
exp(s_ix)
exp(six)
Center-ness
有了multi-level 但是精度仍然不够怎么办
分析原因:由于太多low-quality pre bounding boxes的存在(远离了obj的center)
so 有了center-ness branch test的时候class score要成center-ness的分数,这样就down-weight了far from center的obj
最后呢,再用NMS得到最终的框(我对NMS如何得到final pre不是特别懂,接下来看代码释疑吧)
c
e
n
t
e
r
n
e
s
s
∗
=
m
i
n
(
l
∗
,
r
∗
)
m
a
x
(
l
∗
,
r
∗
)
×
m
i
n
(
t
∗
,
b
∗
)
m
a
x
(
t
∗
,
b
∗
)
centerness^* = \sqrt{\frac{min(l^*, r^*)}{max(l^*, r^*)} \times \frac{min(t^*, b^*)}{max(t^*, b^*)}}
centerness∗=max(l∗,r∗)min(l∗,r∗)×max(t∗,b∗)min(t∗,b∗)
Experiments
- multi-level
- center-ness
- vs anchor-based
NMS
参考就可NMS博文