参考列表

Selective Search for Object Recognition 
Selective Search for Object Recognition(菜菜鸟小Q的专栏) 
Selective Search for Object Recognition(Surge) 
Selective Search for Object Recognition(原始论文) 
Efficient Graph-Based Image Segmentation(快速图像分割) 
Homepage of Koen van de Sande

非极大值抑制(Non-maximum suppression)在物体检测领域的应用 
Efficient Non Maximum Suppression 笔记(不完整版)

如何评价rcnn、fast-rcnn和faster-rcnn这一系列方法? 
RCNN的安装与简单使用

Ross B. Girshick(RCNN系列开创者) 
rbg’s home page

RCNN 
Rich feature hierarchies for accurate object detection and semantic segmentation 
https://github.com/rbgirshick/rcnn

Fast RCNN 
Fast R-CNN 
https://github.com/rbgirshick/fast-rcnn

Faster RCNN 
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 
https://github.com/rbgirshick/py-faster-rcnn 
https://github.com/ShaoqingRen/faster_rcnn

You Only Look Once 
You Only Look Once: Unified, Real-Time Object Detection 
YOLO Object Detection(视频)

RCNN

最早的物体识别,是通过窗口扫描的方式进行,并且需要对图片进行几个级别的缩放来重复进行。 
这种方式非常暴力,计算量大。 
RCNN主要解决的是去掉窗口扫描,用聚类方式,对图像进行分割分组,得到多个侯选框的层次组。 
分割分组方法有很多,RCNN用到的是Selective Search。

以下就是RCNN的结构。

  • 从原始图片,通过Selective Search提取出区域候选框,有2000个左右
  • 把所有侯选框缩放成固定大小
  • 然后通过CNN网络,提取特征
  • 再添加两个全链接层,然后再用SVM分类,回归来微调选框位置与大小

Fast RCNN

RCNN有两千个左右的候选框,都要进行CNN操作。但候选框有大量重叠,造成重复计算。 
Fast RCNN就是解决这个问题的。

  • 利用CNN(卷积神经网络),得到整个原始图片的特征层
  • 在原始图片上通过Selective Search等方法,提取出域候选框
  • 把候选框投影到最后的特征层,并进行Max-Pooling采样,得到固定大小的特征矩形
  • 然后再通过两个全连接层,分别用softmax分类,regressor进行选框位置与大小微调

Faster RCNN

在上面的 RCNN 与 Fast RCNN中,相对于在GPU上计算的CNN,在CPU上运行的提取候选框效率低下,一张图片大概需要2秒。 
Faster RCNN则直接利用CNN来计算候选框,方式如下:

  • 原始图片经过CNN,得到最后的卷积特征
  • 利用3×3的矩形进行扫描,得到256维的向量(相当于再添加了一个卷积层,卷积核为3×3,输出特征数为256)
  • 3×3的特征层映射到最初图片,是一块比较大的固定区域,在此固定区域上进行长宽变形,比如分别3个缩放级别,则一共有9个不同的矩形区域,称做anchor box。9就是上图中的k值。
  • 对上图中的k个anchor box进行是否是物体判断预测,和矩形框位置与大小微调
  • 选出物体框后,再利用同Fast RCNN同样的方式,对物体类别进行判断
  • 选框与分类使用同样的CNN网络

一张1000×600的图片,大概可以得到20k个anchor box(60×40×9)。 
anchor box的设置应比较好的覆盖从大到小的区域,如下图:

注 
这里有一点疑惑,3×3的卷积核对应的原始图是块固定区域(感受野),并没有包含区域外的信息,如何做到预测更大区域的物体位置? 
或者类似于人的感知,比如只看到部分人像,推测整个人像的大小?看到老虎的头,预测整个老虎的位置与大小?

You Only Look Once

Faster RCNN需要对20k个anchor box进行判断是否是物体,然后再进行物体识别,分成了两步。 
YOLO(You Only Look Once)则把物体框的选择与识别进行了结合,一步输出,即变成”You Only Look Once”。 
所以识别速度非常快,达到每秒45帧,而在快速版YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。 
网络的整体结构如下图:

  • 把原始图片缩放成448×448大小
  • 运行单个卷积网络
  • 得到物体的位置与类别

