YOLO系列——v2详解

YOLO系列–V2详解

概述

yolo从v2开始改动的就比较多了,在目标检测方向的表现也越来越强,精度可以与Faster-rcnn等two-stage的分割网络相提并论,同时又能满足实时识别的要求,在实际工程化中使用得很频繁,同时网络中使用的小trick也更多,所以除了工程化外,也提供了一些发顶会的小idea。

画图不易,请勿盗图,转载请注出处。

yolo2论文:https://arxiv.org/pdf/1612.08242v1.pdf
yolo2-pytorch: https://github.com/longcw/yolo2-pytorch

下面还是先从网络结构出发,了解yolo2的主干,然后再推敲细节。

一、主干网络

v2的主干网络没有沿用v1的GoogleNet ,而采用了darknet-19。19层卷积和5层最大池化。在标准imagenet-1000上训练了160个epoch。
在这里插入图片描述
下面是实际的YOLO2的识别网络:
在这里插入图片描述
yolo2实际的网络结构,输入图像由darknet-19的224提高到了416,将darknet最后一层卷积和平均池化去掉,换为两层3x3x1024的卷积。由NIN(net in net)结构,将darknet中间一层featuremap重新卷积成64x26x26的特征图,再由PassThrough层,通道增到原来的4倍,尺寸减到原来的一半,将1024x3x3和256x13x13的featuremap concat一起,变为1280x13x13,经过最后一层卷积为Bx(C+5)x13x13 = 5x(20+5)x13x13=125x13x13大小的tensor.

二、细节

网络结构看完了,下面具体看看yolo2做了哪些小trick。
俩人形而上得提出了三大奥运口号Better、Faster、Stronger,也不知道是不是体育爱好者,咱也不敢问呐。Faster主要就是因为采用了上述的网络结构,Stronger就是因为构建了WordTree结构的数据集,使yolo2升级为可以识别9418个类别的yolo9000。下面着重看一下怎么better。

1. Batch Normalization

BN层,不多说了,懂的都懂。

2. High Resolution Classifier 高分辨率分类器

先在imagenet上用448x448的样本来finetune darknet-19,跑10个epoch,这样就认为darknet已经适应了448x448的输入,再用488x448训练整个yolo2网络。这算trick吗?

3. Convolutional With Anchor Boxes 带有锚点框的卷积层

4. Dimension Clusters 维度聚类

不要觉得名字起得很高大上,实际上都是很普通的小技巧。3和4可以合并为一个trick,yolo2采用SSD和RPN的思想,使用Anchor来设置不同的先验框,与SSD和Faster-rcnn不同的是,yolo2没有手动设置固定的尺度和长宽比(SSD选取6层特征图设置不同长宽比和尺度的priorbox,每一层都不相同;Faster-rcnn设置9个候选框,包含3种尺度3种不同长宽比),而是采用K-means聚类的方式,以VOC2007里的groundtruth box为样本,找出最相似的几类固定的候选框。那K-means聚类的原始过程就是,假设K=2,随机找两个样本作为质心,求其余样本到质心的欧式距离,根据欧式距离把样本聚成两类,在新类中找新的质心,重新求所有样本到质心的欧氏距离,迭代多次就可以把一组无标签样本聚成两类。yolo2求欧氏距离产生的误差很大,所以求了一个IOU,用下面的式子代替欧式距离:
在这里插入图片描述
上式表示,如果该样本框与质心框的重合度高的话,就认为两者的距离近。

做了一个实验,K=9时平均IOU大于K=5的,但用Faster-rcnn的9,平均IOU和k=5相同。说明聚类找先验框的方式起作用了。其实这是肯定的,因为最后loss求的就是预测框和真实框的IOU,预测框既然是从真实框里聚类聚出来的,那最后的IOU肯定要比随便设置的先验框求出的IOU大的多。还有一种办法,不用聚类,穷举统计的方式,统计VOC里的真实框的长宽比和面积,用非极大值抑制的方式找到长宽比和面积出现频率最高的真实框,这样最后求loss时,效果一定要比聚类的方式好。
yolo2权衡了召回率和复杂度,定了K=5。

5. Direct location prediction 直接位置回归

yolo2预测bbox的位置和yolo1差不多,没有用Smooth-L1,下面这个图看了好一会儿才看明白。

在这里插入图片描述
同样地,还是直接在cell上做位置预测,前面说了经过k-means聚类每个cell得到了5种先验框,如上图,虚线框就是其中一种先验框,蓝色框就是最后的预测框。但是网络计算的结果并不是直接预测蓝框的位置和尺寸,而是先预测了tx,ty,tw,th,to这五个值。那么上图右边的式子就看明白了,sigma函数就是sigmoid函数,将结果归一化,方便参数学习。由预测值再编码出实际的坐标值和置信度:
在这里插入图片描述

6. Fine-Grained Features 细粒度特征

细粒度特征,就是上文网络结构部分用的PassThrough,目的是让网络检测多尺度目标有好的表现,SSD通过抽取不同层级的特征图来模拟多尺度,那PassThrough就把64x26x26的通道增加到原来的4倍,尺寸变为原来的一半得到256x13x13。再将1024x3x3和256x13x13的featuremap 通道叠加在一起,变为1280x13x13的特征图模拟多尺度。(论文里写的是直接对512x26x26做passthrough,得到结果为2048x13x13,最后将1024x13x13与2048x13x13通道叠加在一起形成3072x13x13的tensor,源码也是直接对512x26x26做passthrough,但读真实训练的模型貌似不是。)

7. Multi-Scale Training 多尺度训练

这个技巧的目的和Fine-Grained Features相同,就是在训练阶段不断变换输入图像的尺寸,让网络适应不同尺度下的目标。

三、总结

个人认为yolo2最有价值的点在于从imagenet的wordnet思想构建了WordTree,升级为yolo9000。跳出了检测网络只能分类互斥类别的限制,采用条件概率不断降阶相乘的方式来计算概率,为包含大量类别的数据集训练提供了思路。

yolo系列持续更新~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值