[论文笔记] YOLO系列论文笔记

YOLO 系列模型近年来受到众多关注,原因有二:1. 实时性高,远超同时期的许多模型; 2. 代码开源程度高,作者非常乐意分享。这也使得在实践中,大家都乐意使用 YOLO 系列的模型。YOLO 系列模型属于 one-stage,end-to-end model,将图像输入到模型中,经过一系列卷积操作,即可直接回归出 bounding box 的坐标和 class probability。

  1. YOLO 的核心是将图像划分成 S ∗ S S*S SS个 grid cell,经过模型系列卷积操作后,得到 S ∗ S ∗ ( B ∗ 5 + C ) S*S*(B*5+C) SS(B5+C) 的特征向量,将特征向量以矩阵的形式表示,进行 Descenting Sort 和 NMS 操作,经过一系列操作后即可得到检测结果。
  2. YOLOv2 的核心是在 YOLO 的基础上,修改了bounding box 的预测方式,不再假设每个 grid cell 仅有一种类别存在;引进 Anchor Box,并通过 K-means 是其更符合数据中 bounding box 的形状;且作者提出新的 classification network,即 DarkNet-19。此外,作者在同一篇论文中,提出了 YOLO 9000,该模型采用了一种分类和检测的联合训练策略,可以将检测超过9000个类别的物体。
  3. YOLOv3 的核心是在于作者在 YOLOv2 上做出了许多改进,在 DarkNet-19 的基础上引进 ResNet 的结构,提出 DarkNet-53。

目录

1. YOLO
2. YOLOv2
3. YOLOv3

1. YOLO

论文题目:You Only Look Once: Unified, Real-Time Object Detection
论文作者:Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
所属机构:University of Washington, Allen Institute for AI, Facebook AI Research
论文链接:https://arxiv.org/pdf/1506.02640.pdf

(1) 摘要

2015年,Joseph Redmon, Ali Farhadi 和 Ross Girshick(R-CNN系列论文的作者) 一起提出了 YOLO。YOLO 与 R-CNN 不同,并不使用 classifier 做 object detection,而是完全将 object detection 视为一个 regression problem。该模型不仅是 end-to-end model,还是 one-stage model。
此外,该模型的优点有以下三点:

  1. 运行速度很快,能在 Titan X 上达到45 fps,而 fast version YOLO 能达到150 fps(这远远超过其他算法,人们青睐YOLO系列算法正是因为这点)
  2. YOLO 进行 prediction 时是基于 global image 的,这与基于 region proposal 的算法不同,更能从全局上进行推断
  3. YOLO 对物体的表示更具有泛化性
[论文笔记] YOLO系列论文笔记_第1张图片

(2) 模型结构

首先,模型将图像 resize 为 448 ∗ 448 448*448 448448,再将其划分为 S ∗ S S*S SS 个格子(若待检测物体的中心落在某个格子中,该格子负责检测该物体)。
接着,每个格子进行检测时会提供两种预测信息: 预测 B 个 bounding box 和 C 个 conditional class probabilities。其中,bounding box 信息包括:x,y,w,h,and confidence(x,y 为 bounding box 的中心坐标,相对于每个单元格左上角坐标点的偏移值;w,h 为 bounding box 的宽度与高度,该值是相对于整个图片的宽与高的比例;所以 x,y,w,h 的范围都是 [0,1])。
而confidence 由两部分组成:该格子中存在 object 的概率(存在 object,则 P ( O b j e c t ) = 1 P(Object)=1 P(Object)=1;否则,则 P ( O b j e c t ) = 0 P(Object)=0 P(Object)=0)和所预测 bounding box 与 ground truth 的 IOU(即 I O U p r e d t r u t h IOU^{truth}_{pred} IOUpredtruth):

[论文笔记] YOLO系列论文笔记_第2张图片

所预测的 C 个 conditional class probabilities 对应着该格子在存在 object 情况下,该 object 为某种类别的概率。

故,模型的预测结果的 shape 应该为: S ∗ S ∗ ( B ∗ 5 + C ) S*S*(B*5+C) SS(B5+C)

细节:

