美文网首页
YOLOv1学习笔记

YOLOv1学习笔记

作者: 罗泽坤 | 来源:发表于2020-06-12 19:36 被阅读0次

YOLO 全称You Only Look Once,属于目标检测算法的One-Stage算法,One-Stage和Two-Stage算法的区别在于算法的过程中有没有进行Region Proposal的操作。R-CNN家族都有Region Proposal的过程,YOLO是直接对建议区进行预测,并且YOLO还将分类与边框回归融为一体。

\color{red}{ 1、模型结构与输入输出解析}

YOLO Architecture

先来看看YOLO论文中的网络结构,由24个卷积层后面接着两个全连接层组成,除了最后一个全连接层用的是线性激活函数其他都是用的ReLU Leaky,最后输出的是一个7x7x30的张量,那么这个张量是个什么意思嘞?

图片来源YOLO论文 输入输出映射关系图

YOLOv1是没有Region Proposal的因此只能够通过预测Bounding Box然后根据Ground Truth进行回归使得模型能够学会去预测框的大小和位置。YOLO的设计思想是首先将输入图片划分成7X7的grid cell那么图片中的物体中心点一定落在某个grid cell之内,中心点落在哪个grid cell之内就由其预测该物体。输出层张量为7x7x30的张量,这个7X7X30对应的就是原始图片分割之后的每个网格,值不过是由一个小块通过卷积和池化变成了一个30维度的向量。因为每个grid cell负责预测两个bounding box,每个bounding box有4个参数(x,y,w,h)前面两个是中心点相对于图片左上角的坐标,后两个是bbox的宽和高因此这8个参数就占据了8个维度,每个bbox还有一个置信度(confidence),置信度是用来衡量bbox中有物体且框相对于GT准确程度的量。剩下的20个维度是物体分类的概率。总的来说如果将输入图片划分成SxS个网格则其输出张量的公式为SxSx((4+1)*B+C)其中4+1为边框参数数量加上置信度B为预测的bbox数量,C为分类物体物体总数。

image.png

\color{red}{2、模型标签}

看到论文中网络模型输出为7x7x30的张量之后可能你我本能的都会想到模型的标签如何设定,7x7网格每一个负责预测一类对象,但30维张量中却饱含了两个bbox(注意YOLO中两个bbox只负责预测一类对象)两个置信度而对每一个grid cell而言我们的Ground Truth却只有一个。不像R-CNN家族有Region Proposal操作、Faster-RCNN有anchor机制,在YOLOv1中两个bbox都是通过网络前向传播预测出来的。因此对于训练阶段而言到底主要选择哪一个 bbox更新权重还需要商榷,YOLO原始论文中对有对象grid cell而言是根据两个bbox的置信度哪个大则将对应标签对应上去的。

Confidence =\operatorname{Pr}(\text { Object }) * I O U_{\text {pred }}^{\text {truth }}
置信度由模型存在对象的概率乘上交并比,对有对象grid cell中的两个bbox而言选着IOU大的那个令\operatorname{Pr}(\text { Object }) =1另一个则为零。
假设网络输出某grid cell(落在其中的对象为自行车)的向量形式如下:

grid cell input
则其对应的label如下:
counterpart label
上面的label形式是对应原图中的物体中心落在某grid cell中的情形,显然当图中物体不是很多的时候grid cell是稀疏的很多grid cell都是背景(负样本),这时候的label直接设置为全部都是零即可。

\color{red}{3、损失函数解析}

Loss
在损失函数中第一行为有对象存在的grid cell中负责预测对象的bounding box的中心坐标与GT的均方误差即中心点回归:

第二行为有对象的grid cell负责预测对象的 bbox的边框回归,注意其中的开根号是为了提高损失函数对小边框的敏感性:

第三行为有对象的置信度误差:

第四行为没有对象的置信度误差:

第五行为对象预测概率误差:

其中是权重用来设置各损失项的更新权重的重要性。

\color{red}{4、模型训练}

