转载自:

深度学习(十八)CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续 - hjimce的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/hjimce/article/details/50187029

基于R-CNN的物体检测

原文地址:http://blog.csdn.net/hjimce/article/details/50187029

作者:hjimce

一、相关理论

本篇博文主要讲解2014年CVPR上的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》,这篇文章的算法思想又被称之为:R-CNN(Regions with Convolutional Neural Network Features),是物体检测领域曾经获得state-of-art精度的经典文献,2013年ILSVRC2013的冠军,一口气把原来的物体检测的精度从40%提高到了53%,引用率非常高。所以如果你搞物体检测方面,肯定会接触到这个算法。

这篇paper的思想,改变了物体检测的总思路,现在好多文献关于深度学习的物体检测的算法,基本上都是继承了这个思想,比如:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,所以学习经典算法,有助于我们以后搞物体检测的其它paper。

之前刚开始接触物体检测算法的时候,老是分不清deep learning中,物体检测和图片分类算法上的区别,弄得我头好晕,终于在这篇paper上,看到了解释。物体检测和图片分类的区别:图片分类不需要定位,而物体检测需要定位出物体的位置,也就是相当于把物体的bbox检测出来。图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少,如何用少量的标注数据,训练高质量的模型,这就是文献最大的创新点,这篇paper采用迁移学习的思想,对CNN模型进行参数初始化,精度飙涨,具体后面在讲,让大家先知道这篇paper最值得我们学的思想就是无监督预训练,这也是我我觉得最早利用无监督学习方法应用于CNN中,之前虽然有看到一些图片的无监督训练(反卷积算法),但是感觉好像不顶用,引用的人也非常少。

二、算法实现

开始讲解算法前,我们需要算法的总体思路,把握总体思路,才容易理解paper的算法。

1、算法总体思路 

图片分类与物体检测不同,物体检测需要定位出物体的位置,这种就相当于回归问题,求解一个包含物体的方框。而图片分类其实是逻辑回归。这种方法对于单物体检测还不错,但是对于多物体检测就……因此paper采用的方法是:

首先输入一张图片,我们先定位出2000个物体候选框,然后采用CNN提取每个候选框中图片的特征向量,特征向量的维度为4096维,接着采用svm算法对各个候选框中的物体进行分类识别。也就是总个过程分为三个程序:a、找出候选框。b、利用CNN提取特征向量 c、利用SVM进行特征向量分类。具体的流程如下图片所示:

2、算法实现细节

(1)候选框搜索

让我们输入一张图片时,我们要搜索出所有是物体的区域,这个采用的方法是传统文献的算法:《search for object recognition》,这个我们搜索出2000个候选框。然后我们从上面的总流程图中可以看到,我们搜出的候选框,是矩形的,而且是大小各不相同。但是我们知道CNN对输入图片的大小是有固定的,如果把搜索到的矩形选框不做处理,就扔进CNN中,肯定不行。因此对于每个输入的候选框都需要缩放到固定的大小,当然paper的缩放很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227。(这个时候其实我们可以想到,一张矩形图片,如果强制把它缩放到227*227的正方形图片,肯定会发生扭曲,就像上面总流程图中的图3,这个方法可定会识别精度,所以在后来的另外一篇paper中:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》才改进了这个输入图片的扭曲问题,在这篇博文中,我们暂且不考虑图片是否发生扭曲)

(2)CNN特征提取

a、网络设计

CNN的网络结构方面与Alexnet网络相同(除了最后一层的softmax层之外),图片输入的大小是227*227,如果还不知道Alexnet的,还是先好好学习经典paper《ImageNet Classification with Deep Convolutional》,这是入门必学的文章。Alexnet特征提取部分包含了5个卷积层、2个全连接层。通过这个网络,我们每个输入候选框图片都能得到一个4096维的特征向量。

b、网络训练

