目标检测YOLO系列——YOLO v2

YOLO v1:You Only Look Once: Unified, Real-Time Object Detection
YOLO v2:YOLO9000:Better,Faster,Stronger
YOLO v3:YOLOv3: An Incremental Improvement

在yolo v1的基础上作者提出了一种联合训练的方法将目标检测数据集与分类数据集结合,使得YOLOv2网络能够识别9000种物体,升级为YOLO9000。

YOLOv2改进

1.Better

1.1 批规范化(Batch Normalization)

Batch Normalization的作用是提高了网络模型的鲁棒性,缓解了Covariant Shift问题,有一定的正则化(regularization)作用,在这里也不例外。通过在YOLO所有的卷积层中加入Batch Normalization,可以使得mAP提高2%,并且dropout的部分也可以丢掉。

1.2 高分辨率分类器(High Resolution Classifier)

从AlexNet开始,大多数的分类器都在分辨率小于256 \times 256的图像上执行分类。YOLO一代在训练分类网络的时候用的是224\times224分辨率,检测网络的时候用的是448\times448分辨率,这就意味着网络需要同时切换到目标检测并且适应新的分辨率。在YOLO二代中,直接使用448\times448的分辨率微调(fine tune)了网络,训练了10个epoch。可以使得mAP提高大概4%。

1.3 使用Anchor Box

原来的YOLO是利用全连接层直接预测bounding box的坐标,而YOLOv2借鉴了Faster R-CNN的思想,引入anchor。首先将原网络的全连接层和最后一个pooling层去掉,使得最后的卷积层可以有更高分辨率的特征;然后缩减网络,用416\times416大小的输入代替原来448\times448。这样做的原因在于希望得到的特征图都有奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个center cell(比如可以划分成7\times79\times9个cell,center cell只有一个,如果划分成8\times810\times10的,center cell就有4个)。为什么希望只有一个center cell呢?因为大的object一般会占据图像的中心,所以希望用一个center cell去预测,而不是4个center cell去预测。网络最终将416\times416的输入变成13\times13大小的feature map输出,也就是缩小比例为32。

原来的YOLO算法将输入图像分成7\times7的网格,每个网格预测两个bounding box,因此一共只有98个box,但是在YOLOv2通过引入anchor boxes,预测的box数量超过了1千(以输出feature map大小为13\times13为例,每个grid cell有9个anchor box的话,一共就是13\times13\times9=1521个,当然由后面第4点可知,最终每个grid cell选择5个anchor box)。在Faster RCNN在输入大小为1000\times600时的boxes数量大概是6000,在SSD300中boxes数量是8732。显然增加box数量是为了提高object的定位准确率。实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%)。

1.4 通过K-means来学习出anchor box

在Faster R-CNN中anchor box的大小和比例是按经验设定的,然后网络会在训练过程中调整anchor box的尺寸。但是如果一开始就能选择到合适尺寸的anchor box,那肯定可以帮助网络越好地预测detection。所以作者采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box。如果采用标准的k-means(即用欧式距离来衡量差异),在box的尺寸比较大的时候其误差也更大,而我们希望的是误差和box的尺寸没有太大关系。所以通过IOU定义了如下的距离函数,使得误差和box的大小无关,K-means主要用与预测anchor box的长跟宽。:

d(box, centroids) = 1 – IOU(box, centroids)

聚类结果如图,左图代表Avg IOU与聚类数目K的关系,在权衡Avg IOU和模型复杂度以后,作者选择了K=5。右图代表了VOC和COCO数据集的box的聚类结果。可以看出聚类所得到的anchor box与手动选择相比,更倾向于选择高瘦的anchor box。

从表1可以看出,使用聚类算法得到的anchor box在其数量为5时就可以得到与手动选择的anchor box数量为9时几乎相同的Avg IOU,而在聚类算法得到anchor box数量为9时,它的Avg IOU是优于手动选择的(67.2> 60.9)。这也证明了聚类算法的得到的anchor box更好。

image

1.5 Directed Location Prediction