因为我们使用的检测数据集数据量有限且成本很大对分类任务来说很艰难因此需要预训练之后进行模型的迁移。论文中模型预训练使用的是DarkNet网络框架(DarkNet网络框架比VGG16计算量更小但是准确度更大)上前20层卷积层是通过添加平均池化层和全连接层在ImageNet1000类的数据集上进行的训练,之后去掉平均池化层和全连接层保留前20层卷积层然后通过添加4个卷积层和2个全连接层将模型变成检测模型。
又因为我们的检测模型往往需要检测细粒度(fine-grained)的物体信息,而我们预训练卷积层是输出图像的分辨率(resolution)是224x224因此我们修改网络输入层的分辨率为448x448(VOC数据集)。
在网络训练之前将图片的大小和没个bbox的宽高、偏移都进行了归一化处理。

\color{red}{5、模型推理(Inference)阶段}

模型输出每个grid cell有2个bbox总共有98个bbox我们不可能将每个bbox都输出因此在计算得分之后采用非极大值抑制(Non-Maximun Suppresion)进行边框减除。
假设某grid cell输出如下

image.png
计算最后得分指标为boundingbox的置信度乘上每一类的预测概率:
这个等式实际上是一个条件概率,表示预测某类和定位的正确程度
然后将每一个 bbox都计算得分将得分排列如下图:
image.png
每一个grid cell中有2个boundingbox每个box预测20类对象则每个grid cell有40个得分,49个cell一共1960个得分,之后我们对其进行非极大值抑制:
(1) 通过设置一个阈值直接将低于该阈值的得分设置为零.
(2) 遍历每一个对象.
(2.1) 选出对象98个得分中最大得分的boundingbox.
(2.1.1) 设置IOU值计算最大得分的box与其他 box的IOU值
当大于设定的IOU值时将得分设置为零.
(2.1.2) 如果98个得分中除了最大的得分中还有未归零的得
分则除去除最大得分选择次大得分进行(2.1)操作.
(2.1.2.1) 直到对象得分不能在设置为零(continue)
(3)输出所有bbox 论文泛化结果

\color{red}{6、总结}

YOLOv1算法比Tow-stage算法在速度上提升了很多,但是在mAP和召回率上都有待改善,尤其在对小物体进行目标检测时候,每一个gridcell中有多个对像而由于每一个gridcell都只预测一类对象因此准确率比较低。

\color{blue}{references}

YOLO论文:https://arxiv.org/pdf/1506.02640.pdf
https://zhuanlan.zhihu.com/p/46691043
https://blog.csdn.net/qq_43602882/article/details/105910176

相关文章

  • YOLOv1学习笔记

    YOLO 全称You Only Look Once,属于目标检测算法的One-Stage算法,One-Stage和...

  • YOLOv1, SSD

    YOLOv1, SSD 今年四月份的时候,在一个研究院实习时学习了YOLOv1, SSD系列Object Dete...

  • 详解 YOLOv2

    YOLOv2 简单回归 YOLOv1 yolov1 中存在问题 yolo 难以应付小目标 yolo 漏检,也就是召...

  • YOLOv1——YOLOv5

    YOLOv1 YOLOv1提出单阶段anchor-free的目标检测方法将图像分为SxS的grid cell,每个...

  • YOLO 检测多张图片并保存标签信息

    YOLO是一个基于深度学习的end-to-end、real-time目标检测方法,至今已经有YOLOv1、YOLO...

  • YOLOv1 随笔

    YOLO 系列 YOLOv1 作者 AlexAB 计算机视觉 随着深度学习中卷积神经网络的发展,掀起了一次目标检测...

  • YoloV1

    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度...

  • Yolov1

    贴两个yolov1写的比较好的链接: 目标检测|YOLO原理与实现:https://zhuanlan.zhihu....

  • yolo

    https://pjreddie.com/darknet/yolo/ 一、是什么从YOLOv1到YOLOv3,目标...

  • YOLOv1论文解读——简洁版

    一、前言 结合网上的资源以及yolo的代码对yolo进行学习的一篇内容 yolov1是2016年发表的一篇目标检测...

网友评论

      本文标题:YOLOv1学习笔记

      本文链接:https://www.haomeiwen.com/subject/rbnptktx.html