网络预测 bounding box 的步骤如下:(建议阅读参考资料中的 ‘YOLO幻灯片’)

  1. 每个格子所预测 B B B 个 bounding box 的 confidence 与所在格子所预测的 conditional class probabilities相乘,得到 C ∗ ( S ∗ S ∗ B ) C*(S*S*B) C(SSB)的矩阵(也就是 20 × 98,每行分别对应一个类别,每列分别对应某一个 bounding box)。
  2. 将每一行中低于阈值的 score 设为 0,并进行 Descenting Sort。
  3. 对每行进行如下操作(NMS,non-Maximum Suppression):
    • 设 score 最高的 bounding box 为 bbox_max,将下一 个 score 不为 0 的 bounding box 设为 bbox_cur
    • I O U ( b b o x m a x , b b o x c u r ) > 0.5 IOU(bbox_max,bboxcur)>0.5 IOU(bboxmax,bboxcur)>0.5,将 bbox_cur 的score 设为 0。接着,继续将下一个 score 不为 0 的 bounding box 设为bbox_cur,重复该操作直到到达右侧顶端。
    • 不考虑之前的 bbox_max 的情况下,设 score 最高的bounding box 为 bbox_max。重复操作3,直到无法选出 bbox_max 为止。
  4. 对每列进行如下操作:
    • 计算 c l a s s = m a x _ i n d e x ( s c o r e s ) , s c o r e = m a x ( s c o r e ) class=max\_index(scores),score=max(score) class=max_index(scores),score=max(score)
    • s c o r e > 0 score>0 score>0,则对应 bounding box 可以预测目标物体,且所预测的类别为分数最高的那一类。
[论文笔记] YOLO系列论文笔记_第3张图片

关于网络结构:

[论文笔记] YOLO系列论文笔记_第4张图片

细节:

  1. 该网络结构由 GoogLe Net改进而来,称为 DarkNet。作者用后接 3 ∗ 3 3*3 33 conv layer 的 1 ∗ 1 1*1 11 reduction layer 代替了 Google Net 中的 Inception Module。
  2. 作者在 ImageNet 上 pre-train 时,只使用网络的前面 20 个卷积层(后跟着 average-pooling layer 和 FC layer),intput size 为 224 ∗ 224 224*224 224224。然后,在训练检测的时候,作者再加上随机初始化的4个卷积层和2个全连接层,同时将 input size 改为 448 ∗ 448 448*448 448448
  3. 作者将 ReLU layer 改为 pReLU layer。
  4. Fast YOLO 与 YOLO 相比,不同之处为: conv layer 的数量由 24 减为 9 以及 conv layer 中 filter 的数量也变少了。

关于 multi-part loss function:

[论文笔记] YOLO系列论文笔记_第5张图片

该 loss function 由三部分组成:Coord Error,IOU Error,Class Error。前两项为 Coord Error,作者为了加大位置误差对网络的影响,引入了 λ c o o r d = 5 \lambda_{coord} = 5 λcoord=5,并且为了平衡不同大小的物体 bounding box的位置误差对网络的影响,作者将物体的大小信息 w 和 h 进行求平方根,以进行改进。中间两项为 IOU Error,作者为减小不存在物体的格子的预测误差对网络的影响,引入了 λ n o o b j = 0.5 \lambda_{noobj} = 0.5 λnoobj=0.5。最后一项为 Class Error, 作者并未对这一项进行额外改动。

(3) 实验结果.

[论文笔记] YOLO系列论文笔记_第6张图片
[论文笔记] YOLO系列论文笔记_第7张图片

(4) 总结

YOLO: 输入图像 → \to 将大小resize到 448 ∗ 448 448*448 448448 → \to 输入到网络中,得到预测结果,shape 为 S ∗ S ∗ ( B ∗ 5 + C ) S*S*(B*5+C) SS(B5+C) → \to 对每个 bounding box 进行阈值和NMS操作 → \to 得到最终检测结果

优点:

  • 运行速度快:
    YOLO 结构简单,仅需通过CNN 网络即可,相比于R-CNN自然快得多。
  • 背景误检率低:
    YOLO 进行预测时,利用得是整张图片得信息,这与基于 Region Proposal 的 R-CNN 是非常不同的,这也使得 YOLO 不受局部信息的影响,能更好的识别出背景。
  • 通用性强:
    YOLO对于艺术类作品中的物体检测同样适用,它对非自然图像物体的检测率远远高于 DPM 和 R-CNN 系列检测方法。

