YOLO 系列 object detection 算法

R-CNN 以及后续改进的 Fast R-CNN, Faster R-CNN 都是 region-based,也就是说在进行物体检测时,对某个局部区域的检测完全取决于该区域的图像特征,而不会受到整幅图片其他区域的影响。这种 Region-based 物体检测可以直观理解成先把图片分割成若干小区域,然后对每个孤立的区域分别进行 classification。

YOLO ( You Only Look Once ) 则是基于整幅图片的信息同时检测若干小区域。YOLO 也是一个持续改进的算法,以 v1, v2, v3 标记。

基于 COCO 数据集的测试效果看,YOLO v3 是目前 real-time object detection ( >=30 frames per second )算法中检测准确度最高的。

本文将尝试总结 YOLO 三个版本的基本思想。

参考文献:
YOLO v1 原文:https://arxiv.org/pdf/1506.02640.pdf
YOLO v2 原文:https://arxiv.org/pdf/1612.08242.pdf
YOLO v3 原文:https://pjreddie.com/media/files/papers/YOLOv3.pdf

在下边每个小节中,如果没有特殊说明,“YOLO” 指代本小节的 YOLO 版本。

YOLO v1

基本检测流程
From the original paper
  1. 首先将整幅图片划分成 S\times S 个小格子

  2. 每个小格子对应 B 个带有自信度 (confidence scores) 的 bounding box。自信度取决于两方面:一是这个 bounding box 包含物体的概率,用 Pr(object) 表示;二是这个 bounding box 是否准确的包含了该物体,用预测 bounding box 与实际 bounding box 的 intersection over union (IoU) 来表示。因此,自信度计算公式为
    Pr(object)×IoU^{truth}_{pred}

    最理想的情况是,每个 bbox 的自信度就等于它所包含物体的 IoU^{truth}_{pred}.

  3. 每个 bbox 对应 5 个预测值:

    • x, y : bbox 相对于小格子的偏移,取值在 [0,1] 内。
    • w, h : bbox 相对于整张图的宽和高,取值在 [0,1] 内。
    • 自信度 confidence score
  4. 每个小格子还要预测一组条件概率 Pr(Class_i|Object):如果这个小格子中包含了某个物体,则这个物体属于某个类别的概率是多少。不论小格子对应的 bbox 数目有多少,每个小格子只负责预测一组条件概率。
    结合前述自信度公式,我们用如下公式表示每个 bbox 包含某类物体的自信度:
    Pr(Class_i|Object) \times Pr(object) \times IoU^{truth}_{pred} = Pr(Class_i) \times IoU^{truth}_{pred}

网络结构

在基于 PASCAL VOC 数据集的测试中选择 S=7, B=2,C=20.
网络包括 24 个卷积层 + 2 个全连通层,具体结构如下:

From the original paper

其中最后一个维度为 (7, 7, 1024) 的 feature map 被重新排列成一维向量送入后边的全连通层,最后一个全连通层的输出被重新排列成 (7, 7, 30) ,对应了 7×7 个 cell,每个 cell 对应长为(B×5+C=30)的向量。得到所有的 bbox 和对应的 score 之后,通过 non-maximal suppression (NMS) 消除重复的检测,对于同一个物体只保留 score 最大的 bbox。

另外为了提高检测速度,还有一个 Fast YOLO 版本,只有 9 个卷积层。除了网络结构精简以外,Fast YOLO 与 YOLO 在训练、测试参数方面完全相同。

在 PASCAL VOC 数据集上测试时,每个格子只有 2 个 bbox,一幅图总共有 7×7×2=98 个 bbox。由于 bbox 数量较少,YOLO 在 localization 方面不如 Region based 算法,但是由于有整幅图的信息,在预测时将背景识别为物体的错误较低 (less false positives)。YOLO 还具有很强的泛化能力,基于实际场景训练的 YOLO 在艺术作品场景中也具有较好的检测效果,这一点比 R-CNN 系列算法好很多。

From the original paper