模型如下:

  • 把缩放成统一大小的图片分割成S×S的单元格
  • 每一个单元格负责输出B个矩形框,每一个框带四个位置信息(x, y, w, h),与一个该框是物体的概率,用Pr(Object)或者C(Confidence)表示
  • 每一个单元格再负责输出C个类别的概率,用Pr(Class∣Object)表示
  • 最终输出层应有S×S×(B∗5+C)个单元

相关说明:

  • 如果一个物体的中心落入一个单元格,则该单元格上的B个矩形框的位置信息都为该物体的位置信息,
  • C个概率中对应该物体类别值为1,其它为0。
  • x, y表示中心相对于单元格左上角的位置偏移,单元格左上角为(0, 0),右下角为(1, 1)
  • w, h表示矩形框的宽与高,都是相对于整个图片的相对值,全副图片大小为(1, 1),长宽都一半就是(0.5, 0.5)

最终输出时,是物体的概率乘以类别概率,才是整体识别到是一个物体的概率:

Pr(class)=Pr(Class∣Object)∗Pr(Object)

在论文You Only Look Once: Unified, Real-Time Object Detection中,S = 7,B = 2,C = 20。 
所以输出的单元数为7×7×30。

具体的网络结构如下:

从上图的结构可以看到,倒数第二层是一个全连接层,所以最终的单元输出整合了全局信息,更好地预测图像区域。

训练

整个网络最后一层为线性激活,其它层都为Leaky Rectified Linear激活方式:

ϕ(x)={x,0.1x,if x > 0otherwise

因为一张图片中,大部分单元格中都没有落入物体中心,所以引入两个参数λcoord=5,λnoobj=0.5。 
整个网络的代价函数变成:

J=λcoord∑i=0S2∑j=0B1objij(xi−x^i)2+(yi−y^i)2+λcoord∑i=0S2∑j=0B1objij(wi−−√−w^i−−√)2+(hi−−√−h^i−−√)2+∑i=0S2∑j=0B1objij(Ci−C^i)2+λnoobj∑i=0S2∑j=0B1noobjij(Ci−C^i)2+∑i=0S21objij∑c∈classes(pi(c)−p^i(c))2

因为物体有大有小,如果用差平方来做代价,则造成对大物体位置更好的优化,才发现小物体位置更差的优化,所以上面改成用开方后再做差平方。 
我认为用以下方式可能更好:

(wi−w^iw^i)2+(hi−h^ih^i)2

什么时候跑了实验,有了结果再来确认。

YOLO的局限性

  • 最终有一个全连接层,所以各单元格能够利用全局信息,但是造成初始图片只能缩放成固定大小
  • 初始图片有缩放,则可能对不同缩放比的物体覆盖不全,造成无法识别极端缩放比的物体
  • 每一个单元格只选择一个物体框来用,并只预测一个类别,所以当多个物体中心落入一个单元格时,YOLO无能为力,表现成不能识别到小物体

NMS

通过上面的RCNN, Fast RCNN, Faster RCNN 或 YOLO 方法,图片中的同一个物体,可能识别出来多个选框。 
这时需要进行选优,去掉重复的框。 
非极大值抑制(Non-maximum suppression,NMS)就是拿来干这个的。

如上图所示,一共有6个识别为人的框,每一个框有一个置信率。 
现在需要消除多余的:

  • 按置信率排序: 0.95, 0.9, 0.9, 0.8, 0.7, 0.7
  • 取最大0.95的框为一个物体框
  • 剩余5个框中,去掉与0.95框重叠率大于0.6(可以另行设置),则保留0.9, 0.8, 0.7三个框
  • 重复上面的步骤,直到没有框了,0.9为一个框
  • 选出来的为: 0.95, 0.9

两个矩形的重叠率计算方式如下:

如图,矩形的左上角坐标为x1, y1, 右下角坐标为x2, y2,两个矩形的面积分别为A, B。

  • 取两个矩形左上角坐标的最大值x1_max, y1_max
  • 取两个矩形右下角坐标的最小值x2_min, y2_min
  • 重叠区域的宽w为max(0, x2_min - x1_max),高h为max(0, y2_min - y1_max)
  • 重叠率为 w×hA+B−w×h

如下的两个矩形,重叠率为0:

paper 111:图像分类物体目标检测 from RCNN to YOLO的更多相关文章

  1. 目标检测系列 --- RCNN: Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

    目标检测系列 --- RCNN: Rich feature hierarchies for accurate object detection and semantic segmentation Te ...

  2. 目标检测--之RCNN

    目标检测--之RCNN 前言,最近接触到的一个项目要用到目标检测,还有我的科研方向caption,都用到这个,最近电脑在windows下下载数据集,估计要一两天,也不能切换到ubuntu下撸代码~.所 ...

  3. 【目标检测】R-CNN系列与SPP-Net总结

    目录 1. 前言 2. R-CNN 2.0 论文链接 2.1 概述 2.2 pre-training 2.3 不同阶段正负样本的IOU阈值 2.4 关于fine-tuning 2.5 对文章的一些思考 ...

  4. 目标检测之R-CNN系列

    Object Detection,在给定的图像中,找到目标图像的位置,并标注出来. 或者是,图像中有那些目标,目标的位置在那.这个目标,是限定在数据集中包含的目标种类,比如数据集中有两种目标:狗,猫. ...

  5. 目标检测(一) R-CNN

    R-CNN全称为 Region-CNN,它是第一个成功地将深度学习应用到目标检测的算法,后续的改进算法 Fast R-CNN.Faster R-CNN都是基于该算法. 传统方法 VS R-CNN 传统 ...

  6. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN

    参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...

  7. 多目标检测分类 RCNN到Mask R-CNN

    最近做目标检测需要用到Mask R-CNN,之前研究过CNN,R-CNN:通过论文的阅读以及下边三篇博客大概弄懂了Mask R-CNN神经网络.想要改进还得努力啊... 目标检测的经典网络结构,顺序大 ...

  8. [目标检测] 从 R-CNN 到 Faster R-CNN

    R-CNN 创新点 经典的目标检测算法使用滑动窗法依次判断所有可能的区域,提取人工设定的特征(HOG,SIFT).本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上用深度网络提取特征, ...

  9. 目标检测-Faster R-CNN

    [目标检测]Faster RCNN算法详解 Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with r ...

随机推荐

  1. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. linux recv 返回值与linux socket 错误分析

    转载:http://blog.csdn.net/henry115/article/details/7054603 recv函数 int recv( SOCKET s, char FAR *buf, i ...

  3. [MetroUI-1]无边框模式

    Wpf中取消边框,使用 WindowStyle="None" AllowsTransparency="True"

  4. jQuery设计思想之取值和赋值

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 测试的程序 test.php,保存放IIS的根目录下

    IIS+PHP的配置的方法,试过之后很多都不能达到效果.于是总结了大部分的文章后就得出了这样的方法 一.下载必须的程序:(1) 先到PHP的官方网站下载一个PHP(本文就以PHP 4.4.2为例).网 ...

  6. Web前端开发基础 第四课(CSS元素分类)

    元素分类 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <di ...

  7. JS读写cookie以及中文乱码解决

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092489.html 转载请注明. Js获取所有的cookie信息: var cookiename = d ...

  8. 从客户端中检测到有潜在危险的 request.form值[解决方法]

    当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?如下图所示: 下面博主汇总出现这种错误的几种解决方法:问题原因:由于在asp.net中,Requ ...

  9. Linux内存管理基本概念

    1. 基本概念 1.1 地址 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分.在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址.( ...

  10. 【iCore3 双核心板】例程十三:SDIO实验——读取SD卡信息

    实验指导书及代码包下载: http://pan.baidu.com/s/1hqM787E iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...