深度学习(十六)——Faster R-CNN, YOLO

https://antkillerfarm.github.io/

Fast R-CNN(续)

ROI Pooling

SPP将图像pooling成多个固定尺度,而RoI只将图像pooling到单个固定的尺度。(虽然多尺度学习能提高一点点mAP,不过计算量成倍的增加。)

普通pooling操作中,pooling区域的大小一旦选定,就不再变化。

而ROI Pooling中,为了将ROI区域pooling到单个固定的目标尺度,我们需要根据ROI区域和目标尺度的大小,动态计算pooling区域的大小。

ROI Pooling有两个输入:feature map和ROI区域。Pooling方式一般为Max Pooling。Pooling的kernel形状可以不为正方形。

Bounding-box Regression

从Fast R-CNN的结构图可以看出,与一般的CNN不同,它在FC之后,实际上有两个输出层:第一个是针对每个ROI区域的分类概率预测(上图中的Linear+softmax),第二个则是针对每个ROI区域坐标的偏移优化(上图中的Linear)。

然后,这两个输出层(即两个Task)再合并为一个multi-task,并定义统一的loss。

这里写图片描述

由于两个Task的信息互为补充,使得分类预测任务的softmax准确率大为提升,SVM也就没有存在的必要了。

全连接层提速

Fast R-CNN的论文中还提到了全连接层提速的概念。这个概念本身和Fast R-CNN倒没有多大关系。因此,完全可以将之推广到其他场合。

这里写图片描述

它的主要思路是,在两个大的FC层(假设尺寸为u、v)之间,利用SVD算法加入一个小的FC层(假设尺寸为t),从而减少了计算量。

u×vu×t+t×v

总结

这里写图片描述

参考:

https://zhuanlan.zhihu.com/p/24780395

Fast R-CNN

http://blog.csdn.net/shenxiaolu1984/article/details/51036677

Fast RCNN算法详解

Faster R-CNN

Faster-RCNN是任少卿2016年在MSRA提出的新算法。Ross Girshick和何恺明也是论文的作者之一。

注:任少卿,中科大本科(2011年)+博士(2016年)。Momenta联合创始人+技术总监。
个人主页:
http://shaoqingren.com/

论文:

《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

代码:

https://github.com/ShaoqingRen/faster_rcnn

https://github.com/rbgirshick/py-faster-rcnn

这里写图片描述

上图是Faster R-CNN的结构图。

Fast R-CNN尽管已经很优秀了,然而还有一个最大的问题在于:proposal阶段没有整合到CNN中。

这个问题带来了两个不良影响:

1.非end-to-end模型导致程序流程比较复杂。

2.随着后续CNN步骤的简化,生成2k个候选bbox的Selective Search算法成为了整个计算过程的性能瓶颈。(无法利用GPU)

Region Proposal Networks

Faster R-CNN最重要的改进就是使用区域生成网络(Region Proposal Networks)替换Selective Search。因此,faster RCNN也可以简单地看做是“RPN+fast RCNN”。

这里写图片描述

上图是RPN的结构图。和SPPNet的ROI映射做法类似,RPN直接在feature map,而不是原图像上,生成区域。

由于Faster R-CNN最后会对bbox位置进行精调,因此这里生成区域的时候,只要大致准确即可。

这里写图片描述

由于CNN所生成的feature map的尺寸,通常小于原图像。因此将feature map的点映射回原图像,就变成了上图所示的稀疏网点。这些网点也被称为原图感受野的中心点。

把网点当成基准点,然后围绕这个基准点选取k个不同scale、aspect ratio的anchor。论文中用了3个scale(三种面积

{1282,2562,5212}
,如上图的红绿蓝三色所示),3个aspect ratio({1:1,1:2,2:1},如上图的同色方框所示)。

这里写图片描述

anchor的后处理如上图所示。

这里写图片描述

上图展示了Image/Feature Pyramid、Filter Pyramid和Anchor Pyramid的区别。

定义损失函数

这里写图片描述

对于每个anchor,首先在后面接上一个二分类softmax(上图左边的Softmax),有2个score输出用以表示其是一个物体的概率与不是一个物体的概率 (

pi
)。这个概率也可以理解为前景与后景,或者物体和背景的概率。

然后再接上一个bounding box的regressor输出代表这个anchor的4个坐标位置(

ti
),因此RPN的总体Loss函数可以定义为 :

L({pi},{ti})=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)

该公式的含义和计算都比较复杂,这里不再赘述。

上图中,二分类softmax前后各添加了一个reshape layer,是什么原因呢?

这与caffe的实现的有关。bg/fg anchors的矩阵,其在caffe blob中的存储形式为[batch size, 2x9, H, W]。这里的2代表二分类,9是anchor的个数。因为这里的softmax只分两类,所以在进行计算之前需要将blob变为[batch size, 2, 9xH, W]。之后再reshape回复原状。

RPN和Fast R-CNN协同训练

我们知道,如果是分别训练两种不同任务的网络模型,即使它们的结构、参数完全一致,但各自的卷积层内的卷积核也会向着不同的方向改变,导致无法共享网络权重,论文作者提出了几种可能的方式。

Alternating training