用Anchor Box的方法,会让model变得不稳定,尤其是在最开始的几次迭代的时候。而不稳定的因素主要来自于预测bounding box坐标(x, y)的时候。理解它的产生原因,我们需要先看一下faster RCNN的预测检测框的方法。

如下图所示,在faster RCNN中,box主要分为Ground True Box(人工标定的真正的检测框),Anchor Box和网络预测出的Predict Box。

image

faster RCNN预测的是Ground True/Predict Box与Anchor Box的偏移量,因此有如下公式:

x,y,w,h分别表示box的中心坐标和宽高,x,x_a,x∗分别表示 predicted box, anchor box和ground truth的x坐标值 (y,w,h同理)。t_i表示predict box相对于anchor box的偏移,t_i^*表示ground true box相对于anchor box的偏移,学习目标自然就是让前者接近后者的值。

对应的,关于检测框中心点坐标则通过如下公式计算:(!!感觉应该是+号,才符合faster rcnn)

这样会带来一个问题,即当t_x/t_y较大时(>=1),检测框可能跳到图像上的任意位置。因此YOLO的作者在此基础上做出了如下改进来限制检测框的跳动:

image

在这里作者并没有采用直接预测offset的方法,还是沿用了YOLO算法中直接预测相对于grid cell的坐标位置的方式。前面提到网络在最后一个卷积层输出13\times13大小的feature map,然后每个cell预测5个bounding box,然后每个bounding box预测5个值:t_x,t_y,t_w,t_h和t_o(这里的t_o类似YOLOv1中的confidence)。看上图,t_x和t_y经过sigmoid函数处理后范围在0到1之间,这样的归一化处理也使得模型训练更加稳定;c_x和c_y表示一个cell和图像左上角的横纵距离;p_w和p_h表示bounding box的宽高,这样b_x和b_y就是c_x和c_y这个cell附近的anchor来预测t_x和t_y得到的结果。黑色虚线框是bounding box,蓝色矩形框就是预测的结果。

其中b_x,b_y,b_w,b_h,σ 分别代表predict box的中心坐标x,y和它的长和宽,还有目标为物体b的概率。

image

1.6 细分类特征(Fine-Grained Features)

Faster F-CNN、SSD都使用不同尺寸的Feature Map来取得不同范围的分辨率,而YOLOv2采取了不同的方法,YOLOv2加上了一个跳跃层(Passthrough Layer)来获取之前的26*26分辨率的层的特征。这个Passthrough layer能够把高分辨率特征与低分辨率特征连结(concatenate)起来,这种方式看起来与ResNet很像,但是略有不同,因为ResNet采用的是summation,而YOLOv2的Fine-Grained Features采用的是concatenate。

1.7 多尺寸训练(Multi-ScaleTraining)

作者希望YOLO v2能鲁棒地运行于不同尺寸的图片之上,所以把这一想法用于训练model中。 区别于之前的补全图片尺寸的方法,YOLO v2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320\times320,最大608\times608,网络会自动改变尺寸,并继续训练的过程。 这一方法使得网络在输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,下图为YOLOv2和其他的目标检测网络的对比。

image

2.Faster

2.1 网络结构

YOLO使用的是GoogleNet架构,比VGG-16快,YOLO完成一次前向过程只用8.52 billion 运算,而VGG-16要30.69billion,但是YOLO精度稍低于VGG-16。因此作者在YOLOv2中设计了一种新的网络结构叫Darknet-19。网络结构如表格所示,与VGG相似,大量使用3\times3,1\times1的卷积核,并在每次Pooling之后增加一倍Channels的数量。YOLO v2中还用到了Batch Normalization技术。 最终的model–Darknet19,有19个卷积层和5个maxpooling层,处理一张图片只需要5.58 billion次运算。

image

3.Stronger

3.1 Hierarchical classification

