浅析YOLO, YOLO-v2和YOLO-v3

经典的目标检测网络RCNN系列分为两步,目标proposal和目标分类。而Faster-RCNN中把目标proposal和目标分类作为一个网络的两个分支分别输出,大大缩短了计算时间。而Yolo系列则把这两个分支都省了,只用一个网络同时输出目标的位置和分类。

YOLO

输入:一张图片

输出:把每张图片分成SxS个方格,对每个方格,输出一个B*5+C维的数组。其中B是该方格预测方框的数目,包含(x,y,w,h,s),s表示方框的置信度,C表示需要预测的类别数。

在YOLO中,S=7, B=2,PASCAL VOC有20类,所以C=20,B*5+C=30。

YOLO网络结构主要分为两个部分,第一部分是特征提取网络,主要是为了提取物体的通用特征,一般在ImageNet上进行预训练;第二部分是后处理网络,目的是回归出待检测物体的坐标和类别。

网络结构

第一个版本的YOLO的特征提取网络有24个卷积层和2个全连接层。网络结构如下图。


yolo-feature.png

可以看出,这个网络中主要采用了1x1卷积后跟着3x3卷积的方式。

特征提取网络采用了前20个卷积层,加一个avg-pooling层和一个全连接层,对ImageNet2012进行分类,top-5正确率为88%,输入分辨率为224x224。

检测时,将输入分辨率改为448x448,因为网络结构是全卷积的,所以输入分辨率可以改变,整个网络输出为7x7x30维的tensor。

损失函数

接下来要重点将一下这个损失函数。

用网络直接回归物体的坐标是很难的,这里对要回归的物体的坐标进行了一些转化。物体方框的长w和宽h分别除以图片的长和宽;x和y坐标分别表示对应方格坐标的偏移,分别除以方格的长和宽;它们都在0到1之间。

损失函数分为多个部分:


yolo-loss.png

其中,其中i表示第i个方格,j表示该方格预测出的第j个方框。1_{i}^{obj}表示物体obj的实际方框与第i个方格有对应关系,即obj的中心落在第i个方格中;1_{ij}^{obj}表示物体obj的实际方框与第i个方格预测的第j个方框有对应关系,即obj的中心落在第i个方格中,并与它的第j个预测方框的IOU最大。

可以看到损失函数包括5个部分。第一部分是x,y坐标;第二部分是w,h,采用根号使得小方框size变化的损失比大方框size变化的损失大;第三部分是方框置信度损失,回归目标是预测方框与实际方框的IOU值;前三部分都只在预测方框和实际方框有对应关系时才计算loss;第四部分是没有对应物体的方框置信度损失,实际的置信度都是0;第五部分是分类损失,当方格与物体有对应关系时,才计算分类损失。

因为在图片中很多方格都不包含物体,使得方格预测方框的置信分数趋于0。所以对包含物体的方格加大权重,对不包含物体的方格减小权重。论文中有\lambda_{coord}=5,\lambda_{noobj}=5

一些细节
  • 最后一层激活函数使用线性激活函数,其它层使用Leaky-Relu函数。
  • 如果开始使用高学习率会不稳定。先从0.001到0.01,然后0.01训练75个epoch,接着0.001训练30个epoch,最后0.0001训练30个epoch。
  • nms仅增加了2.3%的map。
缺点和比较
  • 每个方格只能预测一类物体,对于小目标检测很难。
  • 在损失函数中,对小物体变化的置信度和大物体变化的置信度惩罚相同,实际小物体变化应该加大惩罚。
  • YOLO在2007+2012上训练,map为63.4%,45fps。
  • Faster R-CNN ZF在2007+2012上训练,map为62.1%,18fps。
  • YOLO比Faster R-CNN有更多的位置错误。

YOLO-v2

