faster rcnn resnet_RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

一.RCNN

问题一:速度

经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。

问题二:训练集

经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。本文则需要训练深度网络进行特征提取。可供使用的有两个数据库:

一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。

一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。

保证合并后形状规则。

5a149cbefe284efaa0aa68a52898f9b8.png

网络分为四个部分:区域划分、特征提取、区域分类、边框回归

区域划分:使用selective search算法画出2k个左右候选框,送入CNN

特征提取:使用imagenet上训练好的模型,进行finetune

区域分类:从头训练一个SVM分类器,对CNN出来的特征向量进行分类

边框回归:使用线性回归,对边框坐标进行精修

优点:

ss算法比滑窗得到候选框高效一些;使用了神经网络的结构,准确率比传统检测提高了。

缺点:

1、ss算法太耗时,每张图片都分成2k,并全部送入CNN,计算量很大,训练和inference时间长。

2、四个模块基本是单独训练的,CNN使用预训练模型finetune、SVM重头训练、边框回归重头训练。微调困难,可能有些有利于边框回归的特征并没有被CNN保留。

1d7a79ec9c37aa8230895ddc4bb7231c.png

二.Fast-RCNN

Fast RCNN方法解决了RCNN方法三个问题:

问题一:测试时速度慢

RCNN一张图像内候选框之间大量重叠,提取特征操作冗余。

本文将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。

问题二:训练时速度慢

原因同上。

在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。

问题三:训练所需空间大

RCNN中独立的分类器和回归器需要大量特征作为训练样本。

本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

相对RCNN,准确率和速度都提高了,具体做了以下改进:

1、依旧使用了selective search算法对原始图片进行候选区域划分,但送入CNN的是整张原始图片,相当于对一张图片只做一次特征提取,计算量明显降低

2、在原图上selective search算法画出的候选区域对应到CNN后面输出的feature map上,得到2k个左右的大小长宽比不一的候选区域,然后使用RoI pooling将这些候选区域resize到统一尺寸,继续后续的运算

3、将边框回归融入到卷积网络中,相当于CNN网络出来后,接上两个并行的全连接网络,一个用于分类,一个用于边框回归,变成多任务卷积网络训练。这一改进,相当于除了selective search外,剩余的属于端到端,网络一起训练可以更好的使对于分类和回归有利的特征被保留下来

4、分类器从SVM改为softmax,回归使用平滑L1损失。

缺点:因为有selective search,所以还是太慢了,一张图片inference需要3s左右,其中2s多耗费在ss上,且整个网络不是端到端。

e6cf8783538088efbe4d15c306748c0b.png

bd4d1d71445f717fce5bf481d045f345.png

7d52275547fd0b76505513c00fe72c51.png

三.Faster-RCNN

从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。

45b914eeadc798d13632b82000534a64.png

引入RPN,Faster-RCNN相当于Fast-RCNN+RPN,准确率和速度进一步提高,主要做了以下改进:

1、移除selective search算法,还是整张原始图片输入CNN进行特征提取,在CNN后面的卷积不再使用ss算法映射过来的候选区域,而是采用新的网络RPN,使用神经网络自动进行候选区域划分。

2、RPN通过生成锚点,以每个锚点为中心,画出9个不同长宽比的框,作为候选区域,然后对这些候选区域进行初步判断和筛选,看里面是否包含物体(与groundtruth对比IoU,大于0.7的为前景,小于0.3的为背景,中间的丢弃),若没有就删除,减少了不必要的计算。

3、有效的候选区域(置信度排序后选取大概前300个左右)进行RoI pooling后送入分类和边框回归网络。

优点:端到端网络,整体进行优化训练;使用神经网络自动生成的候选区域对结果更有利,比ss算法好;过滤了一些无效候选区,较少了冗余计算,提升了速度。

RPN训练:

1、加载预训练模型,训练RPN。

2、训练fast-rcnn,使用的候选区域是RPN的输出结果,然后进行后续的bb的回归和分类。