物体检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况下,最好的是采用无监督学习的方法进行预训练,然后在进行有监督的参数微调。这个应该是深度学习的灵魂了,之前看过DBM,稀疏自编码、RBM等,听过这种思路,但是在CNN里面怎么用,却一直不知道,这下子我又学了一招。我觉得这篇paper,最值得我们学的地方就是提出采用无监督训练参数初始化的方法,最后在进行有监督微调。所以上面paper在设计网络结构的时候,是直接用Alexnet的网络,然后连参数也是直接采用它的参数,作为初始的参数值。

然而我们知道CNN可以用于提取特征,我们可以利用AlexNet的前面几层,训练好的模型,进行特征提取。

未完待续,敬请期待……

SVM分类的权值矩阵为4096*N,N为分类的个数,4096便是我们通过CNN提取到的特征向量

CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续相关推荐

  1. CNN应用之SPP(基于空间金字塔池化的卷积神经网络物体检测)-ECCV 2014-未完待续

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  2. 基于R-CNN的物体检测-CVPR 2014

    转载自:http://blog.csdn.net/hjimce/article/details/50187029 一.相关理论 本篇博文主要讲解2014年CVPR上的经典paper:<Rich ...

  3. Lwip协议详解(基于Lwip 2.1.0)-ICMP协议 (未完待续)

    4.ICMP协议 4.1 原理 IP协议提供的是一种不可靠无连接的数据服务,在IP数据报被交互到最终目的主机的过程中,网络中每一个路由器都是自主运行,它们根据数据报中的目的IP地址为数据报选择的最佳路 ...

  4. CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续

    转载自:深度学习(二十)CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/ ...

  5. python数据库开发 dga_DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测)...

    DGA-detection DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测) This project impleme ...

  6. 深度学习(十八)基于R-CNN的物体检测-CVPR 2014-未完待续

    基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一.相关理论 本篇博文主要讲解2014 ...

  7. 激光雷达:最新趋势之基于RangeView的3D物体检测算法

    作者丨巫婆塔里的工程师@知乎 来源丨https://zhuanlan.zhihu.com/p/406674156 编辑丨3D视觉工坊 之前在LiDAR点云物体检测算法的综述中提到了四个发展阶段.在最开 ...

  8. 深度学习(二十)基于Overfeat的物体检测-2014 ICLR-未完待续

    基于Overfeat的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187881 作者:hjimce 一.相关理论 本篇博文主要讲解经 ...

  9. 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

最新文章

  1. OSC源创会往期图文回顾链接地址收藏
  2. CNN模型 int8量化实现方式(二)
  3. 批量修改文件夹下图片名称(Python)
  4. java 初始化顺序_Java中对象初始化顺序的详细介绍
  5. 47 APScheduler安装及基本概念
  6. python 隐马尔可夫链
  7. VTK:Filtering之Glyph3D
  8. JAVA字符串格式化-String.format()使用
  9. php 图片无法删除,php如何删除上传的图片
  10. win10更换系统启动时候的图片
  11. iphone开发常用编码
  12. [刘阳Java]_Spring相关配置介绍_第5讲
  13. C++ 预编译头文件stdafx.h
  14. 使用scrapy-redis构建简单的分布式爬虫
  15. 属性篇(3)—If you love css …
  16. BMFont艺术字库制作
  17. 人人开源项目搭建到服务器,人人开源框架的部署
  18. 虚拟化实战——存储(二)
  19. python的for语句有几种写法_python的for循环写法
  20. 数学公式div是什么意思

热门文章

  1. 数据挖掘导论读书笔记3--分类
  2. 在路上---一个平凡人的2015年总结及2016年展望
  3. 涉及支付,资金方案的操作要考虑的问题
  4. 清除WebLogic8.1缓存
  5. spring启动过程之源码跟踪(上)--spring Debug
  6. php中的大括号用法
  7. 跟我学大数据分析:多维度数据分析报告
  8. Make!Sense 动手好伴侣,带你轻松做实验
  9. java中上传文件有哪些框架,Spring MVC系列教材 (八)- SPRING MVC 上传文件
  10. Shell printf 命令