【论文】Cascade R-CNN: Delving into High Quality Object Detection
📄:Cascade R-CNN: Delving into High Quality Object Detection
🔗:https://openaccess.thecvf.com/content_cvpr_2018/html/Cai_Cascade_R-CNN_Delving_CVPR_2018_paper.html
💻:https://github.com/zhaoweicai/cascade-rcnn
Cascade R-CNN算法是CVPR2018的文章,通过级联几个检测网络达到不断优化预测结果的目的。与普通级联不同的是,cascade R-CNN的几个检测网络是基于不同IOU阈值确定的正负样本上训练得到的,这是该算法的一大亮点。
问题提出
在目标检测问题中,不同的IoU阈值用于区分正负样本。低阈值(IoU=0.5)会导致引入许多噪音,但如果增加阈值,则正样本数量会指数减少。这会带来两个问题:
- 在训练阶段正样本的过拟合问题
- 带来更严重的mismatch: 在training阶段和inference阶段,bbox回归器的输入分布是不一样的,training阶段的输入proposals质量更高(被采样过,IoU>threshold),inference阶段的输入proposals质量相对较差(没有被采样过,可能包括很多IoU<threshold的)。通常选取IoU阈值=0.5时,mismatch不会很严重。在training阶段,由于知道ground truth,所以可以很自然的把与gt的iou大于threshold(0.5)的Proposals作为正样本,这些正样本参与之后的bbox回归学习。在inference阶段,由于我们不知道gt,所以只能把所有的proposal都当做正样本,让后面的bbox回归器回归坐标。
模型对比
(d)是本文提出的Cascade R-CNN结构。
与(b)不同的是,iterative Box at inference中所有的H都是一样的。 可以用公式
f
′
(
x
,
b
)
=
f
∘
f
∘
.
.
.
∘
f
(
x
,
b
)
f'(x,b) = f \circ f \circ ... \circ f(x,b)
f′(x,b)=f∘f∘...∘f(x,b)表示,其中b是bounding box (
b
=
(
b
x
,
b
y
,
b
w
,
b
h
)
b = (b_x, b_y, b_w, b_h)
b=(bx,by,bw,bh)),每一次Bounding box regression的输出作为下一次的输入。但这会带来两个问题:
- 当IoU的阈值(u)选为0.5时,对于更高的IoU不是最优的选择。每一次迭代会抑制IoU > 0.85的结果。如下图,当u=0.5的时候,当input IoU>0.85时,Output IoU会低于InPut IoU。
- 当每一次经过阈值采样过后,分布会发生变化。如果每次使用同一阈值进行采样迭代是不明智以及次优的。
而(c )的表达式为 L c l s ( h ( x ) , y ) = Σ L c l s ( h u ( x ) , y u ) , L_{cls}(h(x),y) = \Sigma L_{cls}(h_u(x), y_u), Lcls(h(x),y)=ΣLcls(hu(x),yu), 是一个集合模型,使用不同的阈值来优化具有不同quality levels的loss function。但他并没有考虑到在不同阈值下,正样本数量的变化。这会使得学习过程中那些高质量的区间更容易过拟合。
模型提出
本文提出的Cascade Bounding Box Regression具有表达式
f
(
x
,
b
)
=
f
T
∘
f
T
−
1
∘
.
.
.
∘
F
1
(
x
,
b
)
,
f(x,b) = f_T\circ f_{T-1} \circ ... \circ F_1(x, b),
f(x,b)=fT∘fT−1∘...∘F1(x,b), 其中T是stage数量,而每一个
f
t
f_t
ft都依据
b
t
b_t
bt的sample distribution选择了最优的阈值,而不是像iterative Box一样使用同一阈值。
需要优化的损失函数为:
L
(
x
t
,
g
)
=
L
c
l
s
(
h
t
(
x
t
)
,
y
t
)
+
λ
[
y
t
≥
1
]
L
l
o
c
(
f
t
(
x
t
,
b
t
)
,
g
)
L(x^t, g) = L_{cls}(h_t(x^t), y^t) + \lambda[y^t \geq 1]L_{loc}(f_t(x^t, b^t),g)
L(xt,g)=Lcls(ht(xt),yt)+λ[yt≥1]Lloc(ft(xt,bt),g)其中
b
t
=
f
t
−
1
(
x
t
−
1
,
b
t
−
1
)
b^t = f_{t-1}(x^{t-1}, b^{t-1})
bt=ft−1(xt−1,bt−1)(上一次的迭代结果),g为ground truth,
λ
=
1
\lambda = 1
λ=1为trade-off coefficient。
Results
当加入ground truth时(右图),u=0.7时有了明显的提升(相比左图)。这表明:
- u = 0.5 对于精确检验不是一个好的阈值。仅仅是对于低质量的proposal有鲁棒性。
- 高质量的识别需要有高质量的proposal作为支撑。
当使用更精确的假设时,每个检测器都得到了改进,而更高质量的检测器具有更大的增益。 例如,u = 0.7 的检测器对于第一阶段的低质量建议表现不佳,但对于更深级联阶段可用的更精确假设则要好得多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!