3、再训练RPN,但固定网络公共的参数,只更新RPN自己的参数。

4、根据RPN,对fast-rcnn进行微调训练。

0d7a4c907cbde33c3f74be124d5ef0ea.png

四.R-FCN

一个base的conv网络如ResNet101, 一个RPN(Faster RCNN来的),一个position sensitive的prediction层,最后的ROI pooling+投票的决策层。

分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。现在的大部分CNN在分类上可以做的很好,但用在检测上效果不佳。SPP,Faster R-CNN类的方法在ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了。因此,本文想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。

对于region-based的检测方法,以Faster R-CNN为例,实际上是分成了几个subnetwork,第一个用来在整张图上做比较耗时的conv,这些操作与region无关,是计算共享的。第二个subnetwork是用来产生候选的boundingbox(如RPN),第三个subnetwork用来分类或进一步对box进行regression(如Fast RCNN),这个subnetwork和region是有关系的,必须每个region单独跑网络,衔接在这个subnetwork和前两个subnetwork中间的就是ROI pooling。我们希望的是,耗时的卷积都尽量移到前面共享的subnetwork上。因此,和Faster RCNN中用的ResNet(前91层共享,插入ROI pooling,后10层不共享)策略不同,本文把所有的101层都放在了前面共享的subnetwork。最后用来prediction的卷积只有1层,大大减少了计算量。

在Faster-RCNN基础上,进一步提高了准确率,主要以下改进
1、使用全卷积层代替CNN basenet里面的全连接层。
2、CNN得到的feature map在RoI pooling之后变成3x3大小,把groundtruth也变成3x3大小,对9宫格每个区域分别比较和投票。

3b51b09d3cbe44e2e3f6b6d1efad2ece.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

啰嗦一二三

第一点之前有一个抽奖,抽取野火开发板的,我记得有很多人参加了,20号的时候,获奖的同学都主动找我填写了收获地址,但是有一个同学特别调皮,到今天都没有来找我,我等了好久好久,还是没…

go设置后端启动_为什么 Rubyists 应该考虑学习 Go

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言如今,越来越少的 Web 开发人员开始专注于 Ruby 之类的单一语言。我们针对不同的工作使用不同的工具。在本文中,Ayooluwa Isaiah 认为 Go 是 Ruby 的完美补充。…

生涯刚开始就要转会?

昨晚,12点快睡觉的时候,一个同学给我发来的问题,篇幅有点长,都是文字,看起来可能有点乏味,不过有耐性的同学还是瞄一下,应该很多人都有这样的迷茫期,我的解答也不一定完全正确&#…

Topaz Video AI 视频修复工具(内附安装压缩包win+Mac)

目录 一、Topaz Video AI 简介 二、Topaz Video AI 安装下载 三、Topaz Video AI 使用 最近玩上了pika1.0和runway的图片转视频,发现生成出来的视频都是有点糊的,然后就找到这款AI修复视频工具 Topaz Video AI。 一、Topaz Video AI 简介 Topaz Video…

python文本编辑器报错_notepad++编辑器中运行python程序时需要注意的编码格式

本篇文章给大家带来的内容是关于notepad编辑器中运行python程序时需要注意的编码格式,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 语言:python3.4 文本编辑器:notepad 报错:SyntaxErro…

我不建议大家随便跳槽

突然的留言 我的微信好友很多,经常也有一些同学给我留言一些问题,当然能回答的我肯定会回答了,但是如果是非常难的技术问题,我一般会说,我要请教一下身边的朋友,昨晚准备睡觉的时候,收到一个同…

我是不建议随便跳槽的

突然的留言我的微信好友很多,经常也有一些同学给我留言一些问题,当然能回答的我肯定会回答了,但是如果是非常难的技术问题,我一般会说「我要请教一下身边的朋友」,我会非常刻意的去回避我技术很水的这个问题&#xff0…

