YOLOv1学习笔记

论文题目:You Only Look Once:Unified, Real-Time Object Detection
论文链接:https://arxiv.org/pdf/1506.02640.pdf
YOLO官网:https://pjreddie.com/darknet/yolo/
相关笔记:目标检测学习笔记

一、YOLOv1特点与性能

1.RCNN、Fast RCNN、Faster RCNN是将目标检测问题转换成推荐区域上的分类问题来实现,属于双阶段的目标检测,YOLO是将目标检测转换成回归问题来实现,用一个单神经网络实现分类和定位,属于单阶段的目标检测。
2.YOLOv1在Titan X 的 GPU 上能达到45 FPS.

二、YOLOv1的系统结构

在这里插入图片描述

图1 YOLOv1系统

 YOLO将物体检测任务当做回归问题来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和类别概率。YOLOv1系统如图1所示,首先将原图大小缩放成448×448,然后输入单个卷积神经网络,输出目标类别和目标定位,最后通过NMS去除多余的边界框。

三、YOLOv1的优点

1.YOLOv1检测物体非常快。标准版本的YOLOv1在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLOv1检测速度可以达到155 FPS.

2.YOLOv1可以很好的避免背景错误。不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLOv1在训练和测试时都能够看到一整张图像的信息,因此YOLOv1在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLOv1的背景错误不到Fast-R-CNN的一半。

3.YOLOv1可以学到物体的泛化特征。 当YOLOv1在自然图像上做训练,在艺术作品上做测试时,YOLOv1表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLOv1可以学习到高度泛化的特征,从而迁移到其他领域。

四、YOLOv1的缺点

1.YOLOv1的物体检测精度低于其他当前最好的目标检测系统。
2.YOLOv1容易产生物体的定位错误。
3.YOLOv1对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

五、YOLOv1的检测

在这里插入图片描述

图2 YOLOv1的检测

YOLOv1的检测过程:

 1.YOLOv1将输入图像划分为S×S的栅格,每个栅格负责检测中心落在该栅格中的物体。(S×S其实是YOLOv1神经网络最后一层特征图的大小)

 2.每一个栅格预测B个bounding boxes(归一化的中心点坐标x,y,规一化的w,h),以及这些bounding boxes的confidence scores。这个 confidence scores反映了模型对于这个栅格的预测,该栅格是否含有物体,以及这个box的坐标预测的正确性。YOLOv1对每一个box都有5个预测值x, y, w, h,confidence。
 3.每个栅格需要预测C个类别,即C个类别概率。
 4.根据前三步,最后一层特征图的输出张量是S×S×(B×5 + C)。为了评估PASCAL VOC上的YOLOv1,使用S = 7,B = 2。PASCAL VOC有20个标记类,因此C = 20。最终预测是7×7×30的张量。
 5.YOLOv1输出张量的构成
 在PASCAL VOC上YOLOv1的输出张量由7×7=49个图3这样的向量构成。
在这里插入图片描述

图3 输出张量中一个维度的向量

六、YOLOv1的网络结构

在这里插入图片描述

图4 YOLOv1的网络结构

 YOLOv1的网络结构如图4所示。YOLOv1由24个卷积层和2个全连接层构成。在ImageNet-1000 class挑战赛数据集上预训练了前20层卷积(预训练输入分辨率是224×224,前20层接上一个平均池化和一个全连接进行预训练);Ren等人提出对预训练的网络再加入卷积层和全连接层能提升网络性能,因此YOLOv1又增加了4个卷积层和两个全连接层,这4个卷积层和两个全连接随机初始化;检测任务通常需要精细的视觉信息,因此将网络的输入分辨率从224×224增大成了448×448.
 YOLOv1最后一层的激活函数是线性激活函数,其他层的激活函数是leaky rectified激活函数:
在这里插入图片描述

七、YOLOv1的损失函数

1.YOLOv1损失函数
在这里插入图片描述

这个损失函数中:
 ①只有当某个网格中有object的时候才对classification error进行惩罚。
 ②只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

2.损失函数详细解释图:
在这里插入图片描述

3.损失函数设计思路
 损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。简单的全部采用了sum-squared error loss来做这件事会有以下不足:
  a) 8维的localization error和20维的classification error同等重要显然是不合理的;
  b) 如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的box的confidence push到0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。 解决方案如下:
  ①更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为 λcoord,在pascal VOC训练中取5。(上图蓝色框)
  ②对没有object的bbox的confidence loss,赋予小的loss weight,记为 λnoobj,在pascal VOC训练中取0.5。(上图橙色框)
 ③有object的bbox的confidence loss (上图红色框) 和类别的loss (上图紫色框)的loss weight正常取1。
 对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受,因为小目标偏移一点,IOU会偏移很大。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。
在这里插入图片描述

八、YOLOv1的测试过程

在这里插入图片描述

参考

【深度学习YOLO V1】深刻解读YOLO V1(图解)
yolov1原文地址以及论文翻译
目标检测(七)——YOLO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值