WordNet是一种有向图,这是因为语言模型很复杂,有很多同义词,所以不可以用树状结构表示。(例如,在训练的过程中,当网络遇到一个来自检测数据集的图片与标记信息,那么就把这些数据用完整的YOLO v2 loss功能反向传播这个图片。当网络遇到一个来自分类数据集的图片和分类标记信息,只用整个结构中分类部分的loss功能反向传播这个图片。 但是检测数据集只有粗粒度的标记信息,像“猫“、“ 狗”之类,而分类数据集的标签信息则更细粒度,更丰富。比如狗这一类就包括”哈士奇“”牛头梗“”金毛狗“等等。所以如果想同时在监测数据集与分类数据集上进行训练,那么就要用一种一致性的方法融合这些标签信息。 )假设一个图片可以有多个分类信息,并假定分类信息必须是相互独立的规则可以被忽略。但是分类模型中不需要考虑所有的同义词,因此作者在这里从WordNet结构中提取出包含ImageNet类别的多层级WordTree结构。

作者希望根据ImageNet中包含的概念来建立一个分层树,为了建立这个分层树,首先检查ImagenNet中出现的名词,再在WordNet中找到这些名词,再找到这些名词到达他们根节点的路径(在这里设为所有的根节点为实体对象(physical object))。在WordNet中,大多数同义词只有一个路径,所以首先把这条路径中的词全部都加到分层树中。接着迭代地检查剩下的名词,并尽可能少的把他们添加到分层树上,添加的原则是取最短路径加入到树中。

为了计算某一结点的绝对概率,只需要对这一结点到根节点的整条路径的所有概率进行相乘。所以比如你想知道一个图片是否是Norfolk terrier的概率,则进行如下计算:

3.2 Dataset combination with WordTree

为了验证这一个方法,在WordTree上训练Darknet19的model,使用1000类的ImageNet进行训练,为了建立WordtTree 1K,把所有中间词汇加入到WordTree上,把标签空间从1000扩大到了1369。在训练过程中,如果有一个图片的标签是”Norfolk terrier“,那么这个图片还会获得”狗“(dog)以及“哺乳动物”(mammal)等标签。总之现在一张图片是多标记的,标记之间不需要相互独立。

这里解释一下标签是怎么扩充的,比如一张图片是“Norfolk terrior”,那么根据WordTree的最短路径,这张图片还会获得“dog”和“mammal”的标签,即现在的标签向量元素为1的位置不唯一。比如原数据标签为(0,0,0,0,0,1,0,0,0,0),那么扩充后的数据标签则为(0,0,0,0,0,1,0,0,0,0,1,1)。之前的ImageNet分类是使用一个大的softmax进行分类。而现在,WordTree只需要对同一级别下的词汇类别进行softmax分类。如图所示:

image

如Figure5所示,之前的ImageNet分类是使用一个大softmax进行分类。而现在,WordTree只需要对同一概念下的同义词进行softmax分类。 使用相同的训练参数,这种分层结构的Darknet19达到71.9%top-1精度和90.4%top-5精确度,精度只有微小的下降。 这种方法的好处:在对未知或者新的物体进行分类时,性能降低的很优雅(gracefully)。比如看到一个狗的照片,但不知道是哪种种类的狗,那么就高置信度(confidence)预测是”狗“,而其他狗的种类的同义词如”哈士奇“”牛头梗“”金毛“等这些则低置信度。

3.3 Joint classification and detection

在使用WordTree混合了COCO与ImageNet数据集后,混合数据集对应的WordTree包含9418类。由于ImageNet数据集跟COCO比太大了,产生了样本倾斜的问题,因此作者将COCO过采样,使得COCO与ImageNet的比例为1: 4。
YOLO9000的训练基于YOLO v2的构架,但是使用3“priors”来限制输出的大小。当网络遇到检测数据集中的图片时则正常地反方向传播,当遇到分类数据集图片的时候,只使用分类的loss功能进行反向传播。

参考链接
https://cloud.tencent.com/developer/article/1064556
https://blog.csdn.net/hysteric314/article/details/53909408
https://blog.csdn.net/Chunfengyanyulove/article/details/80860870
https://blog.csdn.net/zhazhiqiang/article/details/82669863

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容