目录
一:前言
YOLOv1(You Only Look Once v1)是一种经典的目标检测算法,由Joseph Redmon等人在2015年提出。相比于传统的目标检测方法,YOLOv1具有更快的速度和较好的实时性能。
YOLOv1的核心思想是将目标检测问题转化为一个回归问题,并通过一个单一的卷积神经网络来同时预测目标的类别和边界框。具体而言,YOLOv1将输入图像分成一个固定大小的网格(通常是7x7或14x14),每个网格单元负责检测该单元中是否存在目标以及目标的位置和类别。
与传统的RCNN的区别在哪?
YOLO是一种单阶段(One-Stage)检测器,而RCNN是一种两阶段(Two-Stage)检测器。YOLO在一个网络中直接进行目标检测,同时预测目标的类别和边界框,无需额外的候选区域生成步骤。而RCNN首先生成候选区域,然后对每个候选区域进行分类和边界框回归。
在每个网格中,YOLO会预测固定数量的边界框,每个边界框包含一个目标的边界框坐标(通常使用(x, y, w, h)表示,表示边界框的中心坐标和宽高)和目标的类别概率。预测的类别概率是多类别分类问题,使用softmax函数将输出映射到概率分布。
二:YOLO-V1中心思想
先通过iou筛选出两个(几个看你的图片)需要微调的候选框,但不是每个都需要微调,得看看有没有框住这个物体,也就是置信度confidence,大于阈值的再做微调!然后如果还有两个以上的,那就计算iou,拿出比较大的当作结果。
原理很简单,最后的7*7*30的话,其中30是5+5+20,两个五是那两个黄色框(锚框)表示的四个坐标和一个置信度,20表示这个物体在20种类里边的概率分别是多少!
B是锚框的个数,像上面的图片的B是2,S*S是7*7
三:计算损失
(1):位置损失
这个箭头的意思,只计算我的iou值最大的那个。因为可能会有多个都微调到了边界框,而我只需要一个 。然后算真实值与预测值的差异平方损失
为什么高宽要加上根号的损失?
因为对于同样的偏移宽度,对于大物体来说,影响没那么大,但是对于小物体而且,影响就非常大了。看图就知道了
改进加根号后就不一样了:
(2):置信度损失
C和C^是置信度和设定的iou做损失,目的是让这个iou尽量达到我预期设置的iou,如果iou是1,那么我的置信度肯定也很高。框住物体了。最大是1
不含有物体的就希望他为0,λ是权重损失,因为背景不那么重要,很明显,前景的系数是1,而背景的系数是λ,那么想让背景的权重变低,就把λ设置为0.1设置更小
(3):分类损失
一般就是,假设我现在框住的这个目标的真实值是狗,那么把这个20个概率里面的预测狗的概率与真实狗的概率做交叉熵损失就行了,这个简单,这里跟之前说的softmax的预测衣服是一样的。
最后:把所有损失加起来即可
四:总结
Yolov1的存在问题:小物体难以检测。多标签的物体不好预测。当物体黏在一起的时候,就不能预测出来另外一个,因为他的锚框只能检测一个类别,
五:所有项目代码链接
视频,笔记和代码,以及注释都已经上传网盘,放在主页置顶文章