0%

yolov1解读笔记

自己回顾yolo系列算法,并做个笔记进行巩固。

YOLOV1

one stage

对比RCNN模型的目标检测,做法都是先从图片中用一些方法(selective search、RPN等)给出一些可能存在对象的候选区,再对每个候选区做特征提取之后做目标分类和bbox回归。

所以称之为two stage, 即

image-20240418110145775

yolo其实并没有真正的去掉候选区域,而是在模型结构上相较rcnn并没有rpn网络,只有一个cnn网络,yolo是创造性的将候选区与目标分类合二为一。

yolo采用预定义预测区域的方法来完成目标检测,具体做法是:

  1. 输入图像先resize为448×448

  2. 图像划分为7×7的网格,每个网格大小是64×64

  3. 每个网格根据预定义,预测2个检测目标的矩形框(YOLOV1是随机产生2个bbounding box, 既没有提前设置长宽比,也没有设置尺度,就随机任意生成,只要bbounding box的中心在这个网格内,长宽比和大小任意)。那么此时整个图像相当于有98个预测区,这个预定义的前提是一张图像内包含98个目标的情况很少

  4. 对这98个区域进行目标分类和bbox回归,再进行NMS就可以得到最终的目标检测结果。

网络结构

与一般cnn结构的区别:

输出采用线性函数替换softmax函数,原因是:yolo除了要预测概率,还要预测对象的位置,softmax无法预测具体的位置。

网络输出

image-20240418113819435
7×7×30 向量:7×7对应所有网格,30对象每个网格的2个bbox的位置和置信度以及在voc数据集上20种类别的分类概率

2个bbox位置:(x_center, y_center, bbox_width, bbox_height)

2个bbox的置信度:bbox内存在对象的概率×bbox与真实bbox的IOU

image-20240418114417632

关于网格:

如上图所示:

黄色框代表目标的GT值,也就是车、狗、自行车的真实位置,根据真实值可以知道每个目标的中心点即上图绿色的点落在了49个网格中的哪些网格即上图绿色的网格,那么中心点所在的网格就负责进行预测这个目标,其他网格因为bbox内存在对象的概率为0,那么对应的置信度也为0了,即使有的bbox可能与真实框交并比值很大,也因为置信度为0不会造成干扰。

以上图左上角汽车举例,黄色框为GT,中心点落在绿色小框内,所以中线点落在绿色小框的预测框有汽车的pr为1,比如蓝色大框,即便与汽车真实框的IOU值不低,但是蓝色大框的中心点并不在绿色小框而是在蓝色小框,那么对应的蓝色大框预测有汽车的置信度为0。

损失函数

49个格点,含有物体的格点往往只有3、4个,其余全是不含有物体的格点。此时如果不采取点措施,那么物体检测的mAP不会太高,因为模型更倾向于不含有物体的格点。lambdacoordlambdanoobj的作用,就是让含有物体的格点,在损失函数中的权重更大,让模型更加“重视”含有物体的格点所造成的损失

image-20240418145918216