论文(二)YOLOv2详解(翻译、总结和思考)

YOLOv2-详解

YOLO9000:Better, Faster, Stronger

论文下载:https://arxiv.org/abs/1612.08242

代码下载:https://pjreddie.com/darknet/yolo/

目录

摘要

(一)简介

(二)精度的改进(better)

1. Batch normalization(每次卷积后批标准化)

2. High-resolution classifier(分辨率更高的分类器)

3. Convolutional with anchor boxes(引入anchor预测边界框坐标)

4. Dimension clusters(K-means聚类确定anchor初始值)

5. Direct location prediction(直接位置预测)

6. Fine-grained features(特征融合)

7. Multi-scale training(多尺度训练)

(三)速度的改进(faster)

Darknet-19

Training for classification

Training for detection

(四)分类的改进

(五)总结

(六)知识点学习

1. 平移不变性(分类)

2. 平移敏感性(检测)

参考资料:



摘要

首先,提出了相对于yolov1做出的改进。yolov2采用多尺度训练方法,可以对不同大小的图片进行处理,实现检测速度与精度的先对平衡。67fps时,在voc2007数据集上达到76.8map,40fps时,达到78.6map,性能由于采用resnet的fasrer r-cnn和ssd算法。最后,提出一种联合训练目标检测和分类的方法,可以同时在coco目标检测数据集和imagenet目标分类数据集上进行训练,联合训练方法允许YOLO9000预测没有标记检测数据的目标类的检测。

(一)简介

当前相对于分类任务来说,目标检测数据集比较有限,标注目标检测数据集的成本也比较昂贵。论文提出一种新方法,使用当前已有的大量目标分类数据集,扩大目标检测系统的范围。使用目标分类的层次视图,允许将不同的数据集合在一起。另外,提出一种联合训练算法,允许我们在目标分类和目标检测数据集上训练目标检测器,该方法使用标注的检测图像学习目标的位置信息,使用分类图像增加语义和鲁棒性。采用这种方法训练的yolo9000模型可以检测9000种目标类别。

(二)精度的改进(better)

yolov1产生大量定位误差,并且与基于候选区域的目标检测算法相比,yolov1的召回率较低。因此,主要在保证精度的前提下,提高召回率和定位精度。

1. Batch normalization(每次卷积后批标准化)

参考:https://blog.csdn.net/hjimce/article/details/50866313https://zhuanlan.zhihu.com/p/24810318;https://www.zhihu.com/question/38102762

文献来源:《Batch Normalization: Accelerating Deep Network Training by  Reducing Internal Covariate Shift》,与《Spatial Transformer Networks》结构相似。

Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法,具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律。

yolov2中在所有卷积层后添加Batch Normalization,map增加2%,且有助于规范化模型。

2. High-resolution classifier(分辨率更高的分类器)

YOLOv2则将预训练分成两步:先用224*224的输入在ImageNet数据集训练分类网络,大概160个epoch(将所有训练数据循环跑160次)后将输入调整到448*448,再训练10个epoch(这两步都是在ImageNet数据集上操作)。然后利用预训练得到的模型在检测数据集上fine-tuning。这样训练得到的模型,在检测时用448*448的图像作为输入可以顺利检测。然后,作者对检测网络部分(也就是后半部分)也进行finetune。这样通过提升输入的分辨率,mAP获得了4%的提升。

3. Convolutional with anchor boxes(引入anchor预测边界框坐标)

参考:https://blog.csdn.net/ft_sunshine/article/details/98682310?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-8&spm=1001.2101.3001.4242

https://blog.csdn.net/just_sort/article/details/80822038;https://blog.csdn.net/qq_34037046/article/details/87393407

YOLOv1最后直接使用全连接层对边界框进行预测,其中边界框的高度是相对整张图片大小的,而由于各个图片中存在不同尺寸和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面的表现较差。

YOLOv2借鉴Faster-CNN的RPN网络的先验框,PRN对CNN特征提取器得到的特征图进行卷积来预测每个位置的边界框以及置信度(是否有目标),并且各个位置设置不同尺寸和比例的先验框,所有RPN预测的是边界框相对于先验框的偏移值,使用先验框使得更容易学习。

为了引入anchor boxes来预测bounding boxes对网络的修改:作者在网络中果断去掉了全连接层。首先,去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络(如何缩减?直接resize,参考https://zhuanlan.zhihu.com/p/55999926,让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数(下采样步长为32),最终得到13 * 13的卷积特征图(416/32=13),这样就可以只有一个center cell。因为,作者观察到,大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。

加入了anchor boxes后,召回率上升,准确率下降的原因:我们来计算一下,假设每个cell预测9个anchor boxs,那么总共会预测13 * 13 * 9 = 1521个boxes,而之前的网络仅仅预测7 * 7 * 2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%。(mAP下降的原因是什么?)

关于输出tensor:对于YOLOv1,每个cell都预测2个boxes,每个boxes包含5个值:( x , y , w , h , c ) (x, y, w, h, c)(x,y,w,h,c) ,前4个值是边界框位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及预测框与ground truth的IOU)。但是每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值