有待改进之处:

  • 位置精准性差:
    YOLO 是将图片划分为 S ∗ S S*S SS 个格子,每个格子分别进行预测,这就导致往往体积较小的物体和集中较为密集的物体检测效果不好。此外,YOLO 中每个格子的 bounding box 的检测与 class 的检测是分开的,这就默认每个格子中仅有一个类别的物体。
  • 无法处理任意size的图像:
    这是由于网络中所存在的 FC layer所导致的,这个可以像 SPP Net 一样用 SPP layer 解决,也可以用 average pooling layer 解决。
  • 召回率低
  • 无法处理不常见的 bouning box:
    YOLO 是从数据集中学习如何预测 bounding box 的,一旦出现与数据集种中不同 aspect ratio 的 bounding box,YOLO将无法很好的进行预测。

2. YOLOv2

论文题目:YOLO9000: Better, Faster, Stronger
论文作者:Joseph Redmon, Ali Farhadi
所属机构:University of Washington, Allen Institute for AI
论文链接:https://arxiv.org/pdf/1612.08242.pdf

(1) 摘要

2016年, Joseph Redmon 和 Ali Farhadi 在YOLO 的基础上做出了一系列的改进,推出了 YOLOv2。此外,他们还提出了一种新的训练方式,使得同时使用 large classification dataset 和 small detection dataset 进行objection detection成为可能,基于这种训练方式,作者推出了 YOLO 9000, 该模型可以 detection 9000种不同的物体。

[论文笔记] YOLO系列论文笔记_第8张图片

(2) 模型结构

[论文笔记] YOLO系列论文笔记_第9张图片

关于Batch Normalization:

自2015年,Google 提出了 Batch Normalization 后,BN 在深度网络中的应用便开始一发不可收拾,各种变体也横空出世。
BN 可以很好的解决网络中的梯度问题(梯度消失与梯度爆炸), 减轻对参数初始化的依赖,使得训练速度提升,并增加了网络的泛化能力,可以抛弃 Dropout 等技术。

[论文笔记] YOLO系列论文笔记_第10张图片

关于 High Resolution Classifier:

在 YOLO 中,作者在 ImageNet 上训练好的网络,添加后续四个 Conv layer 和两个 FC layer 后,便提高 resolution 到 448 ∗ 448 448*448 448448 后便直接在训练集上进行训练。在 YOLOv2 中,作者选择提高 resolution 后,依然在 ImageNet 上进行 10 EPOCH 的 fine-tuning 后,再到训练集上进行训练。

关于 Convolutional With Anchor Boxs:

在 YOLO 中,网络直接由 FC layer 在 feature map 上预测 bounding box。而在 Faster R-CNN 中,模型借助 hand-picked priors(也就是那九种 anchor box)利用 RPN 预测 bounding box 相对于 anchor box 的 offset。

在 YOLOv2 中,作者也开始采用 anchor box 的 idea。首先,作者删去了一个 pooling layer 以提高最后 feature map 的 resolution;然后, 作者 shrink 网络,使得网络处理图像的 input size 为 416 ∗ 416 416*416 416416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。作者观察到,大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率;最后,YOLOv2 使用 conv layer进行 downsample (factor 为 32),使得最后得到的 feature map 的 shape 为 13 ∗ 13 13*13 1313

利用 anchor box,虽然 YOLOv2 的 mAP 下降了一点,但是 recall 提升了很多。(原先 YOLO 每张图最多预测 7 ∗ 7 ∗ 2 = 98 7*7*2=98 772=98 个 bounding box,YOLOv2 可以预测 13 ∗ 13 ∗ 9 = 1521 13*13*9=1521 13139=1521个 bounding box;加 anchor box 之前,mAP=69.5%,recall=81%;加了 anchor box 之后,mAP=69.2%,recall=88%)

并且,作者不再像 YOLO 中那样每个 grid 负责预测 grid 中物体的类别,改为每个 bounding box 预测 bounding box 中物体的类别。

[论文笔记] YOLO系列论文笔记_第11张图片

关于 Dimension Cluster:

在 Faster-RCNN 中,anchor box 提供了三种 aspect ratio 和三种 scale的 anchor box(一共九种)。虽然模型会在 anchor box 的基础上进行回归以微调 bounding box,但是构造合适的 anchor box (也就是精选的先验框,hand-picked priors) 对于模型的训练仍然有着益处。

在 YOLOv2 中,相较于手工构造 anchor box,作者选择借助统计学的力量:对数据中的标注 bounding box 进行 K-Means Cluster,以此学得更好的 aspect ratio 和 scale 的 anchor box。其中,距离函数为: d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box,centroid)=1-IOU(box,centroid) d(box,centroid)=1IOU(box,centroid)。之所以不使用传统的欧式距离函数,是因为那样会导致 size 大的 box 相对于 size 小的 box 来说,error 更大。