YOLO 能够以 45 frames per second (FPS) 的速度处理图片,而基于更小网络的 Fast YOLO 达到了 155 FPS。如果输入的是画面连贯的视频 (> 30 FPS),YOLO 也有足够的时间处理其中的每一个 FPS,也就是具有了实时 object detection 的能力,这对于实时性要求比较高的应用场景(例如自动驾驶)是非常重要的。

YOLO v2

相比于 Region-based 物体检测算法,YOLO v1 的主要问题是 localization 误差比较大,而且 recall 相对较低。这里 recall 反映了能否找到图片中尽量多的物体。这两个问题似乎都是由于 YOLO v1 划分格子太粗糙造成的。

YOLO v2 改善了这两个方面的问题,同时依然具有较高的检测速度和准确度。改进方式主要是广泛借鉴了当时已有的深度学习网络构建和训练技巧。概括如下:

From the original paper

每一点改进都在检测精度 (precision)、recall 或者检测速度方面改善一些。

  • Batch Normalization: 在每个卷积层后边加上 BN 操作,让 mAP 从 63.4% 提升到 65.8%。由于 BN 的调节作用,在训练中去掉了 YOLO v1 中为了避免 overfitting 加上的 dropout 操作。
  • High Resolution Classifier: 在 YOLO v1 的训练中,先在 224 × 224 图片上训练 classification,然后将像素增加到 448 × 448 训练 detection。这意味着同时在像素和任务两个方面做了改变,学习难度比较大。
    YOLO v2 中依然是先在 224 × 224 图片上训练 classification,接着用 448 × 448 像素的图片 fine tuning 这个网络还是做 classification 任务,然后用 448 × 448 像素的图片训练 detection。这里就相当于让神经网络先适应一下高像素的图片,然后再转换到 detection 任务中。这样分两步走的训练策略将 mAP 从 65.8% 进一步提升到了 69.2%.
  • Anchor boxes: 由于 Faster R-CNN 在 recall rate 方面超过 YOLO v1,为了借鉴 Faster R-CNN 成功的经验,YOLO v2 中引入了 Anchor boxes 的概念。与 Faster R-CNN 相同,YOLO v2 中 feature map 上的每个 "pixel" 位置对应最初输入图片上的 9 个 anchor box。简单计算一下,YOLO v1 中只考虑 98 个 box,而 v2 中如果 feature map 规模是 13 * 13,那么总共要考虑 13 * 13 * 9 = 1521 个 box。这一改进并没有明显提高 mAP,但是将 recall rate 从 81% 提升到 88%,即检测出了更多的物体。
  • New network: YOLO v2 中采用了新的网络架构 Darknet-19,其中包含 19 个卷积层和 5 个 maxpooling 层。详细结构如下表所示:
    darknet-19.PNG

    新的网络模型减少了训练参数,同时提高了检测速度和检测准确率。
  • Dimension clusters: YOLO v2 进一步对 anchor box 做了两点改进。原本每个 anchor box 对应的 9 个 bounding box (bbox) 是事先指定大小和高宽比的,然后算法再以此为基础进行调整。如果我们能够更准确的选择 bbox,目标检测的效果应该更好。这里用了 k-means clustering 的无监督学习方式对 VOC 和 COCO 数据集中的 bbox 进行了聚类,从中找出最常出现的 bbox 维度。在实验中 k=5,即每个 anchor box 对应 5 个 bbox,也意味着 VOC 和 COCO 数据集中的 bbox 分别被划分到 5 个 cluster 中。基于先验知识进行的 bbox 设置可以明显提高预测 bbox 和 bbox 真值之间的 IOU。
  • Direct location prediction: 原本 anchor box 中基于预设 bbox 的调整是没有任何限制的,某个 bbox 最终可能被调整到整幅图的任意位置,这可能导致 bbox 预测变动很大,很不稳定。YOLO v2 中对调整范围做了限制,采用 YOLO v1 中的策略,只在 grid cell 附近小范围内调整。
    上述两个对 anchor box 方法的改进最终将 mAP 从69.6 提升到 74.4。
  • passthrough: 之前的操作主要是基于规模为 13 * 13 (这里忽略 channel 数目)的那一个 feature map,在它前边的 26 * 26 feature map 实际上可以提供更精细化的信息。这里可以作一个 passthrough 操作,在 26 * 26 feature map 中将相邻的 feature 放入两个不同的 channel 中,这样原本 26 * 26 * 512 的 feature map 就产生一个 13 * 13 * 1024 的新的 feature map,然后将这个 feature map 与原本的 13 * 13 的 feature map 叠加在一起,可以让 feature map 中的信息更丰富。这一改进使得 mAP 从 74.4 提升到 75.4。
  • multi-scale: 从 Darknet-19 网络结构中可以看出来,YOLO v2 只包含卷积层和 pooling 层,不存在全连通层,因此它对输入图片的大小没有严格要求。可以用不同大小的图片去训练它,这样在使用中也可以应对不同大小的输入图片。这里存在速度和准确度的权衡,如果图片分辨率较大,则检测速度慢,准确度高;如果图片分辨率小,则检测速度快,准确度低。在训练中最小的图片为 320 * 320,最大的图片为 608 * 608。最终训练结果如下:
    multi-resolution.PNG

    其中后边的几个测试采用完全相同的训练好的网络,唯一的区别是输入图片的大小。可以看到很明显的速度与准确度之间的权衡。
    在高分辨率条件下,mAP 最终达到了 78.6 。

