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×v→u×t+t×v

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(三种面积

{1282,2562,5212}

\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输出用以表示其是一个物体的概率与不是一个物体的概率 (

pi

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

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

ti

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

L({pi},{ti})=1Ncls∑iLcls(pi,p∗i)+λ1Nreg∑ip∗iLreg(ti,t∗i)

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) 的坐标

xcenter,ycenter,w,h

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×S×(B×5+C)

S\times S \times (B \times 5 + C)

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

confidence=Pr(Object)∗IOUtruthpred

\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相关推荐

  1. 从零开始的深度学习(一) 经典CNN网络 LeNet-5

    从零开始的深度学习(一) 经典CNN网络 LeNet-5 之前的四篇博客围绕着一个大作业项目来进行的入门,由于小白初涉,因此行文中有时侧重于某些并不重要的东西,同时也忽略了许多其实蛮重要的东西,再加上 ...

  2. 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 ...

  3. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  4. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  5. LSTM 之父发文:2010-2020,我眼中的深度学习十年简史

    作者 | Jürgen Schmidhuber 译者 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,Jürgen Schmidhuber于2月 ...

  6. LSTM之父发文:2010-2020,我眼中的深度学习十年简史

    2020-02-23 15:04:22 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,J ...

  7. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  8. Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态

    1. 重磅!PyTorch落地Linux基金会 扎克伯格亲自宣布,PyTorch基金会已新鲜成立,并归入Linux基金会旗下,管理委员会成员,包括Meta.AMD.AWS.谷歌云.微软和英伟达.Met ...

  9. 2016深度学习统治人工智能?深度学习十大框架

    2019独角兽企业重金招聘Python工程师标准>>> 2015 年结束了,是时候看看 2016 年的技术趋势,尤其是关于深度学习方面. 新智元在 2015 年底发过一篇文章< ...

  10. LSTM之父发文:我眼中的深度学习十年简史!

    点击上方"开发者技术前线",选择"星标" 13:21 在看 真爱 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名  出品 | AI科技大本 ...

最新文章

  1. C++:随笔9----模板/内联函数/容器
  2. Oracle 10g RAC RMAN备份异机单实例恢复
  3. mysql 创建date,在MySQL中从DATE和TIME创建DATETIME?
  4. 海门工业机器人_海门工业机器人供应商稳扎稳打
  5. 成功解决ModuleNotFoundError: No module named 'dataset'
  6. Ubuntu设置宽带连接DSL
  7. C#模拟POST提交表单(一)--WebClient
  8. Pytorch基础(二)—— Transforms详解
  9. 一步步学习javascript基础篇(8):细说事件
  10. java的安装和配置
  11. 两种设置安卓背景图片的方法
  12. inventor中齿条怎么画_渐开线齿轮是怎么回事,图解6种齿轮加工工艺
  13. maxscale mysql 主从_MySQL高可用——MaxScale
  14. Linux usbkey自动登陆,Usbkey怎么用?|3分钟让您了解Usbkey使用方法
  15. 产品的10大设计原则
  16. 射频信号发生器的应用选择
  17. 人工智能实践:tensorflow笔记
  18. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
  19. 要事优先——《卓有成效的管理者》读书笔记
  20. 开运算和闭运算的异同

热门文章

  1. JavaScript AppendChild 引发的思考
  2. ssh连接+执行系统命令
  3. Linux学习笔记-文件权限与路径
  4. Html内联定义特点,HTML5
  5. 如何将URL转换成对象
  6. 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架Element
  7. 浏览器中的机器学习:使用预训练模型
  8. 2018第三届中国数字化零售创新国际峰会9月即将震撼来袭
  9. 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移
  10. eval、json.parse()的介绍和使用注意点