ubuntu c++检测usb口事件变化_拆解报告:美式双USBA口充电插座

----- 充电头网拆解报告 第1441篇 -----最近充电头网拿到了一款美式插座,这款产品相比常规墙插插座,除了配有两个双脚AC插口外,还有两个USB-A接口,支持直接插上数据线即可为两台设备进行同时充电。其中两个USB-A口都支持最大5V4.8…

div不继承父类样式_Python编程思想(27):类的继承

-----------支持作者请转发本文-----------李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客起源」 公众号中输入 160442 开始学习。-----------正文---…

mysql 举例_MySQL 语句举例(一)

举例:有10个用户,输出在订单表中下单数最多的5个人的名字。my_user 表数据my_order,uid对应my_user表的id测试数据生成写一个存储过程,随机插入10000条数据:CREATE DEFINERrootlocalhost PROCEDURE test_loop( )BEGIND…

你知道Linux里D进程会搞事吗?

前言这篇文章是一位大神在实际项目中遇到问题并分析总结出来的,作为新手,能接触到这类文章应该是受益匪浅,这位同学现在在魅族工作,以后也会一直在魅族工作,是Linux 方面的专家,「魅族还有另一个Linux 大神…

react-router 页面离开 提示数据变更

以前项目使用 react-router2.0, 业务层面页面离开的时候需要弹出自己的弹出框,根据用户的操作,进行是否可以离开 试了几种方式都存在问题,实现的并不完美,没办法对用户点击浏览器后退支持的很好,除非是显示…

C语言系列文章之#和##

很久就知道了 # 和 ## ,但是都没怎么使用,直到最近的项目涉及到需要编写大量相似的代码之后才决定尝试使用 ## 去简化代码的书写。比如说我的项目需要控制四个通道的电机,四个通道的逻辑控制代码都是类似的,只是对应的硬件和数据信…

springboot 上传文件_基于SpringBoot的文件上传

在实际的企业开发中,文件上传是最常见的功能之一,SpringBoot集成了SpringMVC常用的功能,当然也包含了文件上传的功能,实现起来没有太多的区别。下面我们来讲解一下,使用SpringBoot如何实现多个文件上传操作。使用的环境…

Linux的 i2c 驱动框架分析

1.基本概念总线设备驱动模型,是Linux 内核的一个基础,基本理论可以说按照大企业的分工原则,每个人只要负责自己的事情,向其他部门给出标准的接口调用,后勤部就负责后勤工作,厨房有可能跟后勤部产生工作上的…

matlab fftshift_数字信号处理没有Matlab?用Python一样很爽

通常,在数字信号处理时,我们避不开matlab这个工具,因其它的强大的功能受到广大工程师的好评,也一直都是业界的不二之选。但是,matlab毕竟是商业软件,公司里如果使用的话,就需要支付高昂的费用。…

栈,C语言实现

什么是数据结构?数据结构是什么?要了解数据结构,我们要先明白数据和结构,数据就是一些int char 这样的变量,这些就是数据,如果你是一个篮球爱好者,那么你的球鞋就是你的数据,结构就是…

Camera摄像头工作原理

回想这工作的这几年,尝尽社会的辛酸艰难,从一开始什么都没有到30万,从30万到200万,从200万到1300万,不是炫耀,我只是想通过我自己的经历告诉我的朋友们「手机像素越高,拍的照片越清晰」摄像头结…

es6一维数组转二维数组_技术图文:Numpy 一维数组 VS. Pandas Series

背景Numpy 提供的最重要的数据结构是 ndarray,它是 Python 中 list 的扩展。Pandas 提供了两种非常重要的数据结构 Series和DataFrame。Numpy 中的一维数组与 Series 相似,一维数组只是提供了从0开始与位置有关的索引,而Series除了位置索引之…

unity UI事件

由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_sourcetuicool&utm_mediumreferral,并对相关问题进行解释。 我们最常用到的就是unity的button组件,…