看的YOLO相关介绍来自
https://aistudio.baidu.com/aistudio/education/preview/667719
也有视频讲解
https://aistudio.baidu.com/aistudio/education/lessonvideo/689798
一:YOLOv1
二:YOLOv2
(从YOLOv2模型开始,YOLO已经开始使用全卷积模型【conv+batchnorm】理解输入输出是什么,分别代表什么意思就基本理解了网络结构的意思了)
1.
anchor(锚框)先验框
通过你需要检测的数据集上面通过Kmeans聚类真实框得到anchor(锚框),能有更好的检测效果
2
多尺度训练
输入的每个batch, 一个batch里有多张图,每个图的长宽都不一样,等同于将图片的宽度高度都不一样,网络在训练过程中可以学习到不同大小的图像,进而提升网络检测的效果
3
红字部分是YOLOv2/YOLOv3一直沿用的部分
三:YOLOv3
1.采用跨尺度特征融合
(绿框为改进点)
2
网络输入:N----每个batch的图片数量,3-------R G B 通道,416X416图像高度宽度
3
YOLOv3为啥有三个分支
我们先看锚框
不同anchor对不同尺度真实框进行检测,大anchor(32X32感受野大)分配大的真实框,小anchor(8X8感受野小)分配小真实框,通过YOLOv3的不同anchor分别对大中小尺寸进行检测,即根据真实框的尺寸进行分工,提高效率,这就是为啥有三个输出的原因了
4
锚框到预测框
锚框只是我们先验的超参数,但我们需要的不是锚框,而是输出的预测框
输入图像,经过下采样最终得到4 X 4大小的图片,物理上将图片理解为H、W为4的图片
5
目标置信度(边框置信度):0表示没有,1表示有
上图一值狗,用了一个黄色边框框住,我们划分了很多网格,为了判定派出锚框去检测框网格是否包含物体,带回预测框和目标置信度。我们使用目标置信度来检测是否包含目标。
6
H、W划分网格
C通道表征预测框数量
7
我们需要利用调整锚框,让预测框调整到与真实框一模一样
通过kmeans聚类得到锚框尺寸
中心点偏移用sigmord:对于一个全卷积网络不加限制他的输出可以是任意值,在-∞到+∞之间,但网格大小有限制,当我们期望他偏移的值在0-1之间时,我们取sigmord函数映射到-1到1之间,
H、W用exp:因为高宽只能是正值,而exp刚好是这样的
8
利用锚框和划分的网格,锚框取取去框每个网格,通过目标置信度判断是否包含物体得到物体真实框,要表示多少真实框就有多少真实框。
通过网格粗定位和中心点偏移精确定位出物体在图像的具体位置。
通过锚框的宽度高度拉伸表示物体真实框
9
深度学习的训练过程等同于模型猜答案的过程,用答案和真实值去猜测一个loss,loss再反馈给模型是大了还是小了,再重新猜测。
用锚框使得大致的区间,再通过微调即可达到更好的效果,不用从0开始漫无目的的猜测
10
计算loss指导训练,但真实框标注的亚子和YOLOv3输出的亚子的长得不一样需要将输入整成输出的形式才能计算loss
真实框标注的亚子——》YOLOv3输出的亚子
红框长宽为H x W,为了让真实框标注变成红框的shape进行损失计算,,接下来我们需要进行真实框匹配
红框被划分为H x W个网格,真实框中心落在哪个网格就由那个网格检测该真实框(上图),但中心点落到H x W的平面上时,C通道上还有三个锚框,具体和哪个锚框匹配(上图)
11
答:后一个真实框的信息会完全覆盖住前一个真实框的信息,导致前一个真实框的信息丢失,这是YOLOv3的缺点所在,即不能检测到靠得很近的有遮挡的两个物体
12
已经知道真实框,希望预测框与真实框一样,应该如何设置调整系数(偏移量这些),就应该由真实框推出监督信息。
13
有真实框落到对应的锚框上,检测到有物体,有真实值=1,反之无真实值=0
分类:one-hot独热编码,是真实信息就是真实类别=1,反之不是真实类别=0
得到监督信息之调整好真实框的shape之后,就可以进行损失函数的计算了:
14
真实框肯定是很少的,锚框很多,这样可能出现2种状况:1取得的样本效果清晰,2只让少数锚框回归真实框,效果可能不好.
所以YOLOv3引入一种非正非负的概念:
没有真实框落在这个锚框上,但是他的回归得到的预测框效果还不错,这个预测框和任一(某一个)真实框的IOU均大于某个阈值,先不计算他的损失,继续让他学习,反而能学习到一个不错的效果。
15
目标概率objectness和分类score的取值是在0-1之间的,因为学习不一定精确,可能认为是目标、不是目标,是这个分类、不是这个分类,我们取sigmord取到0-1之间,再通过设置某个范围来判定是不是,
16
分类:softmax分类一个类别;YOLO用sigmord独立各通道分别计算实现多酚类任务的实现。
17
18
拿到YOLO的输出特征图,然后按照通道上的不同维度,做一个中心点的偏移以及拉伸,objectness通道取一个sigmord激活,计算出是否有目标的概率。
分类,取得是各类间独立,支持多分类的sigmord激活,这样可实现多分类任务
预测框评分算法:乘积是为了保障预测框内有物体并且知道是该物体的类别的概率是多少,这样才知道预测框内是这个物体的概率是多少
19
得到输出之后计算NMS
按class分类
按照score降序排列