深度学习(十六)——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\times v\to u\times t+t\times 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(三种面积
\left\{ 128^2, 256^2, 521^2 \right\},如上图的红绿蓝三色所示),3个aspect ratio({1:1,1:2,2:1},如上图的同色方框所示)。
anchor的后处理如上图所示。
上图展示了Image/Feature Pyramid、Filter Pyramid和Anchor Pyramid的区别。
定义损失函数
对于每个anchor,首先在后面接上一个二分类softmax(上图左边的Softmax),有2个score输出用以表示其是一个物体的概率与不是一个物体的概率 (
p_i)。这个概率也可以理解为前景与后景,或者物体和背景的概率。
然后再接上一个bounding box的regressor输出代表这个anchor的4个坐标位置(
t_i),因此RPN的总体Loss函数可以定义为 :
L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda \frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*)
该公式的含义和计算都比较复杂,这里不再赘述。
上图中,二分类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) 的坐标
x_{center},y_{center},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\times S \times (B \times 5 + C)
这里的confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:
\text{confidence} = \text{Pr}(Object) ∗ \text{IOU}_{pred}^{truth}
在loss函数设计方面,简单的把结果堆在一起,然后认为它们的重要程度都一样,这显然是不合理的,每个loss项之前的参数
\lambda就是用来设定权重的。
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算法的原理与实现
深度学习(十六)——Faster R-CNN, YOLO相关推荐
- 从零开始的深度学习(一) 经典CNN网络 LeNet-5
从零开始的深度学习(一) 经典CNN网络 LeNet-5 之前的四篇博客围绕着一个大作业项目来进行的入门,由于小白初涉,因此行文中有时侧重于某些并不重要的东西,同时也忽略了许多其实蛮重要的东西,再加上 ...
- NLP:LSTM之父眼中的深度学习十年简史《The 2010s: Our Decade of Deep Learning / Outlook on the 2020s》的参考文献
NLP:LSTM之父眼中的深度学习十年简史<The 2010s: Our Decade of Deep Learning / Outlook on the 2020s>的参考文献 目录 T ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression python源代码(GitHub下载 CSDN免费下载) ...
- LSTM 之父发文:2010-2020,我眼中的深度学习十年简史
作者 | Jürgen Schmidhuber 译者 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,Jürgen Schmidhuber于2月 ...
- LSTM之父发文:2010-2020,我眼中的深度学习十年简史
2020-02-23 15:04:22 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,J ...
- Faster R CNN
Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...
- Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态
1. 重磅!PyTorch落地Linux基金会 扎克伯格亲自宣布,PyTorch基金会已新鲜成立,并归入Linux基金会旗下,管理委员会成员,包括Meta.AMD.AWS.谷歌云.微软和英伟达.Met ...
- 2016深度学习统治人工智能?深度学习十大框架
2019独角兽企业重金招聘Python工程师标准>>> 2015 年结束了,是时候看看 2016 年的技术趋势,尤其是关于深度学习方面. 新智元在 2015 年底发过一篇文章< ...
- LSTM之父发文:我眼中的深度学习十年简史!
点击上方"开发者技术前线",选择"星标" 13:21 在看 真爱 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名 出品 | AI科技大本 ...
最新文章
- C++:随笔9----模板/内联函数/容器
- Oracle 10g RAC RMAN备份异机单实例恢复
- mysql 创建date,在MySQL中从DATE和TIME创建DATETIME?
- 海门工业机器人_海门工业机器人供应商稳扎稳打
- 成功解决ModuleNotFoundError: No module named 'dataset'
- Ubuntu设置宽带连接DSL
- C#模拟POST提交表单(一)--WebClient
- Pytorch基础(二)—— Transforms详解
- 一步步学习javascript基础篇(8):细说事件
- java的安装和配置
- 两种设置安卓背景图片的方法
- inventor中齿条怎么画_渐开线齿轮是怎么回事,图解6种齿轮加工工艺
- maxscale mysql 主从_MySQL高可用——MaxScale
- Linux usbkey自动登陆,Usbkey怎么用?|3分钟让您了解Usbkey使用方法
- 产品的10大设计原则
- 射频信号发生器的应用选择
- 人工智能实践:tensorflow笔记
- python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
- 要事优先——《卓有成效的管理者》读书笔记
- 开运算和闭运算的异同