R-CNN全称为Region-CNN,它可以说是第一个成功地将深度学习应用到目标检测上的算法。后面提到的Fast R-CNN、Faster R-CNN全部都是建立在R-CNN的基础上的。

传统目标检测流程:

(1)区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)

(2)特征提取(SIFT、HOG等;形态多样性、光照变换多样性、背景多样性使得特征鲁棒性差)

(3)分类器分类(SVM、Adaboost)

一、RCNN思路(Selective Search + CNN + SVM)

R-CNN遵循传统目标检测的思路,同样采用,对每个框提取特征、图像分类、非极大值抑制四个步骤进行目标检测,只不过进行了部分的改进。

  • 经典的目标检测算法使用滑动窗法去依次判断所有可能的区域。而这里预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断,大大减少了计算量
  • 将传统的特征(如SIFT,HOG特征等)换成了深度卷积网络提取特征

&创新点

  1. 采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力

  2. 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题

二、算法步骤

数据集采用pascal VOC,这个数据集的object一共有20个类别。首先用selective search方法在每张图像上选取约2000个region proposal,region proposal就是object有可能出现的位置。然后根据这些region proposal构造训练和测试样本,注意这些region proposal的大小不一,另外样本的类别是21个(包括了背景)

简要步骤如下:

(1)输入测试图像,利用选择性搜索selective search在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal

(2)先在每个建议框周围加上16个像素值为建议框像素平均值的边框,在直接变形为227x227的大小(Alexnet的尺寸)

(3)先将所有建议框像素减去该建议框像素平均值,将每个227x227输入Alexnet CNN网络获取4096维特征。2000个建议框的CNN特征组合成2000x4096维矩阵

(4)将2000x4096维特征与20个SVM组成权值矩阵4096x2000相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000x20维矩阵表示每个建议框是某个物体类别的得分

(5)对上述2000x20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框

(6)分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box

具体步骤如下:

步骤一:下载一个分类模型(Alexnet)

步骤二:对该模型做fine-tuning

  • 将分类数从1000改为21,比如20种物体 + 1个背景

  • 去掉最后一个全连接层

步骤三:特征提取

  • 提取图像的所有候选框(选择性搜索Selective Search)

  • 对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(对候选框提取到的特征)存到硬盘

步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别

每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative。

比如下图,就是狗分类的SVM

步骤五:使用回归器精细修正候选框位置:对每一个类,训练一个线性回归模型去判定这个框是否框的完美

&缺点

R-CNN第一步对原始图片通过Selective Search提取的候选框region proposal多大2000个左右,而这2000个候选框每个框度需要进行CNN提取特征 + SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都要47s

参考地址:

https://cloud.tencent.com/developer/news/281788

https://blog.csdn.net/wopawn/article/details/52133338

https://www.cnblogs.com/zyly/p/9246221.html

目标检测算法之R-CNN算法详解的更多相关文章

  1. 目标检测之Faster-RCNN的pytorch代码详解(模型准备篇)

    十月一的假期转眼就结束了,这个假期带女朋友到处玩了玩,虽然经济仿佛要陷入危机,不过没关系,要是吃不上饭就看书,吃精神粮食也不错,哈哈!开个玩笑,是要收收心好好干活了,继续写Faster-RCNN的代码 ...

  2. 目标检测之Faster-RCNN的pytorch代码详解(模型训练篇)

    本文所用代码gayhub的地址:https://github.com/chenyuntc/simple-faster-rcnn-pytorch  (非本人所写,博文只是解释代码) 好长时间没有发博客了 ...

  3. 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)

    首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple- ...

  4. OpenCV: Canny边缘检测算法原理及其VC实现详解(转载)

    原文地址:http://blog.csdn.net/likezhaobin/article/details/6892176 原文地址:http://blog.csdn.net/likezhaobin/ ...

  5. Canny边缘检测算法原理及其VC实现详解(一)

    转自:http://blog.csdn.net/likezhaobin/article/details/6892176 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个 ...

  6. Floyd算法(一)之 C语言详解

    本章介绍弗洛伊德算法.和以往一样,本文会先对弗洛伊德算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3 ...

  7. Dijkstra算法(一)之 C语言详解

    本章介绍迪杰斯特拉算法.和以往一样,本文会先对迪杰斯特拉算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法 ...

  8. 二分算法题目训练(二)——Exams详解

    CodeForces732D——Exams 详解 Exam 题目描述(google翻译) Vasiliy的考试期限将持续n天.他必须通过m门科目的考试.受试者编号为1至m. 大约每天我们都知道当天可以 ...

  9. spfa算法及判负环详解

    spfa     (Shortest Path Faster Algorithm) 是一种单源最短路径的算法,基于Bellman-Ford算法上由队列优化实现. 什么是Bellman_Ford,百度内 ...

  10. Canny边缘检测算法原理及其VC实现详解(二)

    转自:http://blog.csdn.net/likezhaobin/article/details/6892629 3.  Canny算法的实现流程 由于本文主要目的在于学习和实现算法,而对于图像 ...

随机推荐

  1. 关于VXLAN的认识-----ovs+vxlan多链路负载分担的实现方法

    一.应用环境 目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不 ...

  2. Going Home HDU - 1533 费用流

    http://acm.hdu.edu.cn/showproblem.php?pid=1533 给一个网格图,每两个点之间的匹配花费为其曼哈顿距离,问给每个的"$m$"匹配到一个&q ...

  3. T-SQL 数值函数

    MS SQL Server数字函数可以应用于数值数据,并返回数值数据. 下面是带有示例的数值函数列表. ABS() 输出给定值的绝对值. 例 以下查询将输出-22的绝对值:22. Select ABS ...

  4. MySQL建库建表

    一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...

  5. Jmeter下载安装配置及使用(windows)

    1 前言 仅作为记录使用. 2 步骤 2.1 下载地址:http://jmeter.apache.org/download_jmeter.cgi 2.2 选择binary版本即可:apache-jme ...

  6. docker的安装及项目部署

    Making Docker and Deployment Process Step: set up your docker environment build a image of activeMQ ...

  7. Python-Django-Ajax进阶

    ajax上传文件: <h2>基于ajax上传文件</h2><p>名字 <input type="text" id="filena ...

  8. Codeforces 446C DZY Loves Fibonacci Numbers [线段树,数论]

    洛谷 Codeforces 思路 这题知道结论就是水题,不知道就是神仙题-- 斐波那契数有这样一个性质:\(f_{n+m}=f_{n+1}f_m+f_{n}f_{m-1}\). 至于怎么证明嘛-- 即 ...

  9. css3 曲线阴影,翘边阴影

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 配置 Confluence 6 安全的最佳实践

    让一个系统能够变得更加坚固的最好办法是将系统独立出来.请参考你公司的安全管理策略和相关人员来找到你公司应该采用何种安全策略.这里有很多事情需要我们考虑,例如考虑如何安装我们的操作系统,应用服务器,数据 ...