此方法其实就是一个不断迭代的训练过程,既然分别训练RPN和Fast-RCNN可能让网络朝不同的方向收敛:

a)那么我们可以先独立训练RPN,然后用这个RPN的网络权重对Fast-RCNN网络进行初始化并且用之前RPN输出proposal作为此时Fast-RCNN的输入训练Fast R-CNN。

b) 用Fast R-CNN的网络参数去初始化RPN。之后不断迭代这个过程,即循环训练RPN、Fast-RCNN。

这里写图片描述

Approximate joint training or Non-approximate training

这两种方式,不再是串行训练RPN和Fast-RCNN,而是尝试把二者融入到一个网络内训练。融合方式和上面的Faster R-CNN结构图类似。细节不再赘述。

4-Step Alternating Training

这是作者发布的源代码中采用的方法。

第一步:用ImageNet模型初始化,独立训练一个RPN网络;

第二步:仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;

第三步:使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;

第四步:仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个unified network,继续训练,fine tune Fast-RCNN特有的网络层,此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。

这里写图片描述

总结

这里写图片描述

参考:

https://zhuanlan.zhihu.com/p/24916624

Faster R-CNN

http://blog.csdn.net/shenxiaolu1984/article/details/51152614

Faster RCNN算法详解

https://mp.weixin.qq.com/s/VKQufVUQ3TP5m7_2vOxnEQ

通过Faster R-CNN实现当前最佳的目标计数

http://blog.csdn.net/zy1034092330/article/details/62044941

Faster RCNN详解

https://mp.weixin.qq.com/s/IZ9Q3fDJVawiEbD6x9WRLg

Object Detection系列(三)Fast R-CNN

YOLO

YOLO: Real-Time Object Detection,是一个基于神经网络的实时对象检测软件。它的原理基于Joseph Chet Redmon 2016年的论文:

《You Only Look Once: Unified, Real-Time Object Detection》

这也是Ross Girshick去Facebook之后,参与的又一力作。

官网:

https://pjreddie.com/darknet/yolo/

注:Joseph Chet Redmon,Middlebury College本科+华盛顿大学博士(在读)。网名:pjreddie。

pjreddie不仅是个算法达人,也是个造轮子的高手。YOLO的原始代码基于他本人编写的DL框架——darknet。

darknet代码:

https://github.com/pjreddie/darknet/

YOLO的caffe版本有很多(当然都是非官方的),这里推荐:

https://github.com/yeahkun/caffe-yolo

概述

从R-CNN到Fast R-CNN一直采用的思路是proposal+分类(proposal提供位置信息,分类提供类别信息),这也被称作two-stage cascade。

YOLO不仅是end-to-end,而且还提供了另一种更为直接的思路:直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把Object Detection的问题转化成一个Regression问题)。

这里写图片描述

上图是YOLO的大致流程:

Step 1:Resize成448x448,图片分割得到7x7网格(cell)。

Step 2:CNN提取特征和预测:卷积部分负责提特征。全连接部分负责预测。

a) 7x7x2=98个bounding box(bbox) 的坐标

xcenter,ycenter,w,h
和是否有物体的confidence。

b) 7x7=49个cell所属20个物体分类的概率。

这里写图片描述

这里写图片描述

上图是YOLO的网络结构图,它采用经过修改的GoogLeNet作为base CNN。

从表面看,YOLO的输出只有一个,似乎比Faster RCNN两个输出少一个,然而这个输出本身,实际上要复杂的多。

YOLO的输出是一个7x7x30的tensor,其中7x7对应图片分割的7x7网格。30表明每个网格对应一个30维的向量。

这里写图片描述

上图是这个30维向量的编码方式:2个bbox+confidence是5x2=10维,20个物体分类的概率占其余20维。

总结一下,输出tersor的维度是:

S×S×(B×5+C)

这里的confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:

confidence=Pr(Object)IOUtruthpred

在loss函数设计方面,简单的把结果堆在一起,然后认为它们的重要程度都一样,这显然是不合理的,每个loss项之前的参数

λ
就是用来设定权重的。

Step 3:过滤bbox(通过NMS)。

这里写图片描述

上图是Test阶段的NMS的过程示意图。

参考

https://zhuanlan.zhihu.com/p/24916786

图解YOLO

https://mp.weixin.qq.com/s/n51XtGAsaDDAatXYychXrg

YOLO比R-CNN快1000倍,比Fast R-CNN快100倍的实时对象检测!

http://blog.csdn.net/tangwei2014/article/details/50915317

论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection

https://mp.weixin.qq.com/s/Wqj6EM33p-rjPIHnFKtmCw

计算机是怎样快速看懂图片的:比R-CNN快1000倍的YOLO算法

http://lanbing510.info/2017/08/28/YOLO-SSD.html

目标检测之YOLO,SSD

http://www.yeahkun.com/2016/09/06/object-detection-you-only-look-once-caffe-shi-xian/

Object detection: You Look Only Once(YOLO)

http://blog.csdn.net/zy1034092330/article/details/72807924

YOLO

https://mp.weixin.qq.com/s/c9yagjJIe-m07twPvIoPJA

YOLO算法的原理与实现

猜你喜欢

转载自blog.csdn.net/antkillerfarm/article/details/79125959
今日推荐