yolov1的学习笔记

ps:本文仅为个人学习yolov1(通过b站up同济子豪兄的学习视频)时记录的东西。关于损失函数的部分并未理解透彻,所以并未有笔记。因为未学习过神经网络,所以中间涉及的部分个人是当作黑盒来理解的。可能有错,望指出。

Yolov1介绍:

YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。

YOLOv1将目标检测问题当作回归问题解决。不需要提取候选框,是单阶段模型,一次性预测出boundingbox和类别的卷积神经网络,能够实现端到端的目标检测和识别。

优点:

速度快,增强版本在 Titan X 的 GPU 上 能够达到 45 帧每秒,简化版本则155帧每秒

因为捕获的是整张图的信息,对背景识别错误比较少

迁移泛化好,在自然图像上训练的YOLO,在艺术图像上的测试结果依旧优异

缺点:

对小目标检测效果差,因为每个grid cell最多只能预测两个物体

localization误差高

实现过程的部分理解:

核心思想:

YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

YOLO网络借鉴了GoogLeNet分类网络结构。但是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合,即降维来简化计算)+3x3卷积层简单替代。

预测阶段(前向):

把输入图片(448x448)划分为SxS个grid cell(YOLOv1中S=7)

测试阶段则直接获得SxSx(5xB+C) 向量,然后进行NMS(非极大值抑制,来过滤置信度),最后得到目标检测结果。

S*S*(5*B+C)的理解:5为每个bbox的xy(相对于其对应的grid cell的坐标)、高度、宽度、是不是一个物体的置信度(是否包含物体,是则为1,不是则为0;和groundtruth的iou值;置信度的值则为前两个的乘积),B为bbox的个数,C为每个类别的条件概率,YOLOv1在voc训练集上训练,voc类别为20个,规定每个grid cell预测两个bbox,所以B=2,C=20

 

预测阶段的后处理:

NMS非极大值抑制(置信度过滤):

输出为7x7x(2x5+20)的tensor

以单个bbox为例

20为每一个类别的条件概率,5中的置信度为每一个bbox的全概率,用每一个条件概率乘以bbox的全概率,得到20个概率值。

以某一类为例

某一类里有98(7x7x2)个概率,把小于某一个特定值(自己设定)的概率抹零,然后把98个概率降序排序。单看降序排序前面的非零概率,通过比iou(若iou大于某一特定值,则判断这两个框判断的是同一个物体),然后把概率小的变为零。

iou:交并比,两个框的重叠部分的大小

训练阶段(反向):

 

YOLOv1的训练是通过反向传播的方法,来微调神经元中的权重来使得损失函数最小化。首先,训练集上是有人在图片标注好了框(即groundtruth,图中的红框),框的中心落在哪个grid cell,就由哪个grid cell的bbox来预测这个物体,并且标注好的类别就是grid cell应该预测出的类别。判断由哪个bbox来预测物体,则由bbox和正确的bbox的iou来判断,最大即可。

版权声明:本文为CSDN博主「Fluke_luck」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Fluke_luck/article/details/122401568

Fluke_luck

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Yolo系列知识点梳理(Yolov1-v5)

1 概述 Yolo系列的模型是大多数做目标检测的图像算法工程师都在使用的,使用时经常也是先用了看看效果再说,如果效果不错,有时间再回头来研究一下模型,有时甚至就忘了回过头来细究。这篇文章