DetNet
在DetNet提出之前,检测框架的backbone一般都是用分类框架,或在上面稍加改动。分类框架用于检测有以下几个缺点:
1、stage(不同尺度的特征图,用于多尺度检测)少,只能自己加,但没有相应的预训练的权重。
2、downsample丢失信息严重。分类框架只需要预测类别,相比检测容许丢失更多的信息。
detNet在resNet50的基础上作改进。改动部分为con4_x(stage4)之后的内容,即改动了con5_x,同时加了三个残差单元共9个卷积层形成stage6。所以总共59层。
Cascade RCNN
cascade实际上是一种结构,可以添加都任何含有RPN的检测网络中。
下图展示了(a)Faster RCNN (d) Cascade faster RCNN的结构概略图。图中I表示输入图像,conv表示用于特征提取的backbone, H表示用于产生类别和bbox的head网络, pool表示ROI操作。 C表示类别, B表示bbox坐标信息。
Faster RCNN在PRN的时候对anchor坐标进行了一次修正,在最后预测的时候又进行了一次修正,总共两次修正使最后的坐标更加准确。那能不能加上更多次的修正呢?cascade结构就被提出了,总共对坐标进行了三次修正。无独有偶,图(b)中也是类似的结构,但它用的是同一个head。考虑到每次修正会使输出的分布发生变化,因此训练不同的head会比较合理。
RetinaNet
文章:https://arxiv.org/pdf/1708.02002.pdf
作者提出了现在常用的损失函数FocalLoss,顺便设计了一种简单的单阶段网络来验证效果。
图中K为类别数(背景不再作为一个类),A为每个点的anchor数(设为9).
分类损失就用上面介绍的FocalLoss(), 回归损失用smoothL1.
FocalLoss定义如下:
其中,alpha和gamma均为可以调节的超参数。y’为模型预测,其值介于(0-1)之间。
当y=1时,y’->1,表示easy positive,它对权重的贡献->0;
当y=0是,y’->0,表示easy negative,它对权重的贡献->0.
当alpha增大时,会降低y=0(背景类)的损失从而减少大量背景的影响。
FCOS
FCOS是anchor free的检测网络,即不需要手动去设计anchor,而是直接预测每个特征图上的点与待检测框上下左右的距离。为了避免发散要经exp函数处理,必要的话再乘一个缩放系数scale。
例如已知待检测框
[
y
t
o
p
,
y
b
o
t
t
o
m
,
x
l
e
f
t
,
x
r
i
g
h
t
]
[y_{top},y_{bottom},x_{left},x_{right}]
[ytop,ybottom,xleft,xright],某点对应原图的坐标为
x
,
y
x,y
x,y,则网络回归分支该点的期望输出为
[
s
c
a
l
e
×
e
x
p
(
y
t
o
p
−
y
)
,
[
s
c
a
l
e
×
e
x
p
(
y
−
y
b
o
t
t
o
m
)
,
[
s
c
a
l
e
×
e
x
p
(
x
r
i
g
h
t
−
x
)
,
[
s
c
a
l
e
×
e
x
p
(
x
−
x
l
e
f
t
)
]
[scale\times exp(y_{top}-y),[scale\times exp(y-y_{bottom}),[scale\times exp(x_{right}-x),[scale\times exp(x-x_{left})]
[scale×exp(ytop−y),[scale×exp(y−ybottom),[scale×exp(xright−x),[scale×exp(x−xleft)]
因为远离目标的点得到的检测结果不可靠,所以需要提添一个叫Centerness的网络预测该点的置信度。其思想类似于Faster-RCNN中的RPN网络的预测某点是前景的概率
推断过程:
经过backbone和FPN得到五个不同尺度通道数都为256的特征图,经过同一个head得到每个点的类别概率、置信度、距离,总共(C+1+4)*N个值,N为五个特征图所有点的总和。
最后类别概率乘以置信度,再接个非极大抑制
训练过程:
给定真实标签 和真实框,
1,首先判断该点是否在某个真实框内,不在真实框内的不参与训练。
2,不同尺度的特征图’各司其职‘,把要回归的数据限制在一定范围内。比如大特征图只负责预测小物体,小特征图只负责预测大物体。
3,如果某点同时在多个真实框内,则该点只负责预测面积最小的那个框的物体。
4,然后分类网络的损失用FocalLoss, Centerness网络的损失用交叉熵,回归网络的损失用IOULoss。回归的值要乘以置信度再送入损失函数。