Java教程

YOLO系列目标检测算法详解

本文主要是介绍YOLO系列目标检测算法详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 前言
  • YOLO发展历程
    • 目标检测
    • YOLO开山之作 ---- YOLO(v1)
    • YOLOv2
  • YOLOv3
  • PaddleDetection中YOLOv3模型介绍
  • 总结

前言 YOLO发展历程

FPPS 帧每秒

目标检测

  • 单阶段模型:YOLO, SSD, Retina-Net
  • 两阶段模型:RCNN, SPPNet
    在这里插入图片描述
    性价比之选:YOLO系列模型
    YOLO
    • VOC精度63.4, 推理速度达到45FPS
    • VOC精度52.7, 推理速度达到155FPS

YOLOv2
- VOC精度78.6, 推理速度达到40FPS
- VOC精度76.8, 推理速度达到67FPS
- SSD的速度,RCNN的精度
YOLOv3
- COCO数据集精度33.0
- 推理速度快于SSD3倍
- 推理速度快于RetinaNet3.8倍

实时检测(FPS>30)
精度速度性价比最高

在这里插入图片描述

YOLO开山之作 ---- YOLO(v1)

单阶段目标检测模型
You Only Look Once
将目标检测当作一个单一的回归任务
在这里插入图片描述

  1. yolov1原理
    将图像划分为SS个网格
    物体bbox中心落在哪个网格上,就由该网格对应锚框负责检测该物体
    在这里插入图片描述
    输出特征图的宽度、高度(H、W)维上即为S
    S个网格
    输出特征图通道(C)维上组织x,y,w,h, Pobject, classification(one-hot)信息
    在这里插入图片描述

YOLOv2

在这里插入图片描述在这里插入图片描述

YOLOv3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. YOLOv3目标检测原理
    在这里插入图片描述
    在这里插入图片描述
  2. YOLOv3网络结构
    在这里插入图片描述
    在这里插入图片描述
    上图三个方框内表示Yolov3的三个基本组件:
    (1)CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。
    (2)Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
    (3)ResX:由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特征图是416->208->104->52->26->13大小。
    其他基础操作
    (1)Concat:张量拼接,会扩充两个张量的维度,例如26×26×256和26×26×512两个张量拼接,结果是26×26×768。Concat和cfg文件中的route功能一样。
    (2)Add:张量相加,张量直接相加,不会扩充维度,例如104×104×128和104×104×128相加,结果还是104×104×128。add和cfg文件中的shortcut功能一样。

Backbone中卷积层的数量
每个ResX中包含1+2×X个卷积层,因此整个主干网络Backbone中一共包含1+(1+2×1)+(1+2×2)+(1+2×8)+(1+2×8)+(1+2×4)=52,再加上一个FC全连接层,即可以组成一个Darknet53分类网络。不过在目标检测Yolov3中,去掉FC层,不过为了方便称呼,仍然把Yolov3的主干网络叫做Darknet53结构。

  1. YOLOv3网络的输入输出
    在这里插入图片描述
    在这里插入图片描述

  2. 锚框
    在COCO数据集上KMeans聚类了9(3*3)种尺度的anchor(先验的超参数)
    在这里插入图片描述
    锚框只给出了框的宽度和高度,怎么去表示图像中物体真实框?
    有多少个真实框?分别在图像的哪个位置?

锚框的宽度和高度是固定的,物体真实框的宽度和高度各种各样,怎么去表示?

  • 从锚框到预测框
    输出特征图高度、宽度为H, W,相当于将图像划分为H*W个网格
    图像的每个网格对应输出特征图HW平面上一个点
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 为什么要有锚框
    在这里插入图片描述
    为什么要有锚框?
    对于YOLOv3来说,巨人的名字叫”锚框“
  • 在数据集上Kmeans聚类得到锚框
  • 生成的预测框**仅需要在锚框基础上”微调“**即可
  • 收敛更快,效果更好
  1. YOLOv3检测流程
    在这里插入图片描述
    在这里插入图片描述
    真实框匹配
    真实框的中心落在哪个网格上,就由哪个网格负责检测这个真实框
    真实框的中心会落在三个特征图的网格上,每个网格有三个锚框,哪个锚框来检测这个真实框呢?
    –所有的9个锚框中,与真实框最匹配的,即IoU最大的负责检测这个真实框
    在这里插入图片描述
    如果两个真实框落在同一个网格上,还匹配了同一个锚框,怎么办?

如果两个真实框落在了同一个网格上,还匹配了同一个锚框,怎么办?
后一个真实框覆盖前一个真实框的信息,前一个真实框就会丢失了,这就是yolov3原理层面上决定的,不适合检测靠的近的,有遮挡的物体或者群体,因为很有可能他们落在了同一个网格同一个锚框上。
由真实框得到监督信息
在这里插入图片描述
在这里插入图片描述
yolo的思想是各通道之间是互相独立的,也就是各类别之间独立,也就允许多类别检测。所以用sigmoid,类别之间不互相干扰。softmax只允许一个类别

YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:

  • Softmax使得每个框分配一个类别(score最大的一个),而对于Open
    Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。
  • Softmax可被独立的多个logistic分类器替代,且准确率不会下降。

损失函数
在这里插入图片描述
需要计算哪些损失?
1)有真实框落在的锚框(正例)
在这里插入图片描述
2) 没有真实框落在的锚框(负例)

  • objectness损失:将预测框的objection向0回归

3) 只给了真实框落在的锚框回归真实框的机会?样本倾斜?(非正非负)

  • 不是匹配的锚框但是其对应的预测框与任一真实框IoU不小于ignore threshold(0.7),不计算损失

在这里插入图片描述
9. 计算预测框
在这里插入图片描述
10. NMS
在这里插入图片描述
在这里插入图片描述

PaddleDetection中YOLOv3模型介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结
  1. YOLO发展史

    • YOLO(v1):首个单阶段目标检测深度学习模型,将目标检测当作一个单一的回归任务,基于锚框学习“形变”系数
    • YOLOv2:全卷积网络结构、Kmeans聚类anchors,多尺度训练
    • YOLOv3:新骨干网络DarkNet53,多尺度预测
  2. YOLOv3检测原理

    • 网络:输出特征图H,W维为网格
    • 锚框:9个锚框,每个尺度3个
    • 预测框:输出特征图C上为预测框信息,5+class_num
  3. PaddleDetection中的YOLOv3模型

    • 丰富的模型库。高精度高性能的YOLOv3模型
    • 一键式运行YOLOv3模型,YOLOv3模型配置文件解析
    • 集成PaddleSlim压缩能力,高性价比的YOLOv3压缩模型
    • 更快更强的PP-YOLO模型
这篇关于YOLO系列目标检测算法详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!