YOLO:You Only Look Once系列的学习

前言

    目标检测领域的深度学习方法大多分为两类,一步网络和两步网络。一步网络以速度快、实用性高著称,其将特征提取和bounding box生成放在一个网络中;而两步网络以精度高著称,其将特征提取和bounding box的生成放在两个不同的网络中。
    在一步网络中,近几年最为流行的就是YOLO了,YOLO的全称为You Only Look Once,网络名称表现了YOLO的整体性和高速。从2015年的YOLO v1到2019年的YOLO v3,历经近五年的时间,YOLO方法更加精确和成熟。因为本人做的很多目标检测的项目,大多有采用的YOLO,环境配置简单,运行速度快,网络结构丰富。如今,很多领域的研究者都基于YOLO提出越来越多的网络,例如无人机航拍目标检测的SlimYOLO v3和3D目标检测的YOLO 3D等等。当然本博文也会跟着YOLO的发展不断更新影响力大的YOLO网络。以下为目前本博文的计划内容:

├── YOLO
│ ├── YOLO v1
│ ├── YOLO 9000
│ ├── YOLO v3
│ │ ├── YOLO v3
│ │ ├── YOLO tiny
│ │ ├── YOLO spp

YOLO

? - [YOLO所有的论文]
? - [YOLO所有的代码]

[YOLO v1]

? - [You Only Look Once: Unified, Real-Time Object Detection]
    下图就是YOLO v1的工作过程,首先将输入图像进行Resize,送入卷积网络中,结果进行非极大值抑制(NMS)得到目标检测的结果。YOLO v1的网络结构十分简单,一个卷积神经网络就完成了目标检测的任务,很多大佬曾说过YOLO是神经网络未来发展趋势。

    如下图所示,输入448×448的图像经过特征提取网络后,会生成 S × S S×S 的featuremap,这相对于输入图像就像是对图像进行分块,每一块叫grid,这里将图片分为 S × S S×S 个grid,之后对每一个grid进行分类生成Class probability map,一个grid对应一个类别。另外,每个grid会生成k个anchors,这样整个图像就会生成 S × S × k S×S×k 个anchors,每个anchors会对应一个置信度, c o n f i d e n c e = Pr (  Class  i )  IOU  pred  truth  confidence=\operatorname{Pr}\left(\text { Class }_{i}\right) * \text { IOU }_{\text {pred }}^{\text {truth }} 其中 Pr (  Class  i ) \operatorname{Pr}\left(\text { Class }_{i}\right) 是grid分为正确类别的概率。当进行某物体的检测时,物体中心的grid生成的anchors会生成最后的boundingbox,最后所有生成的anchors经过NMS会生成最终的结果。

   下图是YOLO v1的特征提取网络的结构图,网络的前部分采用的是AlaxNet,去掉原先网络的后几层使其输出为7×7×30的featuremap。

   下图展示了输出7×7×30的featuremap所包含的内容,输入图像会分为7×7个grid,每个grid会生成2个anchors,所以每个会有(x,y,w,h)四个输出,一共8个输出,每个anchors还会有一个confidence,这些包含在输出的前10个值。后面的20个输出,对应此grid分为20个类的概率。

   最后网络的输出进行NMS,也就是非极大值抑制,流程如下:

λ coord  i = 0 S 2 j = 0 B 1 i j obj  [ ( x i x ^ i ) 2 + ( y i y ^ i ) 2 ] + λ coord  i = 0 S 2 j = 0 B 1 i j obj  [ ( w i w ^ i ) 2 + ( h i h ^ i ) 2 ] + i = 0 S 2 j = 0 B 1 i j obj  ( C i C ^ i ) 2 + λ nootij  i = 0 S 2 j = 0 B 1 i j noobj  ( C i C ^ i ) 2 + i = 0 S 2 1 i obj  c  celasses  ( p i ( c ) p ^ i ( c ) ) 2 \begin{aligned} \lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \\+\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}})^{2}\right] \\+\sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left(C_{i}-\hat{C}_{i}\right)^{2} \\+\lambda_{\text {nootij }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {noobj }}\left(C_{i}-\hat{C}_{i}\right)^{2} \\+\sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj }} \sum_{c \in \text { celasses }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \end{aligned}

其中 λ coord  = 5 \lambda_{\text {coord }}=5 λ noob  j = 0.5 \lambda_{\text {noob } j}=0.5 是两个超参数。

[YOLO 9000]

? - [YOLO9000: Better, Faster, Stronger]
   

扫描二维码关注公众号,回复: 9568095 查看本文章

[YOLO v3]

? - [YOLOv3: An Incremental Improvement]
   

[YOLO tiny]

   

[YOLO spp]

   

?传送门
  ? [目标检测]
  ? [目标检测数据集指标分析]
  ? [YOLO:You Only Look Once系列的学习]
  ? [在Nvidia Jetson Nano上利用YOLO进行目标检测的实践过程]

发布了30 篇原创文章 · 获赞 10 · 访问量 7818

猜你喜欢

转载自blog.csdn.net/qq_36449741/article/details/101222186