YOLO-v2在YOLO-v1的版本上做了一些改进。

  • 添加了BN层,map提高了2%。

  • 用448x448的输入分辨率在ImageNet上进行参数微调,map提高了4%。

  • 把全连接层取消,使用anchor boxes来预测目标方框;使用anchor boxes的话就把分类置信度和空间位置分离了,所以对每个预测方框都可以回归一个方框置信度和分类置信度。不用anchor box时map是69.5%,召回率是81%,使用了之后map是69.2%召回率是88%。

  • 用k-means来选择好的方框先验。

  • 对于每个方格,预测5个方框。假设方格的位置是c_x, c_y, p_w, p_h,预测回归的值是t_x, t_y, t_w, t_h,那么实际的方框位置如下。这种方式将map提高了5%。

    yolov2-box.png

  • 把26x26x512的feature-map,相邻特征分到不同的channel中,因此得到13x13x2048的feature-map,与后面层进行concat,使得map提高了1%。

  • 多scale的训练,因为网络为全卷积层,所以同样的网络可以预测不同分辨率的输入,每10个batch随机选择一个新的image size。

新的分类网络Darknet-19

主要利用了NIN的思想。有19个卷积层和5个maxpooling层,实现了72.9%的top-1正确率和91.2%的top-5正确率。在448x448的分辨率上,实现了76.5%的top-1正确率,和93.3%的top-5正确率。网络结构如下图所示。


darknet-19.png

修改成detection网络时,删除了最后的卷积层,添加了3个3x3x1024的卷积层,和一个1x1x125的卷积层,在最后的3x3x512层和导数第二层之间添加了一个paththrough进行特征concat。

开始学习率是0.001,在60和90个epoch时乘以0.1。

比较
  • YOLOv2分辨率544x544在VOC2007+2012上训练,map为78.6%,40fps。
  • SSD500在VOC2007+2012上训练,map为76.8%,19fps。
分类和检测联合训练

另外,YOLO-v2利用WordTree,将分类和检测任务进行联合训练,对于没有方框标注的物体也能预测出其方框,能够对词典中9000个概念进行预测。YOLO-v2也叫做YOLO9000。

YOLO-v3

YOLO-v3在YOLO-v2的基础上进行了一些改进。

  • 用logistic regression对方框置信度进行回归,对先验与实际方框IOU大于0.5的作为正例,与SSD不同的是,若有多个先验满足目标,只取一个IOU最大的先验。
  • 对每个类别独立地使用logistic regression,用二分类交叉熵损失作为类别损失,可以很好地处理多标签任务。
  • 利用多个scale进行预测,实际使用3个不同的scale。将前两层的feature-map进行上采样,与开始的feature-map进行concat起来,加一些卷积层,然后进行预测。
新的特征提取网络Darkent-53
darknet-53.png

Darknet-53和Resnet-152正确率相同,但速度是2倍。

比较
  • 在IOU=0.5这个标准下,YOLO-v3非常强;能够预测出小物体。
  • YOLOv3-320, map-50为51.5%,时间是22ms。
  • RetinaNet-50-500,map-50为50.9,时间是73ms。
尝试过的方法
  • 使用线性激活函数回归x,y偏移,相对于方框长和宽的比例(YOLOv3中采用的是相对于方格的比例);这种方法降低了模型稳定性,并且效果不好;
  • 使用线性激活函数直接预测x,y偏移,而不是logistic regression,导致map下降;
  • 使用Focal Loss,map下降了2个点;
  • 用两个阈值,IOU在0.3-0.7之间的忽略,小于0.3的作为负例。

总的来说,我觉得,YOLO的发展完全展现了汲取众家之长的力量。还是要多看paper,以上。

参考文献:
[1] Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[2] Redmon J, Farhadi A. YOLO9000: better, faster, stronger[J]. arXiv preprint, 2017.
[3] Redmon, Joseph, and Ali Farhadi. "Yolov3: An incremental improvement." arXiv preprint arXiv:1804.02767 (2018).

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

推荐阅读更多精彩内容