最后,作者基于 recall 与模型的复杂度的权衡,选择设定 k = 5 k=5 k=5,利用 K-Means 在 VOC 2007 和 COCO 上分别得到了五种 anchor box(基本都比较‘瘦长’,COCO上得到的 anchor box 比 VOC 2007 上得到的 anchor box 变化较大)。

[论文笔记] YOLO系列论文笔记_第12张图片

关于 Direct Location Prediction:

之前提到,作者在 YOLOv2 中借鉴 Faster R-CNN 中的 RPN,也采用 anchor box 进行预测 bounding box 相对于 anchor box 的 offset 。但作者指出:YOLO 使用 anchor box 会导致模型不稳定,尤其在迭代初期。

在论文中,作者给出的计算公式应该是错的,我认为减号应该改为加号:

因为在 Faster R-CNN 中的计算公式为:

作者说,这样的计算公式是没有约束的,因为 t x , t y t_x,t_y tx,ty 并没有任何约束,这就意味这最后计算的中心坐标可以落在图像上的任何位置。所以,作者放弃了这种计算公式,而采用了下面的计算公式:

[论文笔记] YOLO系列论文笔记_第13张图片

其中, c x , c y c_x,c_y cx,cy 为 grid cell 的左上角坐标,计算时每个 cell 的尺度都是1, σ ( t x ) , σ ( t y ) \sigma(t_x),\sigma(t_y) σ(tx),σ(ty)也就代表着 bounding box 中心相对于 grid cell 左上角坐标的 offset。

最后,可以将式子改为如下,使得预测值的范围都在 [ 0 , 1 ] [0,1] [0,1]

[论文笔记] YOLO系列论文笔记_第14张图片

其中, ( W , H ) (W,H) (W,H)为 feature map 的大小。

[论文笔记] YOLO系列论文笔记_第15张图片

关于 Fine-Grained Feature:

由于修改后的 YOLO 最后会生成 13 ∗ 13 13*13 1313 的 feature map,作者认为这样的粗粒度特征虽然可以胜任大尺度物体的检测,但是难以应付小物体的检测,要知道 YOLO 的缺点之一就是对小物体的检测精度低。

借鉴 SSD 的思路,作者选择利用多尺度的特征进行预测,但是与 SSD 不同,作者并没有在不同尺度上的 feature map上分别进行预测,而是将不同尺度的 feature map 进行叠加,作者称该结构为 passthrough layer,与 ResNet 中的 identity mapping 类似(‘The passthrough layer concatenates the higher resolution features with the low resolution features by stacking adjacent features into different channels instead of spatial locations, similar to the identity mappings in ResNet’)。

细节:
关于 pass-through layer,具体来说就是特征重排(不涉及到参数学习),前面 26 ∗ 26 ∗ 512 26 * 26 * 512 2626512的特征图使用按行和按列隔行采样的方法,就可以得到4个新的特征图,其维度都是 13 ∗ 13 ∗ 512 13 * 13 * 512 1313512,然后做concat操作,得到 13 ∗ 13 ∗ 2048 13 * 13 * 2048 13132048的特征图,将其拼接到后面的层,相当于做了一次特征融合,有利于检测小目标。

关于 Mutli-Scale Training:

在 YOLOv2 中,作者为了增强模型对任意 size 图像的鲁棒性,采用了多尺度输入训练的策略:每隔 10 batch,就随机选择新的size 的图像进行训练。由于 YOLOv2 的 downsample 的 factor 为 32,可选输入图像的大小为: { 320 , 352 , . . . , 608 } \{320,352,...,608\} {320,352,...,608},则最后的 feature map 的 size 分别为 { 10 , . . . , 19 } \{10,...,19\} {10,...,19}

关于 DarkNet-19:

作者提出了一个新的 classification network,称为 DarkNet-19。在 DarkNet-19 中,作者常常在 conv layer 使用 3 ∗ 3 3*3 33 的 filter,并在每次pooling layer后,使得 filter 的 channel 数量翻倍;此外,作者借鉴 Network in Network,采用了 GAP(global average pooling),用来压缩所得到的 feature map(Avgpool layer 使得网络可以处理任意 size 的图像)。

[论文笔记] YOLO系列论文笔记_第16张图片

细节:

至此,作者关于 YOLOv2 的描述基本讲完了,但是对比 YOLO 就可以发现,作者没讲模型训练时如何确定先验框以及损失函数。查阅资料后,发现有人做了这方面的讲解:

  1. YOLOv2 与 YOLO 类似,在训练中,若物体中心点落在某个 grid cell 内,那么该 grid cell 内的5个 anchor box 负责预测它。具体是哪个 bounding box 预测它,需要在训练中确定,即由那个与ground truth的IOU最大的 bounding box 预测它,而剩余的4个 bounding box 不与该ground truth匹配。YOLOv2 同样假定每个 grid cell 至多含有一个 groundth truth,而在实际上基本不会出现多于1个的情况。与ground truth匹配的先验框计算坐标误差、置信度误差(此时target为1)以及分类误差,而其它的边界框只计算置信度误差(此时target为0)
  2. YOLOv2 的 Loss Function 为:(还没完全搞清楚)
[论文笔记] YOLO系列论文笔记_第17张图片
[论文笔记] YOLO系列论文笔记_第18张图片

关于 VOLO 9000 的细节,我建议大家阅读参考资料中的 YOLO2,我觉得这篇文章讲的比较详细,值得一看。

(3) 实验结果

[论文笔记] YOLO系列论文笔记_第19张图片
[论文笔记] YOLO系列论文笔记_第20张图片
[论文笔记] YOLO系列论文笔记_第21张图片

3. YOLOv3

论文题目:YOLOv3: An Incremental Improvement
论文作者:Joseph Redmon, Ali Farhadi
所属机构:University of Washington
论文链接:https://arxiv.org/pdf/1804.02767.pdf

(1) 摘要

YOLOv3 并非纯粹意义上的论文,用作者的话来说,是作者近一年的 Tech Report。在 YOLOv3 中,作者对 YOLOv2 做了许多改进,提升了 YOLOv2 的性能。其中,最值得注意的是,YOLOv3 使用了 ResNet 结构,提出了 DarkNet-53,并且采用 FPN (Feature Pyramid Networks for Object Detection)结构。

[论文笔记] YOLO系列论文笔记_第22张图片

(2) 所做尝试

关于 Class Prediction:

作者在 YOLOv3 中,不再采用 Softmax ,而是采用 independent logistic classifers,并采用 binary cross-entroy loss。
这是由于 Softmax 不适用于存在 overlapping label 的复杂领域(如:Open Images Dataset),并且采用 independent logistic classifers 的效果并不差。

关于 Feature Extractor:

作者在 DarkNet-19 的基础上引进 ResNet 中的 building block 结构,提出了 DarkNet-53(因为其中含有 53个 conv layer)。

[论文笔记] YOLO系列论文笔记_第23张图片

此外,作者还将其与 DarkNet-19,ResNet-101,ResNet-152 进行了对比:

[论文笔记] YOLO系列论文笔记_第24张图片

关于 Prediction Across Scales:

(作者对这一块的描述写在 Feature Extrator 前面,但我感觉应该写在后面比较好,并且应该配上一张结合 DarkNet-53 的网络结构图)

在 YOLOv3 中,作者对 bounding box 设置了三种尺度特征,并且仍然利用 k-means 得到九个先验框,并将其划分到3个尺度特征图上,尺度更大的特征图使用更小的先验框。

[论文笔记] YOLO系列论文笔记_第25张图片

除了以上所提到的各种改进,作者也列出了一些没有 work 的改进:采用 Focal Loss,采用与Faster R-CNN 相似的 IOU threshold 的策略,采用 Linear activation 预测 bounding box 的坐标

(3) 实验结果

[论文笔记] YOLO系列论文笔记_第26张图片

参考资料:

  • zhangqizky/awesome-object-detection
  • YOLO 幻灯片
  • YOLO详解
  • YOLO(You Only Look Once)算法详解
  • 目标检测|YOLO原理与实现
  • 目标检测|YOLOv2原理与实现(附YOLOv3)
  • YOLO2
  • 目标检测:YOLOv2算法详解
  • 目标检测网络之 YOLOv3

如果你看到了这篇文章的最后,并且觉得有帮助的话,麻烦你花几秒钟时间点个赞,或者受累在评论中指出我的错误。谢谢!

作者信息:
知乎:没头脑
LeetCode:Tao Pu
CSDN:Code_Mart
Github:Bojack-want-drink

你可能感兴趣的:(Paper,CV,CV,杂谈)