文章目录[隐藏]
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
暂无评论