YOLO-9000论文详解 – 潘登同学的目标检测笔记
YOLO-9000介绍
YOLO-9000是YOLO-v2 + 9000分类
TOLO-v2的10个改进
- Batch Normalization: 对mAP有2%的提升, 同时有了BN层就可以不用Dropout了
- High Resolution Classifier: 对mAP有4%的提升,预训练网络的时候就用448*448的图片来在ImageNet上训练10轮,而不是像之前一样先训练224*224的然后,输入的是448*448的
- Convolutional With Anchor Boxes: 对Recall有7%的提升,移除了对框位置的全连接层,取而代之的是类似于Faster R-CNN的Anchor boxes,最终预测的不再是相对每个cell的偏移量而是预设Anchor boxes的偏移量; 最后训练网络的时候的输入图片是416*416的,因为主干网络有5个池化,最后的feature map是13*13的奇数,是因为YOLO团队发现大部分的图片的obj是在图片中间的,奇数feature map的图片中心的网格能更好的负责要预测的物体; 而13*13的feature map相对于YOLO-v1的7*7的更细粒度,能预测更小的obj;
- Dimension Clusters: 既然Anchor boxes是从Faster R-CNN中借鉴的,那么框的数量应该是9,但是YOLO-9000的框的数量不是拍脑袋想出来的,而是通过对GT(x,y,w,h)四个维度采用K-means聚类得到的,但是如果采用欧式距离,对于高大宽小与高小宽大的大框会比高大宽小与高小宽大的小框距离大很多,不适合,于是作者团队提出了IOU的距离度量
d
(
b
o
x
,
c
e
n
t
r
o
i
d
)
=
1
?
I
O
U
(
b
o
x
,
c
e
n
t
r
o
i
d
)
d(box,centroid) = 1 - IOU(box,centroid)
d(box,centroid)=1?IOU(box,centroid) 最后用elbow原则选择了k=5
- Direct location prediction: 在预测框的中心点的位置的时候,采用了类似于Faster R-CNN的计算公式
t
x
,
t
y
t_x,t_y
tx?,ty?是中心点偏移量
t
x
=
x
?
x
α
w
α
t
y
=
y
?
y
α
h
α
t
w
=
log
?
(
w
w
α
)
t
h
=
log
?
(
h
h
α
)
t_x = \frac{x-x_{\alpha}}{w_{\alpha}} \\ t_y = \frac{y-y_{\alpha}}{h_{\alpha}} \\ t_w = \log(\frac{w}{w_{\alpha}}) \\ t_h = \log(\frac{h}{h_{\alpha}}) \\
tx?=wα?x?xα??ty?=hα?y?yα??tw?=log(wα?w?)th?=log(hα?h?) 但YOLO团队发现难以收敛,于是又用回了YOLO-v1的相对坐标的概念,将
t
x
,
t
y
t_x,t_y
tx?,ty?通过sigmoid激活函数转化到0-1对中心点偏移量做预测(
c
x
,
c
y
c_x,c_y
cx?,cy?是cell的绝对坐标,
p
w
,
p
h
p_w,p_h
pw?,ph?是预测的宽高,
t
o
t_o
to?是v1的confidence)
b
x
=
σ
(
t
x
)
+
c
x
b
y
=
σ
(
t
y
)
+
c
y
b
w
=
p
w
e
t
w
b
h
=
p
h
e
t
h
P
r
(
o
b
j
e
c
t
)
?
I
O
U
(
b
,
o
b
j
e
c
t
)
=
σ
(
t
o
)
b_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w = p_we^{t_w} \\ b_h = p_he^{t_h} \\ Pr(object) * IOU(b,object) = \sigma(t_o) \\
bx?=σ(tx?)+cx?by?=σ(ty?)+cy?bw?=pw?etw?bh?=ph?eth?Pr(object)?IOU(b,object)=σ(to?) 那差别就很明显了,v1是迁就分类将所有回归结果限制在0-1之间,而现在放开了限制通过sigmoid来将结果变换到0-1之间 - Fine-Grained Features: 对top-of有1%的提升,在卷积最后一部分(26*26->13*13),将高阶特征与低阶特征相融合,这是ResNet的思想,但是要将两个大小不一的feature map堆叠,采用了passthrough layer的方式进行堆叠,将26*26的特征切成四份13*13的与26*26卷积池化后的进行堆叠,26*26*512 -> 13*13*2048
- Multi-Scale Training: 数据增强,与一般的数据增强不同,他们还会对输入的维度做增强,以32为倍数,从320*320到608*608的输入图片尺寸(因为remove了全连接,用的是全卷积所以可以改输入),这是一个trade-off的过程,当输入尺寸小的时候FPS就会高而mAP就会低,当输入尺寸大的时候FPS就会低而mAP就会高
- Darknet-19预训练主干网络
再迁移到目标检测任务,将最后一层卷积去掉,替换成3*3*1024的卷积再接1*1*425(5*(5+80))
YOLO-9000的思想
因为CoCo数据集中只有80个类别, 所以网络只能预测80个类别,YOLO-9000将ImageNet的没有打框但是有label标签的数据也能拿来用,主要思想如下
- 当数据来自于YOLO-v2的训练数据(有框的图像),那么网络就会计算所有loss(框位置loss,confidence loss,分类loss)
- 当数据没有框的时候(来自ImageNet的数据), 那么网络只会计算分类的loss
CoCo数据中80类别是比较粗粒度的,而imageNet大赛则是细粒度的, 对于dog来说,CoCo可能只会将其分类为dog,而ImageNet会将它分类成Norfolk terrier , Yorkshire terrier 等等,如果将两个数据集的分类用并集弄在一起,那么就会违反softmax的多项式分布假设,因为dog与其子类是层次关系的,不是互斥的; 于是YOLO团队提出了层次分类的模式
Hierarchical classification
根据分类的思想,构建了一个多叉树,来描述这种分类标签的层次结构,在整合了CoCo数据集与ImageNet数据集后,将1000的label数量增加至1369个label(因为增加了父类或者中间类)。而怎么计算这个图像属于哪一类呢,通过YOLO-v2得到1369类别的value值,根据树结构用从根节点到叶节点的概率之积来计算属于某一类的概率,在同一层级中,所有同一级的子节点做softmax将回归所得,属于某一大类的概率,对每一层都做softmax,分别得到条件概率,连乘即可得到叶节点的最终概率
YOLO-9000
YOLO-9000把所有imageNet数据的类别(9000)与CoCo数据集合并起来,总共有9418个class(包括父类),然后将这个思想用在目标检测任务下,最终结果如下
|