Detection 和 classification 是计算机视觉的两个主要任务。目前来看,用来训练 classification 任务的数据集(例如 ImageNet)规模远远超过训练 detection 任务的数据集 (例如 COCO)。

为了在 detection 的训练过程中充分利用 classification 数据集,YOLO v2 的作者采用新的训练方式,将 ImageNet 和 COCO 数据集合并在一起,大大扩展了 训练数据集。对于不同的数据集,训练的时候也是有区别的:对于 COCO 数据集,训练的时候要同时学习 bbox 位置预测和目标的分类,而对于 ImageNet 数据集,训练的时候只学习目标的分类。

通过这种训练方式得到的 YOLO v2 可以对超过 9000 种物体进行 detection,因此被称为 YOLO9000。

YOLO v3

YOLO v3 的文章写的比较随意,是以类似技术报告的形式记录了一些改进工作。文章开头就很清奇:

Sometimes you just kinda phone it in for a year, you know? I didn’t do a whole lot of research this year. Spent a lot of time on Twitter. Played around with GANs a little. I had a little momentum left over from last year; I managed to make some improvements to YOLO. But, honestly, nothing like super interesting, just a bunch of small changes that make it better. I also helped out with other people’s research a little.

结尾部分也挺有意思,很讽刺,似乎也很深刻:

But maybe a better question is: “What are we going to do with these detectors now that we have them?” A lot of the people doing this research are at Google and Facebook. I guess at least we know the technology is in good hands and definitely won’t be used to harvest your personal information and sell it to.... wait, you’re saying that’s exactly what it will be used for?? Oh.
...
Well the other people heavily funding vision research are the military and they’ve never done anything horrible like killing lots of people with new technology oh wait.....
...
I have a lot of hope that most of the people using computer vision are just doing happy, good stuff with it, like counting the number of zebras in a national park, or tracking their cat as it wanders around their house. But computer vision is already being put to questionable use and as researchers we have a responsibility to at least consider the harm our work might be doing and think of ways to mitigate it. We owe the world that much.
...
In closing, do not @ me. (Because I finally quit Twitter).

除了训练细节方面比较琐碎的改进,YOLO v3 最主要的改进是采用了新的基础网络作特征提取,将 ResNet 的思想引入了原本的 Darknet-19 中,得到 53 层卷积层的网络。

It has 53 convolutional layers so we call it ... wait for it ... Darknet-53.

作者似乎没少看 《How I Met Your Mother》,连写文章也要模仿一下。。。

最后 YOLO v3 在检测速度和准确度方面都比较出色。尽管 RetinaNet 在准确度方面比 YOLO v3 好,但是检测速度方面,YOLO v3 碾压所有对手。所以在之后的自动驾驶环境中,我们会优先考虑用 YOLO v3 做目标检测工作。

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

推荐阅读更多精彩内容