yolov2训练_[Detection]-YOLOv2-CVPR2017

6ce4fe4fe084a635140bfc1ac57a98db.png

681edb5c199f07661f64e09d347240a0.png

1.YOLO9000的改进

727c2e8f5a93d8daf28ff3a9fc7d9b09.png

上面的图很直观地解释了YOLOv2相对于YOLO的改进

(1)加了batch normalization

(2)high-resolution classifier

指的是以前backbone即VGG16是在ImageNet上预训练的,训练时处理的都是224x224大小的图像,到了detection,处理的又是448x448的输入。YOLOv2对backbone又在ImageNet上用448x448的分辨率进行fine-tune一下,mAP增加了4%

(2)用了anchor机制

原来的YOLO是一个网格抛出2个bbox,算的是bbox与网格的偏差,这样其实相当于用网格在作anchor,但是由于抛出的bbox比较少,容易发生小目标漏检,现在用了anchor机制,它的anchor只是提供了w,h,但是定位还是用的网格,每个网格产生5个anchor,这样最终会产生13x13x5=845个bbox

(3)demension priors

这是anchor的产生机制,在下面的anchor机制中解释

(4)new network

新的网络结构指的新的backbone,即Darknet

d540613b0b38d5f23086c382ceb8c398.png

这是一种很简单的卷积,中间用了BN,用了1x1卷积减少通道数,这样在保持VGG的效果同时,模型更轻量化,同时,相比于YOLO,v2还取消了最后的全连层,用的是都是卷积层

(5)location prediction

这是anchor怎么配合网格机制用的方法,见下面anchor机制

(6)passthrough

这是采用了特征融合,模仿SSD,也希望用到多种不同scale的feature map,但是yolov2只多用了一个,最后输出的feature map是13x13x1024的,他们又把上一个维度的26x26x512无损的转化成了13x13x2048,

然后与最后一层堆起来,曾为13x13x3072去进行预测

(7)multi-scale

就是将image resize到不同scale进行training,因为整个backbone进行了32倍的缩小,所以用的分辨率都是32的倍数:

129f5aebe3f8f0e7dc4238f5cc1eeab0.png

(8)high-resulition detector

就是指YOLOv2在高分辨率图像进行detection,其实就是608x608上,取得了最好的效果,mAP=78.6,FPS=40

(9)能够检测9000类的目标

这个不在上面的表种,但这也是主要亮点之一

2.Anchor机制

YOLOv2的anchor机制算是学习Faster RCNN吧,比较RPN算是anchor机制的鼻祖,作者又都是FAIR的人,但是两者有些不同,

(1)anchor的设计机制不同

Faster RCNN或者SSD,anchor都是手动设计的,YOLOv2提出了用聚类自动设计anchor的方法。确定一个anchor,无非就是确定[w,h]这对参数,他们把训练集的ground truth都收集起来,k-means聚类,聚类出5个中心,中心的w,h就是5个anchor的参数,注意,聚类采用的距离度量不是欧式距离,因为那对大框和小框都一视同仁,他们使用了IoU来度量距离:

6c7f883c69d3f78bb64d4648d5e1e560.png

同时他们做了对比实验:

69ddaaafbf6a223d96f1e307dc9b4ba0.png

34b0dc55611f7c03a8271361a1e9dcdf.png

第三行为Faster RCNN手动设计的anchor

总的来说,越多聚类中心,越能吻合目标框,但是detection将更复杂,折中考虑,选择了5个

(2)定位机制

65d9f1eef06d860bf1acd63184c3647c.png

c17c7f75cdede73ca155616014d58e16.png

每个bbox将预测为5个值(tx,ty,tw,th,to),tx,ty代表预测的bbox中心坐标与网格左上角的偏移,tw,th代表预测的bbox长宽与对应的anchor长宽的倍数关系,to表示预测的confidence,confidence的ground truth还是跟YOLO一样,是IoU

3.Most Awesome——Predicting 9000 classess

为什么能预测9000类,因为他们把detection的数据集COCO(80类)和分类数据集ImageNet(22k类)结合起来训练了。还提出了层次分类方法

(1)标签融合

COCO和ImageNet的label命名都不一样,如果在COCO数据集中,只能预测为狗,在ImageNet中还可以预测为哈士奇或者爱斯基摩犬。怎么做的呢?

首先混合两个数据集的标签,形成一个标签树:

922f922cd5b9c27086bbbcd26697c9ca.png

(2)层次softmax:

ecb9b6253d34da5b1545f838c83c795a.png

也就是说,某个根节点的子节点概率之和为1,那么最后预测为某一类的概率相当于为条件概率的乘积:

86388e63a6c20deba924876251693d94.png

(3)训练过程

加入遇到的是COCO的图片,那么因为ground truth的标签是狗,所以只要标签树中,到狗那一层的cross-entropy越小越好,bbox的regression则正常进行

如果遇到的是ImageNet的图片,则不进行bbox regression,假如说这张图片的label为哈士奇,那么找到COCO中对应的上层标签,即狗,找到预测为狗的概率最大的bbox,再找出这个bbox对应哈士奇那一层的分类情况,进行cross-entropy。

4.Experiment

(1)PASCAL VOC2007

f101f9544d28e61de21779095be98316.png

比SSD500更好,且速度更快

(2)PASCAL VOC2012

cdfa2b912c41998f7cfcb1047171a721.png

(3)COCO test-dev2015

a1956eb2f9fc267f2c19d23518c3daed.png

这个上面似乎还是SSD512碾压了, 综合来看,除了VOC2007上YOLOmAP超过了SSD,其他两个都没能超过,不过速度确实更快。

5.Comment

YOLOv2 anchor机制上算是回到了Faster RCNN那一套,但是没有完全放弃,也就是自己的网格特点,但是其实对每个bbox进行分类预测的话,其实网格特点也没了。其余改进其实都是训练层面的改进,创新意义不大,最大的亮点还是要说将detection和classification结合,使得detection网络能预测更多类的目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值