原论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation.

文章目录

前言

一、RCNN的步骤

二、各个步骤详解

1.Extract region proposals

2.Compute CNN features

3.Classify regions

三、代码


前言

RCNN是比较老的行人检测算法,用到的各项技术也都是很古老的方法,对于算法急速更新的现状来看,它的作用不大,但是却可以帮助我们入门行人检测算法。充分理解它的每个过程可以帮助我们对行人检测有个大概了解,在以后学习其它行人检测算法时不至于毫无头绪。

一、RCNN的步骤

  1. Input image:顾名思义,即输入数据集的图片。
  2. Extract region proposals:使用selective search生成约2000个候选框
  3. Compute CNN features:将候选框转换成同意大小输入AlexNet,提取特征向量(此处使用AlexNet(可以选择其它网络结构,如VGG16)网络的五个卷积层和两个全连接层,输出2048维的特征向量)
  4. Classify regions:分别训练svm分类器和bounding box回归器 

论文原图

二、各个步骤详解

看了前面的过程可能不是很理解,那么以下开始详细介绍每个过程:

1.Extract region proposals

selective search产生候选框可以参考选择性搜索(Selective Search)算法 - 知乎 (zhihu.com)。读者可以详细看完该篇文章再返回来接着看下去。

2.Compute CNN features

  1. selective search产生的候选框大小不一,需要对图片进行处理,使其变成统一的大小,原文使用了最简单的处理方式,即将图片铺张或压缩到227×227大小
  2. 对网络进行预训练,学习提取特征的能力。原文在数据集ILSVRC2012 classification上进行预训练
  3. 网络微调。由于前面学习到的特征提取针对的数据集不一定是我们要检测的数据集,其特征提取能力在更换了数据集之后会不稳定,因此要在检测数据集上对网络进行微调训练。在微调时,将网络最后一层全连接层的1000维输出修改为n+1维(n为检测数据集的物品种类,1为背景background)。在训练过程中,使用IOU>=0.5(IOU参考深度学习中的IoU概念理解_鬼 | 刀的博客-CSDN博客_iou是什么意思)的候选框作为正样本,其余为负样本。
  4. 在微调后,正式训练时,不要全连接层的最后一层,输出2048维的特征向量供后面的分类器和回归器训练。

3.Classify regions

  1. svm分类器的训练:训练n个分类器(n为检测数据集的类别数),每个类别一个分类器。那么问题来了,在训练分类器时什么样本为正样本,什么样本为负样本呢?原文作者使用IOU来区分正样本和负样本。原文特意提到了IOU的门槛值将在很大程度上影响分类结果的准确性。假设设置门槛值为0.5,那么IOU>=0.5的被认定为该类别的正样本,其余被认定为背景。
  2. Bounding box回归器训练。原文是在论文附件中说明回归过程的。具体可以参见边框回归(Bounding Box Regression)详解_南有乔木NTU的博客-CSDN博客_bounding box regression

三、代码

Rcnn代码地址:GitHub - yangxue0827/RCNN at 4530523c6ae1108db622bd4f9ea76e0ae10fd6a5

参考博客RCNN算法(github代码复现理解)--学习记录2 - 知乎 (zhihu.com)

RCNN原文理解与代码分析相关推荐

  1. 面向对象的三大特征,封装、继承、多态的个人理解以及代码分析

    面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写, 不知道过程就找不到结果,找到实现过程就可以得到实现结果. 例如: 我们在外打工租房子,我们需要了解 ...

  2. 图像分割——Multi-Scale and Pyramid Network Based Models( PSPN)理解和代码分析

    Multi-Scale and Pyramid Network Based Models 简介: 多尺度分析(Multi-scale analysis)是一个比较古老的算法,他的主要思想是,通过自适应 ...

  3. Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明)

    Mask_RCNN翻译和详解笔记一(原文翻译+源代码+代码使用说明) 2018年06月01日 23:45:47 阅读数:332 原文:https://github.com/matterport/Mas ...

  4. tensorflow笔记:多层LSTM代码分析

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

  5. 【Spring Boot官方文档原文理解翻译-持续更新中】

    [Spring Boot官方文档原文理解翻译-持续更新中] 文章目录 [Spring Boot官方文档原文理解翻译-持续更新中] Chapter 4. Getting Started 4.1. Int ...

  6. 低代码分析盘点:银行业低代码应用需要规避两大误区

    易观分析:低代码不等于无代码,需要明确低代码与无代码开发平台的差异,同时,低代码不是一个行业概念或者技术概念,低代码不局限于具体的应用场景,而是可以应用在各类系统.应用.组件的开发中.易观分析针对&q ...

  7. 【翻译】Google在构建静态代码分析工具方面的经验教训

    软件bug耗费开发者和软件公司大量的时间和金钱. 以2014年为例,被广泛使用的SSL协议实现中的一个("goto fail")bug导致可接受无效的SSL证书,另外一个与日期格式 ...

  8. Lucene原理与代码分析(高手博客备忘)

    2019独角兽企业重金招聘Python工程师标准>>> 随笔 - 69  文章 - 77  评论 - 687 随笔分类 - Lucene原理与代码分析 Lucene 4.X 倒排索引 ...

  9. Device Tree(三):代码分析

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请 ...

最新文章

  1. JNI中C调用Java方法
  2. mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束
  3. Unet项目解析(5): 数据封装、数据加载、数据显示
  4. 简单计算机面试题库及答案_试讲可以看教案吗?必看的面试考前问题解答
  5. “成长”必经之路:越努力越幸运
  6. 2018CHD-ACM新生赛(正式赛)E.解救迷茫的草滩小王子
  7. redis相关技能积累
  8. 实验代做 行人识别_《行人跨模态重识别 | 双向限制的排序损失》
  9. Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
  10. Vim 实用技术,第 1 部分: 实用技巧(转)
  11. hibernate 基本步骤 一
  12. CFree 5.0最新注册码
  13. 通用评估神经网络鲁棒性方法—CLEVER
  14. 用Python3创建httpServer
  15. 辛客小杰个人博客源码
  16. 墨刀未能成功读取服务器,墨刀体验小感
  17. 运动会分数统计的实验报告(数组实现)
  18. 智能穿戴设备的“最强心脏”
  19. 计算机专业的,颜值很高是一种怎样的赶脚?
  20. 塔木德分财产,有图,快速过关

热门文章

  1. 如何用panda3d写一个游戏
  2. 冯诺依曼体系结构与操作系统的理解
  3. [前端] 键盘事件常用操作
  4. 数据结构杂谈(七)——串
  5. 洛谷 P3924 康娜的线段树 解题报告
  6. 计算机联锁的64D半自动闭塞,64d半自动闭塞—本科毕业设计(论文).doc
  7. 电子元器件的分类有哪些?
  8. php7不支持random函数生成随机字符串
  9. 一文直观理解编译型语言、解释型语言和脚本语言的区别
  10. tkinter简明教程