YOLOv2学习笔记

YOLOv2

YOLO与基于region的检测器相比,有着更高的位置错误,而且recall较低。

YOLOv2比YOLOv1有着更高的准确度同时有着更快的速度。

YOLO v1学习笔记:https://blog.csdn.net/JSerenity/article/details/88598503

Better

batch normalization

BN能够给模型收敛带来显著地提升,同时也消除了其他形式正则化的必要。作者在每层卷积层的后面加入BN后,在mAP上提升了2%。BN也有助于正则化模型。有了BN便可以去掉用dropout来避免模型过拟合的操作。BN层的添加直接将mAP硬拔了2个百分点,这一操作在yolo_v3上依然有所保留,BN层从v2开始便成了yolo算法的标配。

high resolution classifier

所有最顶尖的检测算法都使用了基于ImageNet预训练的分类器。首先,我们训练分类网络,然后再将全连接层替换为卷积层,最后再训练端到端的目标检测器。YOLOv2首先用224x224的图片训练分类器,然后再重新用448x448的图片调整检测器。这样可以使检测器的训练更容易些。最后提高了4%的mAp。

Convolutional With Anchor Boxes:

在yolo_v2的优化尝试中加入了anchor机制。YOLO通过全连接层直接预测Bounding Box的坐标值。Faster R-CNN并不是直接预测坐标值。Faster R-CNN只是用RPN种的全连接来为每一个box预测offset(坐标的偏移量或精修量)以及置信度(得分)。

作者去除了YOLO的全连接层,使用anchor框来预测bounding box。作者把448X448的图像收缩到416大小。因为作者想让输出特征图的维度是奇数(416/32=13,13为奇数),这样的话会有一个中间单元格(center cell)。物体(尤其是大物体)经常占据图像的中心,所以有一个单独位置恰好在中心位置能够很好地预测物体。YOLO的卷积层下采样这些图像以32(即2525)为采样系数(416/32 = 13),所以输出feature map为13x13。

使用了anchor boxes机制之后,准确率有一点点下降,但是召回率有较大的提升。YOLO(指YOLO v1)只能在每张图给出98个预测框,但是使用了anchor boxes机制之后模型能预测超过1000个框。尽管mAP稍微下降了一些,但是在召回率上的提升意味着模型可以检测更多的GT目标。

Dimension Clusters:

为了确定最适合训练数据的K个prior,我们对训练数据进行K-means聚类。因为我们处理的是边界框而不是点,所以我们无法使用常规的空间距离来测算数据点的距离,我们使用IoU。

下图左边画出了anchors和GT框的平均IoU与不同聚类数的关系。权衡了recall和复杂度,我们采用k=5。紫蓝色的框是从COCO数据集中选出来的,黑框是从VOC2007数据集中选出来的。这样,我们就不再随意预测而是有了从真实数据中得到的初始框。
1
直接预测(x, y),就像yolo_v1的做法,不过v2是预测一个相对位置,相对单元格的左上角的坐标(如上图所示)。当(x, y)被直接预测出来,那整个bounding box还差w和h需要确定。yolo_v2的做法是,x和y直接暴力预测,而w和h通过bounding box prior的调整来确定。yolo为每个bounding box预测出5个坐标(txtx,tyty,twtw,thth,toto)

Direct location prediction

我们预测anchors的坐标偏移量。YOLOv2预测5个变量 ( t x , t y , t w , t h , t o ) (t_x, t_y, t_w, t_h, t_o) (tx,ty,tw,th,to),并用sigma来约束可能的偏移量范围。
2
下图,蓝色框是预测框。虚线框是anchor。
3
再加入anchor之后,mAP提高了5%。

Fine-Grained Features 细粒度特征

卷积层的空间维度随着卷积逐渐减小,这样对小目标的检测变得越来越难。SSD从不同尺度的卷积层分别检测目标来解决这样的问题。YOLOv2则采用了转移层(passthrough layer)。转移层将28x28x512的特征图 reshape成14x14x2048。然后和14x14x1024特征图相连接。把浅层特征图连接到深层特征图。它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。
4
Multi-Scale Training

原来的YOLO网络使用固定的448 * 448的图片作为输入。现在网络去掉了全连接层,只用到了卷积层和池化层,那么就可以进行输入不同大小的图像。为了使YOLOv2具有不同尺寸图片的鲁棒性,在训练的时候每10个batches模型会随机使用不同大小的图像(320x320, 352x352…608x608)进行训练。因为卷积层下采样的采样系数为32。所以尺寸的大小都是32的倍数。这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务。这样,可以选择在检测小分辨率的图像时可以达到更快的速度,在高分辨率的图像达到更高的精度。

Faster

Darknet-19

Darknet使用3x3卷积核去提取特征,使用1x1卷积核减小输出的通道数。使用全局平均化池最后做预测。
5

Classification

在数据集中,用于目标检测的类别要比用于分类的类别少的多。为了扩展YOLO能够检测的类,YOLO提出了一种方法,在训练过程中混合检测和分类数据集的图像。它利用目标检测样本训练端到端网络,将分类损失从分类样本反向传播到训练分类器路径。这种方法遇到了一些挑战:

  • 我们如何合并不同数据集的标签?因为不同的数据集使用不同的标签。
  • 需要合并的标签不一定是互相独立的。比如,二哈和狗这两个标签。不是互相独立的意味着不能直接使用softmax来计算它们的概率。

Hierarchical classification

使用WordTree分级结构来合并数据集。
6
分级结构的一个好处是,当YOLO不能分辨出某一种飞机时,它就直接给飞机的类别预测,而不是专注于某一种子类别。

当YOLO看到一个分类图像,它只将loss反向传播到分类器。YOLO找到最高概率类别的bounding box的同时计算此类别的母类别的分类误差。这样会鼓励分类器找到这些类别的共同特征。所以,我们即便没有训练某一个特殊的类别,我们仍然可以通过它相关的类别来预测它。

在目标检测中,我们设置 P r ( p h y s i c a l o b j e c t ) Pr(physical object) Pr(physicalobject)等于框中存在目标的置信度。然后YOLO取最高置信度的路径来深入类别树,知道达到某个threshold,完成某个类别的预测。

YOLO9000

YOLO9000通过使用具有9418个结点WordTree的hierarchical classification。它结合了COCO数据集和来自ImageNet的前9000个类别。得益于hierarchical classification,它可以检测156个从未被直接训练的类别。因为YOLO在和他们关联的类别中提取到相似的特征。

总结

  • 较YOLOv1,速度提高,精度提高。

  • YOLOv2可以在速度和精度之间权衡调整。

  • 使用WordTree合并不同的数据集,YOLO9000可以检测超过9000个类别的物体。

  • 多尺度训练,可以适应不同分辨率的图像。

YOLO v3学习笔记:https://blog.csdn.net/JSerenity/article/details/88767491

Paper:https://pjreddie.com/media/files/papers/YOLO9000.pdf

Slide:https://docs.google.com/presentation/d/14qBAiyhMOFl_wZW4dA1CkixgXwf0zKGbpw_0oHK8yEM/edit#slide=id.g23f389e290_1_68

参考:

https://blog.csdn.net/Jesse_Mx/article/details/53925356

https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值