Fast R-CNN存在的问题:选择性搜索,非常耗时。

解决:加入一个提取边缘的神经网络,将候选框的选取交给神经网络。

在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变换问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)

具体做法:

1、将RPN放在最后一个卷积层的后面

2、RPN直接训练得到的候选区域

RPN简介:

1. 在feature map上滑动窗口

2. 建一个神经网络用于物体分类 + 框位置回归

3. 滑动窗口的位置提供了物体的大体位置信息

4. 框的回归提供了框更精确的位置

一种网络,四个损失函数:

1. RPN classification(anchor good.bad)

2. RPN regression(anchor-->proposal)

3. Fast R-CNN classification(over classes)

4. Fast R-CNN regression(proposal-->box)

测试过程:

Faster R-CNN统一的网络结构如下图所示,可以简单看做RPN + Fast R-CNN

注意在RPN网络中的那两个全连接层是并联的,不是串联的,图有点小问题

注意:上图Fast R-CNN中含有特有卷积层,并不是所有卷积层都参与共享

1. 首先向CNN网络(ZF或VGG-16)输入任意大小图片

2. 经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图

3. 供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制(阈值为0.7),输出其Top-N得分的区域建议给ROI池化层

4. 第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征

5. 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box

速度对比:

Faster R-CNN的主要贡献就是设计了提供候选区域的网络RPN,代替了费时的选择性搜索Selective Search,使得检测速度大幅提高。

总结各个算法的步骤:

RCNN

1. 在图像中确定约1000-2000个候选框(使用选择性搜索Selective Search)

2. 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取

3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4. 对于属于某一类别的候选框,用回归器进一步调整器位置

Fast R-CNN

1. 在图像中确定约1000-2000个候选框(使用选择性搜索Selective Search)

2. 对整张图片输入CNN,得到feature map

3. 找到每个候选框在feature map中的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类

5. 对于属于某一类别的候选框,用回归器进一步调整器位置

Faster R-CNN

1. 对整张图片输入CNN,得到feature map

2. 卷积特征输入到RPN,得到候选框的特征信息

3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4. 对于属于某一类别的候选框,用回归器进一步调整器位置

简言之,

R-CNN(Selective Search + CNN + SVM)

SPP-net(ROI Pooling)

Fast R-CNN(Selective Search + CNN + ROI)

Faster R-CNN(RPN + CNN + ROI)

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

  1. 【目标检测】SSD+Tensorflow 300&512 配置详解

    SSD_300_vgg和SSD_512_vgg weights下载链接[需要科学上网~]: Model Training data Testing data mAP FPS SSD-300 VGG-b ...

  2. Python聚类算法之基本K均值实例详解

    Python聚类算法之基本K均值实例详解 本文实例讲述了Python聚类算法之基本K均值运算技巧.分享给大家供大家参考,具体如下: 基本K均值 :选择 K 个初始质心,其中 K 是用户指定的参数,即所 ...

  3. [转]EM算法(Expectation Maximization Algorithm)详解

    https://blog.csdn.net/zhihua_oba/article/details/73776553 EM算法(Expectation Maximization Algorithm)详解 ...

  4. 搜索引擎算法研究专题五:TF-IDF详解

    搜索引擎算法研究专题五:TF-IDF详解 2017年12月19日 ⁄ 搜索技术 ⁄ 共 1396字 ⁄ 字号 小 中 大 ⁄ 评论关闭   TF-IDF(term frequency–inverse ...

  5. 目标检测算法(一):R-CNN详解

    参考博文:https://blog.csdn.net/hjimce/article/details/50187029 R-CNN(Regions with CNN features)--2014年提出 ...

  6. R-CNN目标检测的selective search(SS算法)

    候选框确定算法 对于候选框的位置确定问题,简单粗暴的方法就是穷举或者说滑动窗口法,但是这必然是不科学的,因为时间和计算成本太高,直观的优化就是假设同一种物体其在图像邻域内有比较近似的特征(例如颜色.纹 ...

  7. 目标检测复习之Faster RCNN系列

    目标检测之faster rcnn系列 paper blogs1: 一文读懂Faster RCNN Faster RCNN理论合集 code: mmdetection Faster rcnn总结: 网络 ...

  8. DPLL 算法(求解k-SAT问题)详解(C++实现)

    \(\text{By}\ \mathsf{Chesium}\) DPLL 算法,全称为 Davis-Putnam-Logemann-Loveland(戴维斯-普特南-洛吉曼-洛夫兰德)算法,是一种完备 ...

  9. 二分算法题目训练(四)——Robin Hood详解

    codeforces672D——Robin Hood详解 Robin Hood 问题描述(google翻译) 我们都知道罗宾汉令人印象深刻的故事.罗宾汉利用他的射箭技巧和他的智慧从富人那里偷钱,然后把 ...

  10. Canny边缘检测算法原理及C语言实现详解

    Canny算子是John Canny在1986年提出的,那年老大爷才28岁,该文章发表在PAMI顶级期刊上的(1986. A computational approach to edge detect ...

随机推荐

  1. openstack Q版部署-----keystone认证服务安装配置(3)

    一.新建数据库及用户(控制节点) 登录数据库,创建db以及用户: CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'ke ...

  2. 20165221—JAVA第六周学习心得

    课本知识点小结 第8章:常用实用类 String类 常量对象放入常量池中,而用string声明的对象变量中存放着引用.凡是new构造的常量都不在常量池中. startIndex表示提取字符的起始位置, ...

  3. C 和 C++ 一些基础

    位运算: Part1: #include <iostream> using namespace std; int main(int argc, char *argv[]) { //unsi ...

  4. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  5. LwIP Application Developers Manual10---LwIP IPv4/IPv6 stacks

    1.前言 lwIP正在加入IPv6,一个实验性的版本可以通过git下载,该版本实现了一个IPv4/IPv6的双协议栈.通过在lwipopts.h定义LWIP_IPV6可以使能IPv6 2.已实现的IP ...

  6. Go语言程序开发初涉

    由于工作原因,现在开始学习Go语言.这也是本人第一篇关于Go的博客.本文将通过一些基本概念的说明和实际案例,使得大家能快速对Go程序的开发有个了解. 一. Go的安装 :     在 https:// ...

  7. js加密转python3

    //add by wangp at 2018-01-23 密码加密方法 start function encrypt(pwd){ var key = "MIIBIjANBgkqhkiG9w0 ...

  8. requests库入门10-超时,错误与异常

    在实际发布到生产上的接口测试代码,都会加上超时的设置,当服务器超过一定时间没有响应,会报出超时异常.因为requests会自动等待响应.如果不加上超时的设置,可能脚本会一直卡在那里.. 超时设置在请求 ...

  9. 《超越C++标准库:Boost库导引》:序

    序(Foreword) C++社区正在发生着一些美妙的事情.尽管C++仍然是世界上使用最广泛的编程语言,它依旧在变得更加强大而且易用.不信么?容我慢慢道来. 当前版本的标准C++是在1998年最终确定 ...

  10. 部署openfaas

    首先必须部署Docker CE 17.05或者以上版本. 首先卸载旧版本, $ sudo yum remove docker \ docker-common \ docker-selinux \ do ...