【论文笔记】—目标检测—YOLOv1—2016-CVPR

论文介绍

​题目:You Only Look Once: Unified, Real-Time Object Detection

DOI:10.1109/CVPR.2016.91

时间:2015-6-8上传于arxiv
会议:2016-CVPR
机构:美国-华盛顿大学
作者:Joseph Redmon、Santosh Divvala、Ross Girshick

论文链接:https://arxiv.org/abs/1506.02640
工程链接:https://pjreddie.com/darknet/yolo/
video:https://www.youtube.com/watch?v=NM6lrxy0bxs

提出问题

在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了打破这一僵局,设计一种速度更快的目标检测器是大势所趋。

解决方案

YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。

1-YOLO检测系统:使用YOLO处理图像既简单又直接。

  1. 将输入图像的大小调整为448×448,
  2. 在图像上运行单个卷积网络,
  3. 根据模型的置信度阈值结果检测。

创新点

YOLO 的检测速度非常快,每秒可以处理45帧图片(448x448),63.4%mAP准确率,能够轻松地实时运行。

图像分类:输入图像,输出类别(a);
目标检测输入图像,输出每个物体的检测框(b);
图像分割:语义分割(不区分同类物体)(c)、实例分割(区分每个物体)(d)。

YOLO-V1网络模型

  1. 训练阶段:梯度下降和反向传播的方法,迭代的微调神经元中的权重,使得损失函数最小化的过程。
  2. 预测阶段:模型训练成功之后,输入未知图片,对位置图片进行预测,这时不需要训练,不需要反向传播,只需要前向推断。
  3. 预测阶段后处理:置信度过滤,非极大值抑制。

  • 网络结构借鉴GoogLeNet ,24层卷积层提取图像特征;2层全连接层回归得到7x7x30的tensor。
  • 网络输入:448×448×3的彩色图片。
  • 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
  • 网络输出:7×7×30的预测结果。

检测策略:

  • 颜色代表不同的类别。
  • 框的粗细代表每个bounding box的置信度。
  • 每个网格(grid cell)预测一组条件类别概率,记为 C 个类。将一幅图像分成 S×S个grid cell,如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
  • 每个grid cell预测 B 个bounding box,每个 bounding box 要预测四个位置参数(x, y, w, h) 和 置信度confidence(预测目标和真实目标的交并比) 共5个值。
  • 总的来说,S×S 个网格,每个网格要预测 B个bounding box ,还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。

在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。PASCAL VOC数据集有20个类别,所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。

模型输出的意义:

Confidence预测、Bounding box预测、类别预测。具体参考

损失函数:

误差平方和的方法,图片引用

关于loss,需要特别注意的是需要计算loss的部分。并不是网络的输出都算loss,具体地说:

  • 有物体中心落入的cell,需要计算分类loss,两个predictor都要计算confidence loss,预测的bounding box与ground truth IOU比较大的那个predictor需要计算xywh loss。
  • 特别注意:没有物体中心落入的cell,只需要计算confidence loss。

每一项loss的计算都是L2 loss,即使是分类问题也是。所以说yolo是把分类问题转为了回归问题。

实验结果

1-PASCAL VOC 2007 数据集上的实时检测。

比较Fast YOLO检测模型的性能和速度。Fast YOLO是PASCAL VOC检测记录中最快的探测器,其精度是任何其他实时检测模型的两倍。YOLO比Fast YOLO精确10 mAP。而且YOLO实时检测的平均精度是其他实时监测系统的两倍。

mAP:均值平均精度(Mean Average Precision)。作为 object dection 中衡量检测精度的指标。

mAP计算公式为:mAP = 所有类别的平均精度求和除以所有类别。

FPS:每秒传输帧数(Frames Per Second)。FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。FPS也可以理解为我们常说的“刷新率(单位为Hz)

4-Fast R-CNNYOLO错误比例分析

Fast R-CNN区分物体和背景的性能差,但定位性能好;
YOLO区分物体和背景的性能好,但定位性能差;

2-Fast R-CNN和不同模型集成的效果:

和YOLO集成后的模型mAP显著提升。模型集成要“好而不同”优势互补。

3- PASCAL VOC 2012测试集各个类别的性能和模型排行榜。

YOLO对相互靠近的物体,以及很小的群体检测效果不好。

5-毕加索和人物艺术数据集的泛化结果。

(a)毕加索数据集行人这个类别的Pr曲线,YOLO最好。
(b)在自然图像训练后,放在艺术作品上的预测,YOLO在艺术作品上没有掉分。

6-真实艺术作品上的预测结果:

YOLO-V1运行在来自互联网的样本艺术品和自然图像上。它基本上是准确的,唯一的错误认为一个人是一架飞机。

