目标检测算法之Fast R-CNN和Faster R-CNN原理
一、Fast R-CNN原理
在SPPNet中,实际上特征提取和区域分类两个步骤还是分离的。只是使用ROI池化层提取了每个区域的特征,在对这些区域分类时,还是使用传统的SVM作为分类器。Fast R-CNN相比SPPNet更进一步,不再使用SVM作为分类器,而是使用神经网络进行分类,这样就可以同时训练特征提取网络和分类网络,从而取得比SPPNet更高的准确度。Fast R-CNN的网络结构如下图所示
对于原始图片中的候选框区域,和SPPNet中的做法一样,都是将它映射到卷积特征的对应区域,即上图中的ROI projection,然后使用ROI池化层对该区域提取特征。在这之后,SPPNet是使用SVM对特征进行分类,而Fast R-CNN则是直接使用全连接层。全连接层有两个输出,一个输出负责分类,即上图中的softmax,另一个输出负责框回归,即上图中的bbox regressor。
先说分类,假设要在图像上检测K类物体,那么最终的输出应该是K+1个数,每个数都代表该区域为某个类别的概率。之所以是K+1个输出而不是K个输出,是因为还需要一类“背景类”,针对该区域无目标物体的情况。
再说框回归,框回归实际上要做的是对原始的检测框进行某种程度的“校准”。因为使用Selective Search获得的框有时存在一定偏差。设通过Selective Search得到的框的四个参数为(x,y,w,h),其中(x,y)表示框左上角的位置,而(w,h)表示框的宽度和高度。而真正的框的位置用(x',y',w',h')表示,框回归就是要学习参数[(x'-x)/w,(y'-y)/h,ln(w'/w),ln(h'/h)]其中(x'-x)/w,(y'-y)/h两个数表示与尺度无关的平移量,而ln(w'/w), ln(h'/h)两个数表示的是和尺度无关的缩放量。
Fast R-CNN 与SPPNet最大的区别就在于,Fast R-CNN不再使用SVM进行分类,而是使用一个网络同时完成了提取特征,判别类别和框回归三项任务。
二、Faster R-CNN原理
Fast R-CNN看似很完美了,但在Fast R-CNN中还存在着一个有点尴尬的问题:它需要先使用Selective Search提取框,这个方法比较慢,同时,检测一张图片,大部分时间不是花在计算神经网络分类上,而是花在Selective Search提取框上!在Fast R-CNN的升级版Faster R-CNN中,用RPN网络(Region Proposal Network)取代了Selective Search,不仅速度得到大大提高,而且还获得了更加精确的结果。
RPN网络的结构如下图所示
RPN还是需要先使用一个CNN网络对原始图片提取特征。为了方便读者理解,不妨设这个前置的CNN提取的特征为51x39x256,即高为51、宽为39、通道数为256。对这个卷积特征再进行一次卷积计算,保持宽、高、通道不变,再次得到一个51x39x256的特征。为了方便叙述,先来定义一个“位置”的概念:对于一个51x39x256的卷积特征,称它一共有51x39个“位置”。让新的卷积特征的每一个“位置”都“负责”原图中对应位置9种尺寸框的检测,检测的目标是判断框中是否存在这样一个物体,因此共有51x39x9个“框”。在Faster R-CNN的原论文中,将这些框都统一称为“anchor”。
anchor的9种尺寸如下图所示,它们面积分别是1282,2562,5122。每个面积又分为3种长宽比,分别2:1、1:2、1:1。anchor的尺寸实际是属于可调的参数,不同任务可以选择不同的尺寸。
对于这51x39个位置和51x39x9个anchor,下面这张图展示了接下来每个位置的计算步骤。设k为单个位置对应的anchor的个数,此时k=9。首先使用一个3x3的滑动窗口,将每个位置转换为一个统一的256维的特征,这个特征对应了两部分的输出。一部分表示该位置的anchor为物体的概率,这部分的总输出长度为2xk(一个anchor对应两个输出:是物体的概率+不是物体的概率)。另一部分为框回归,框回归的含义与Fast R-CNN中一样,一个anchor对应4个框回归参数,因此框回归部分的总输出的长度为4xk。
Faster R-CNN使用RPN生成候选框后,剩下的网络结构和Fast R-CNN中的结构一模一样。在训练过程中,需要训练两个网络,一个是RPN网络,一个是在得到框之后使用的分类网络。通常的做法是交替训练,即在一个batch内,先训练RPN网络,再训练分类网络一次。
R-CNN、Fast R-CNN、Faster R-CNN的对比如下表所示
从R-CNN,到Fast R-CNN,再到Faster R-CNN,不仅检测速度越来越快,而且检测的精确度也在不断提升。在出现R-CNN方法前,VOC2007数据集上传统方法所能达到的最高平均精确度(mAP)为40%左右,R-CNN将该值提高到了58.5%,Fast R-CNN在VOC2007上的平均准确度为70%,Faster R-CNN又将该值提高到了78.8%。这几种方法既一脉相承,又不断改进,值得仔细研究。
目标检测算法之Fast R-CNN和Faster R-CNN原理的更多相关文章
- (四)目标检测算法之Fast R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- 第三十节,目标检测算法之Fast R-CNN算法详解
Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2 ...
- 目标检测算法之Fast R-CNN算法详解
在介绍Fast R-CNN之前我们先介绍一下SPP Net 一.SPP Net SPP:Spatial Pyramid Pooling(空间金字塔池化) 众所周知,CNN一般都含有卷积部分和全连接部分 ...
- (五)目标检测算法之Faster R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- (六)目标检测算法之YOLO
系列文章链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- (七)目标检测算法之SSD
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. • RCNN RCN ...
- 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN
参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...
- 目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
目标检测解决的是计算机视觉任务的基本问题:即What objects are where?图像中有什么目标,在哪里?这意味着,我们不仅要用算法判断图片中是不是要检测的目标, 还要在图片中标记出它的位置 ...
随机推荐
- 前端开发JS——引用类型
10.流程控制语句 注:var obj = {}:这里的obj转换boolean语句为true if语句和java是一样的,判断条件也是根据上篇博客提到的假性值 // 弹出一个带输入框的 ...
- es7之修饰器
什么是修饰器 修饰器其实就是一个普通的函数,用来修饰类以及类的方法. 比如: @test class DecoratorTest { } function test(target) { target. ...
- UILabel的各种属性和方法
转自:http://liulu200888an.blog.163.com/blog/static/3498972320121214208542/ UILabel *label1 = [[UILabe ...
- SQL Server学习内容(一)
SQL Server SQL Server对大小写不敏感,每条语句末端使用分号. 1.SQL命令 SELECT 从数据中提取数据 UPDATE 更新数据中的数据 DELETE 从数据库中删除数据 IN ...
- liteos互斥锁(七)
1. 概述 1.1 基本概念 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理. 任意时刻互斥锁的状态只有两种,开锁或闭锁.当有任务持有时,互斥锁处于闭锁状态,这个任务 ...
- odoo10学习笔记十六:定时任务
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189382.html 一:定义定时器数据模型 模型中定义需要用到的字段.定时方法 from odoo im ...
- CentOS 7下简答搭建DNS服务器
一.DNS相关介绍 DNS(Domain Name System)域名系统协议,作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用挨个记住IP地址.通过主机名,最终得到 ...
- Django类
django 1.中间件 中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行p ...
- shell 之while两种写法
1.while[] #!/bin/dash min= max= while [ $min -le $max ] do echo $min min=`` done 2. while(()) #!/bin ...
- 【Android】从Eclipse到AndroidStudio的工程迁移
1.新建Android Studio的代码目录 2.打开AS,选择File---->New---->Import Project 3.在弹出的对话框选择Eclispe代码目录 4.选择Ec ...