CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续
转载自:
深度学习(十八)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-未完待续相关推荐
- CNN应用之SPP(基于空间金字塔池化的卷积神经网络物体检测)-ECCV 2014-未完待续
基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...
- 基于R-CNN的物体检测-CVPR 2014
转载自:http://blog.csdn.net/hjimce/article/details/50187029 一.相关理论 本篇博文主要讲解2014年CVPR上的经典paper:<Rich ...
- Lwip协议详解(基于Lwip 2.1.0)-ICMP协议 (未完待续)
4.ICMP协议 4.1 原理 IP协议提供的是一种不可靠无连接的数据服务,在IP数据报被交互到最终目的主机的过程中,网络中每一个路由器都是自主运行,它们根据数据报中的目的IP地址为数据报选择的最佳路 ...
- CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续
转载自:深度学习(二十)CNN应用之基于Overfeat的物体检测-2014 ICLR-未完待续 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/ ...
- 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 ...
- 深度学习(十八)基于R-CNN的物体检测-CVPR 2014-未完待续
基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一.相关理论 本篇博文主要讲解2014 ...
- 激光雷达:最新趋势之基于RangeView的3D物体检测算法
作者丨巫婆塔里的工程师@知乎 来源丨https://zhuanlan.zhihu.com/p/406674156 编辑丨3D视觉工坊 之前在LiDAR点云物体检测算法的综述中提到了四个发展阶段.在最开 ...
- 深度学习(二十)基于Overfeat的物体检测-2014 ICLR-未完待续
基于Overfeat的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187881 作者:hjimce 一.相关理论 本篇博文主要讲解经 ...
- 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014
基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...
最新文章
- OSC源创会往期图文回顾链接地址收藏
- CNN模型 int8量化实现方式(二)
- 批量修改文件夹下图片名称(Python)
- java 初始化顺序_Java中对象初始化顺序的详细介绍
- 47 APScheduler安装及基本概念
- python 隐马尔可夫链
- VTK:Filtering之Glyph3D
- JAVA字符串格式化-String.format()使用
- php 图片无法删除,php如何删除上传的图片
- win10更换系统启动时候的图片
- iphone开发常用编码
- [刘阳Java]_Spring相关配置介绍_第5讲
- C++ 预编译头文件stdafx.h
- 使用scrapy-redis构建简单的分布式爬虫
- 属性篇(3)—If you love css …
- BMFont艺术字库制作
- 人人开源项目搭建到服务器,人人开源框架的部署
- 虚拟化实战——存储(二)
- python的for语句有几种写法_python的for循环写法
- 数学公式div是什么意思