【YOLOv2】的那点事儿

本文为个人学习YOLOv2的总结(不含YOLO9000),图片和部分文字来源于网络,侵删~~

首先从下面这张图入手,从图中可以看出YOLOv2是一个个小实验堆砌成的。经过不断优化过程,最终YOLO的mAP从63.4达到78.6。

YOLOv2优化的点有:加入BN 层、使用高分辨率输入图片、使用anchor boxes、网络结构换成全是卷积网络、使用自己创建的主干网络darknet-19、用聚类方法找到先验框、坐标位置直接预测、加入passthrough层提取小物体的特征图、多尺度训练使用不同的分辨率测试等等。

YOLOv2的论文也是按照一个个小的优化点进行叙述的。每改进一项,进行一项实验,分析对比。
在这里插入图片描述

YOLOv2重要知识点

感谢大佬的详解,参考链接:https://www.cnblogs.com/yifanrensheng/p/12878475.html

  1. batch normalization:对数据进行预处理(统一格式、均衡化、去噪等)能够大大提高训练速度,提升训练效果。
  2. High Resolution Classifier: YOLO 从 224×224 增加到了 448×448,这就意味着网络需要适应新的输入分辨率。为了适应新的分辨率,YOLO v2 的分类网络以 448×448 的分辨率先在 ImageNet上进行微调,微调 10 个 epochs,让网络有时间调整滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的 Resulting Network。最终通过使用高分辨率,mAP 提升了 4%。
  3. Convolutional With Anchor Boxes: 之前的YOLO利用全连接层的数据完成边框的预测,导致丢失较多的空间信息,定位不准。作者在这一版本中借鉴了Faster R-CNN中的anchor思想。YOLOv2 去掉了全连接层,使用 Anchor Boxes 来预测 Bounding Boxes。同时去掉了网络中一个池化层,这让卷积层的输出能有更高的分辨率。收缩网络让其运行在 416×416 而不是 448×448。由于图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLO 的卷积层采用 32 这个值来下采样图片,所以通过选择 416×416 用作输入尺寸最终能输出一个 13×13 的特征图。 使用 Anchor Box 会让精确度稍微下降,但用了它能让 YOLO 能预测出大于一千个框,同时 recall 达到88%,mAP 达到 69.2%。
  4. Dimension Clusters——K-means(IOU): 之前 Anchor Box 的尺寸是手动选择的,所以尺寸还有优化的余地。 为了优化,在训练集的 Bounding Boxes 上跑一下 k-means聚类,来找到一个比较好的值。
  5. Direct location prediction: 作者在预测位置参数时采用了强约束方法:
    1、对应 Cell 距离左上角的边距为(Cx,Cy),σ定义为sigmoid激活函数,将函数值约束到[0,1],用来预测相对于该Cell 中心的偏移(不会偏离cell);
    2、预定Anchor(文中描述为bounding box prior)对应的宽高为(Pw,Ph),预测 Location 是相对于Anchor的宽高 乘以系数得到。
  6. Fine-Grained Features: YOLO 修改后的特征图大小为 13×13,这个尺寸对检测图片中尺寸大物体来说足够了,同时使用这种细粒度的特征对定位小物体的位置可能也有好处。YOLO 采取了不同的方法,YOLO 加上了一个 Passthrough Layer 来取得之前的某个 26×26 分辨率的层的特征。这个 Passthrough layer 能够把高分辨率特征与低分辨率特征联系在一起,联系起来的方法是把相邻的特征堆积在不同的 Channel 之中,这一方法类似与 Resnet 的 Identity Mapping,从而把 26×26×512 变成 13×13×2048。YOLO 中的检测器位于扩展后(expanded )的特征图的上方,所以他能取得细粒度的特征信息,这提升了 YOLO 1% 的性能。
  7. Multi-Scale Training: YOLOv2 每迭代几次都会改变网络参数。每 10 个 Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是 32,所以不同的尺寸大小也选择为 32 的倍数 {320,352……608},最小 320320,最大 608608,网络会自动改变尺寸,并继续训练的过程。

YOLOv2之网络结构

下图是YOLOv2的结构图,从图中可以看出大量使用了3×3卷积,pooling之后,通道数翻倍。作者在3×3之间采用1×1来压缩特征。
在这里插入图片描述在这里插入图片描述

YOLOv2之维度聚类

作者最终使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。距离函数为:𝒅(𝒃𝒐𝒙,𝒄𝒆𝒏𝒕𝒓𝒐𝒊𝒅)=𝟏−𝑰𝑶𝑼(𝒃𝒐𝒙,𝒄𝒆𝒏𝒕𝒓𝒐𝒊𝒅)
在这里插入图片描述

YOLOv2之训练过程

YOLOv2的训练主要包括三个阶段。
第一阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224×224;
第二阶段:将网络的输入调整为 448×448,继续在ImageNet数据集上finetune分类模型;
第三个阶段:修改Darknet-19分类模型为检测模型,并在检测数据集上继续finetune网络。
在这里插入图片描述

问题总结分析

  1. 先验框、anchor boxes、bounding box之间有什么区别?

个人理解:先验框就是预先设置(聚类)得到的anchor boxes。bounding box是在YOLOv1中提出的,bounding box是预测出的两个边界框,每个bounding box包含[x,y,w,h,c]5种信息。而anchor boxes是在YOLOv2中提出来的,借鉴的是Faster R-CNN中的anchor机制。anchor boxes是先验框优化的box,每个anchor box包含[x,y,w,h,c,class]6种信息。实际上anchor boxes输出的是框的w和h,这样就能确定框的尺寸大小,和bounding box类似。

  1. YOLOv2种提出多种输入图片的尺寸,一会是224×224,一会是448×448,一会又是416×416,最后又来了320×320,352×352,···,608×608,这些输入图像的分辨率为什么这么多?

首先,要明白YOLOv2训练分为3个阶段。实际上每个阶段,每个小实验作者采用的输入图片分辨率都不相同。224×224是预训练时采用的,而且是YOLOv1中采用的 ,在YOLOv2的小实验中,作者将224×224分辨率提高到448×448进行预训练。后来作者预训练检测模型用过416×416的分辨率。最后在多尺度训练的时候,小实验中,又采用不同的320×320,352×352,···,608×608,不同的尺度进行预训练。我们在训练自己数据集的时候,图片的分辨率可以不用管,训练的时候可以统一调整。

  1. mAP是什么意思?

在YOLOv1中出现过这个缩写,在YOLOv2中出现次数更频繁。目标检测中衡量识别精度的指标是mAP(mean average precision)。多个类别物体检测中,每一个类别都可以根据recall和precision绘制一条曲线,AP就是该曲线下的面积,mAP是多个类别AP的平均值。

  1. YOLO中实验对比分析部分出现大量的top-1、top-5是什么意思?

Top-1:神经网络返回的最大概率值代表的内容是正确的。
Top-5:神经网络返回的前5个最大概率值代表的内容中有一个是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值