YOLO系列目标检测算法详解
作者:互联网
目录
前言 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
将目标检测当作一个单一的回归任务
- yolov1原理
将图像划分为SS个网格
物体bbox中心落在哪个网格上,就由该网格对应锚框负责检测该物体
输出特征图的宽度、高度(H、W)维上即为SS个网格
输出特征图通道(C)维上组织x,y,w,h, Pobject, classification(one-hot)信息
YOLOv2
YOLOv3- YOLOv3目标检测原理
- 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结构。
-
YOLOv3网络的输入输出
-
锚框
在COCO数据集上KMeans聚类了9(3*3)种尺度的anchor(先验的超参数)
锚框只给出了框的宽度和高度,怎么去表示图像中物体真实框?
有多少个真实框?分别在图像的哪个位置?
锚框的宽度和高度是固定的,物体真实框的宽度和高度各种各样,怎么去表示?
- 从锚框到预测框
输出特征图高度、宽度为H, W,相当于将图像划分为H*W个网格
图像的每个网格对应输出特征图HW平面上一个点 - 为什么要有锚框
为什么要有锚框?
对于YOLOv3来说,巨人的名字叫”锚框“ - 在数据集上Kmeans聚类得到锚框
- 生成的预测框**仅需要在锚框基础上”微调“**即可
- 收敛更快,效果更好
- 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
-
YOLO发展史
- YOLO(v1):首个单阶段目标检测深度学习模型,将目标检测当作一个单一的回归任务,基于锚框学习“形变”系数
- YOLOv2:全卷积网络结构、Kmeans聚类anchors,多尺度训练
- YOLOv3:新骨干网络DarkNet53,多尺度预测
-
YOLOv3检测原理
- 网络:输出特征图H,W维为网格
- 锚框:9个锚框,每个尺度3个
- 预测框:输出特征图C上为预测框信息,5+class_num
-
PaddleDetection中的YOLOv3模型
- 丰富的模型库。高精度高性能的YOLOv3模型
- 一键式运行YOLOv3模型,YOLOv3模型配置文件解析
- 集成PaddleSlim压缩能力,高性价比的YOLOv3压缩模型
- 更快更强的PP-YOLO模型
标签:真实,YOLOv3,检测,锚框,YOLO,网格,算法,详解 来源: https://blog.51cto.com/u_11495341/3036178