论文阅读+YOLO

《YOLO:You only look Once:Unified,Real-Time Object Detection》

一、解决什么问题?


二、怎么解决的?

1.基本的思想?

1.端到端的训练和实时检测。

2.YOLO将输入图像划分为S*S个网络,如果一个物体的中心落在某个网格内,则相应网格负责检测该物体。

3.在训练和测试时,每个网络预测B个bboxs,每个bbox对应5个预测参数,即bbox中心点坐标(x,y),宽高(w,h),和置信度评分。

4.将物体检测任务看成是一个回归问题来处理,直接通过整张图片的所有像素得到bbox的坐标,box中包含的物体的置信度和类别概率。

2.算法框架

1.将图像Resize到448×448.作为神经网络的输入。

2.运行CNN。得到一些bbox的坐标、bbox中包含物体的置信度和class probabilities。

     YOLO将输入图像划分为S*S个网格,如果一个物体的中心落在某网格(cell)内,则相应网格负责检测该物体

     卷积部分负责提取特征,全连接部分负责预测98个bbox的坐标+置信度+49个cell的置信度。

    每个网络预测B个bounding boxes+C个类别得分。每个bounding box对应5个预测参数,即bounding box的中心点坐标(x,y),宽高(w,h),以及置信度得分。如果(Pr(Object)!=0,表明该网格中有物体,那么需要继续计算该网格中的物体属于某一类的后验概率Pr(Class_i|Object)-分类类别概率。

      如果将输入图像划分为7*7网格(S=7),每个网格预测2个bounding box (B=2),有20类待检测的目标(C=20),则相当于最终预测一个长度为S*S*(B*5+C)=7*7*30的向量,从而完成检测+识别任务。

3.非极大抑制,筛选boxes,优化检测结果。

3.具体的实现

3.流程和实现?

Training

首先利用ImageNet 1000-class的分类任务数据集Pretrain卷积层。使用上述网络中的前20 个卷积层,加上一个 average-pooling layer,最后加一个全连接层,作为 Pretrain 的网络。训练大约一周的时间,使得在ImageNet 2012的验证数据集Top-5的精度达到 88%,这个结果跟 GoogleNet 的效果相当。

将Pretrain的结果的前20层卷积层应用到Detection中,并加入剩下的4个卷积层及2个全连接。
同时为了获取更精细化的结果,将输入图像的分辨率由 224* 224 提升到 448* 448。
将所有的预测结果都归一化到 0~1, 使用 Leaky RELU 作为激活函数。
为了防止过拟合,在第一个全连接层后面接了一个 ratio=0.5 的 Dropout 层。

为了提高精度,对原始图像做数据提升。

神经网络输出后的检测流程

这里写图片描述

非极大值抑制

这里写图片描述


获取Object Detect 结果

这里写图片描述


三、有哪些创新点?

1.处理的方式进行了改变。没有使用滑窗或者提取proposal的方式训练网络,而是直接选用整张图片训练模型。

2.

四、有哪些需要展开讲解的部分?

1.YOLO的网络是什么样的?

1.基本的思想?(构建网络的的基本思想)

遵循GoogleNet分类网络的结构,在这个基础上不使用inception module,而是使用1×1卷积层+3×3卷积层简单代替。

2.网络的结构?

常常使用到的YOLO网络:

      YOLO使用了24个级联的卷积(conv)层和2个全连接(fc)层,其中conv层包括3*3和1*1两种Kernel,最后一个fc层即YOLO网络的输出,长度为S*S*(B*5+C)=7*7*30.如下图所示我们给出了YOLO网络的架构。



其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。

YOLO-small网络:

      作者还设计了一个简化版的YOLO-small网络,包括9个级联的conv层和2个fc层,由于conv层的数量少了很多,因此YOLO-small速度比YOLO快很多。

3.最后一层输入输出的解释?

最后一层的输出是(7×7)×30的维度。每个1×1×30的维度对应原图7×7个cell中的一个,1×1×30中含有类别预测和bbox坐标信息。总的来讲,网络负责类别信息,bbox主要负责坐标信息。

(1)每个网格需要预测2个斑驳新的坐标(x,y,w,h)。其中中西坐标(x,y)相对于对应的网格归一化到0-1之间。w,h用图像的width和height归一化到0-1之间。每个bbox除了要回归自身的位置之外,还要预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个bbox预测的有多准两重信息.如果有一个真实的bbox落在了第一个网格中,那么P(object)=1。

(2)每个网格还需要预测类别信息。论文中一共有20个类,7×7个网格,每个网格要预测2个bbox,因此输出就是(7×7)×(5×2+20)。

2.怎么训练YOLO网络的?

(1)预训练。

  • 搭建好网络=使用GoogleNet前20个卷积层,然后添加一个average pooling层和一个fc层。(预训练时的网络
  • 预训练网络=使用1000类的ImageNet2012的数据训练网络,图像的大小是224×224。

(2)微调新的层。

  • 在20个预训练好的conv层后添加4个新的conv层和2个fc层,并采用随机参数初始化这些新添加的层。(准备使用的网络
  • 使用448×448的图片训练准备使用的网络

3.损失函数

损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。
简单的全部采用了sum-squared error loss来做这件事会有以下不足:
a) 8维的localization error和20维的classification error同等重要显然是不合理的。
b) 如果一些栅格中没有object(一幅图中这种栅格很多),那么就会将这些栅格中的bounding box的confidence 置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。

这里写图片描述

解决方案如下:
更重视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(下图红色)要大。

这里写图片描述

在 YOLO中,每个栅格预测多个bounding box,但在网络模型的训练中,希望每一个物体最后由一个bounding box predictor来负责预测。
因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个 predictor就负责 predict object。
这会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。

五、其他的技术细节?

1.置信度评分是什么?有什么作用?如何计算(得到)置信度?

=>是什么?+有什么作用?(含义)

置信度评分的公式是:(Pr(Object)*IOU(pred|truth))


这个置信度得分反映了模型对于这个栅格的预测:该栅格是否含有物体,以及这个box的坐标云测有多准。

用另一个表述方式就是——这个公式综合反映了目标存在的概率和预测的位置的准确性:(Pr(Object)反映了基于当前模型bbox中存在的目标的可能性;IOU(pred|truth))反映了bbox预测目标的位置准确性。如果这个栅格中不存在一个 object,则confidence score应该为0;否则的话,confidence score则为 predicted bounding box与 ground truth box之间的 IOU(intersection over union)。

4.YOLO v1中条件类别概率的含义是什么?是在什么时候使用的?怎么计算这个值的?/如何计算后验概率Pr(Class_i|Object)-条件类别概率?

在使用神经网络对每个栅格预测位置值以及置信度得分时,还要预测C个conditional class probability(条件类别概率):

Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。 

我们只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。

这里写图片描述

这个绿色的向量的前面两个5,表示的是有两个bbox,每个bbox需要预测5个参数w,h,x,y,以及置信度c.
注意: 
conditional class probability信息是针对每个网格(cell)的。 
confidence信息是针对每个bounding box的。

=>计算:

在测试阶段,将每个栅格的conditional class probabilities与每个 bounding box的 confidence相乘: 
这里写图片描述 
这样既可得到每个bounding box的具体类别的confidence score。 
这乘积既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。

这里写图片描述

在判断网格中是否存在物体时,如果(Pr(Object)!=0,表明该网格中有物体,那么需要继续计算该网格中的物体属于某一类的后验概率Pr(Class_i|Object)。假定一共有C类物体,那么每一个网格只预测一次C类物体的条件类概率Pr(Class_i|Object), i=1,2,...,C;每一个网格预测B个bounding box的位置,就有B个后验概率值。即这B个bounding box共享一套条件类概率Pr(Class_i|Object), i=1,2,...,C。

3.YOLO对每个bbox的5个预测值分别是什么?有什么作用?怎么得到的?怎么存放?

=>分别是什么?+每个部分的含义是什么?

YOLO对每个bounding box有5个predictions:x, y, w, h, and confidence。

坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。
坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。

confidence就是预测的bounding box和ground truth box的IOU值。

=>怎么存放?


参考资料:https://blog.csdn.net/hrsstudy/article/details/70305791(有动图)


3.最后一个fc层的作用是什么?

最后一个fc层是用来预测物体属于不同类的概率+bbox中心点坐标x,y和高宽w,h。bbox的高宽是相对于图像归一化后得到的,bbox的中心位置的坐标是相对于某一个网络的位置坐标进行过归一化,因此x,y,w,h的值在[0,1]之间。

YOLO在googlenet的基础上没有使用inception module,而是使用1x1卷积层+3x3卷积层简单替代?有什么好处?

(1)使用1×1的原因:1x1卷积层能够跨通道信息整合。

4.设计损失函数时面临什么样的问题?有哪些?又是如何解决的?

在设计Loss函数时,有两个主要的问题:

(1).最后一层的预测结果的大小是7×7×30的向量,通常情况下使用平方和误差来计算预测的loss。然而这种Loss函数的位置误差和分类误差是1:1的关系。

(2).我们认为当物体的中心位于网格内才能判断网格包含物体,因此实际上大多数的网格是不包含物体的。整个图有7*7个网格,如果只计算Pr(Class_i),很多网格的分类概率为0,网格loss呈现出稀疏矩阵的特性,使得Loss收敛效果变差,模型不稳定。

为了解决上述问题,作者采用了一系列的方案:

(1)增加bounding box坐标预测的loss权重,降低bounding box分类的loss权重。坐标预测和分类预测的权重分别是λcoord=5,λnoobj=0.5.

(2).平方和误差对于大和小的bounding box的权重是相同的,作者为了降低不同大小bounding box宽高预测的方差,采用了平方根形式计算宽高预测loss,即sqrt(w)和sqrt(h)。


5.请问每个栅格的conditional class probability是怎么算的?

softmax对每一个类别都有一个输出,这个输出就是conditional class probability。

六、对其分析和评价?

1.该方法的特点?

(1)一次性可以预测多个Box位置和类别。

(2)实现了端到端的目标检测和识别。

(3)速度快!

(4)在物体定位时更容易出错,但是癌背景上预测出不存在的物体(FP样本)的情况会少一些。

(5)YOLO和DPM、R-CNN等物体检测系统相比,能够学到更加抽象的物体特征。者可以使得YOLO可以从真实图像领域迁移到其他领域,比如:艺术。

(6)每张图片只需要看一次就能够得到图像中有哪些物体以及这些物体的位置。

2.该方法的优点?

1、YOLO检测物体非常快。
因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

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

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

3.该方法的缺点?

1、YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。 

2、YOLO容易产生物体的定位错误。
3、YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

七、对YOLO方法的理解和看法?

1.为什么直接使用整张图片训练模型?这样做的好处是什么?

之前采用的proposal训练的Fast-RCNN常常把背景区域误检测为特定目标。我们希望解决这个问题,因此,我们使用整张图片作为输入训练模型,可以更好的区分目标和背景区域。


八、基础和发展?

1.该模型是怎么产生的?

YOLO之前的物体检测方法主要是通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器去判断每个 bounding box里是否包含有物体,以及物体所属类别的 probability或者 confidence,如R-CNN,Fast-R-CNN,Faster-R-CNN等。

2.各个物体检测系统的检测流程对比?



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值