YOLO-V1性能表现

1)优点:

  • YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
  • YOLO 实时检测的平均精度是其他实时监测系统的两倍。
  • 迁移能力强,能运用到其他的新的领域(比如艺术品目标检测)。
  • 使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。

2)局限:

  • yolov1对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),检测效果不好,因为yolov1的模型决定了一个grid只能预测出一个物体,所以就会丢失目标,针对这一点,yolov2引入了anchor的概念,一个grid有多少个anchor理论上就可以预测多少个目标。
  • 小目标检测效果不好,因为yolov1网络到后面感受野较大,小目标的特征无法再后面7*7的grid中体现,针对这一点,yolov2已作了一定的修改,加入前层(感受野较小)的特征进行融合。
  • 测试图像中,当同一类物体出现的不常见的长宽比和其他情况时泛化能力偏弱。
  • 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。

YOLO-V1的一些思考:

假设类别预测不是共享的,cell中两个predictor都有各自的类别预测,这样能否在一个cell中预测两个目标?

对于第一个问题,答案是否定的。如果一个cell要预测两个目标,那么这两个predictor要怎么分工预测这两个目标?谁负责谁?不知道,所以没办法预测。而像faster rcnn这类算法,可以根据anchor与ground truth的IOU大小来安排anchor负责预测哪个物体,所以后来yolo2也采用了anchor思想,同个cell才能预测多个目标。

为什么要预测两个bounding box

对于第二个问题,既然我们一个cell只能预测一个目标,为什么还要预测两个bounding box(或者更多)?这个还是要从训练阶段怎么给两个predictor安排训练目标来说。在训练的时候会在线地计算每个predictor预测的bounding box和ground truth的IOU,计算出来的IOU大的那个predictor,就会负责预测这个物体,另外一个则不预测。这么做有什么好处?我的理解是,这样做的话,实际上有两个predictor来一起进行预测,然后网络会在线选择预测得好的那个predictor(也就是IOU大)来进行预测。通俗一点说,就是我找一堆人来并行地干一件事,然后我选干的最好的那个。

一个grid cell中是否有object怎么界定?

首先要明白grid cell的含义,以文中7*7为例,这个size其实就是对输入图像(假设是224*224)不断提取特征然后sample得到的(缩小了32倍),然后就是把输入图像划分成7*7个grid cell,这样输入图像中的32个像素点就对应一个grid cell。回归正题,那么我们有每个object的标注信息,也就是知道每个object的中心点坐标在输入图像的哪个位置,那么不就相当于知道了每个object的中心点坐标属于哪个grid cell了吗,而只要object的中心点坐标落在哪个grid cell中,这个object就由哪个grid cell负责预测,也就是该grid cell包含这个object。另外由于一个grid cell会预测两个bounding box,实际上只有一个bounding box是用来预测属于该grid cell的object的,因为这两个bounding box到底哪个来预测呢?答案是:和该object的ground truth的IOU值最大的bounding box。

关于“Object的中心落在哪个网格,就由哪个网格检测这个object”的理解?

在训练过程中,假设Object的中心落在网格1中,网格1产生两个bboxs,哪个bbox与该Object的ground truth(即训练集中该Object的人工标注框)的IOU大,就选取这个bbox来检测Object,也就是,把该网格预测的这个bbox作为predict box,和ground truth做运算得到loss。随着训练过程不断反馈,loss降低,网格预测的bbox越来越准确(越来越接近ground truth),最终得到一个精准的检测模型。

关于yolov1要求输入图像尺寸固定的解释?

因为yolov1的最后一层为全连接层,全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接层的计算其实相当于输入的特征图数据矩阵和全连接层权值矩阵进行内积。如: z=wx+b,全连接神经网络结构一旦固定,需要学习的参数w是固定的,例如 输入图像是 28*28 = 784,w 的转置=(500,784),=> 输出矩阵的shape:(500,1),如果输入图像的大小改变,但是w的大小并不会改变,因此,无法计算。

这里没有理解是因为暗含这样一份个知识点:

卷积到全连接,所有卷积会一条接一条变成一个全连接的上层 X,比如上面的  28*28 = 784,z=wx+b,如果尺寸不固定,多出来一个 785,就没法 和 w(500,784)去相乘了,有些人就要问了,那我此时改变w为(500,785)不行嘛?也可以,但是,你训练要很多个step,甚至 epoch(pass)去更新,那,尺寸不固定,这一个step这个神经元训练到了,下一回没训练到,那就没法收敛了。

参考资料:

参考博客:参考博客

网络讲解:视频讲解

论文精读:论文精度

参考博客:参考博客

知乎分享:你真的读懂yolo了吗? - 知乎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值