深度学习CNN用于目标检测的方法总结
来源:互联网 发布:早安网络用语 编辑:程序博客网 时间:2024/04/30 13:07
近一两年cnn在检测这块的发展突飞猛进,下面详细review下整个cnn检测领域模型的发展,以及在时间性能上的发展。
一、RCNN
流程:
Extract region(off model) + extract features(on model) + classifyregions according feature (svm or softmax)
性能:
精度:
二、SPP-NET
流程:
先做conv,再根据window提取特征。为什么rcnn不能也这么做呢?原因在于spp对不同尺度进行了max pool处理能更好的满足不同尺度window的特征表达。
性能:
核心思想在全图只做一次conv,这个和overfeat的思想一致
精度:
三、FAST-RCNN
流程:
引入了ROI层pooling,以及multi-task同时训练分类和检测框。
性能:
Compared to SPPnet, Fast R-CNN trains VGG163× faster, tests 10× faster, and is more accurate.
另外还额外提出了fc层SVD的思想
Vgg时间性能分析
精度:
The improvement of Fast R-CNN over SPPnetillustrates that even though Fast R-CNN uses single-scale training and testing,fine-tuning the conv layers provides a large improvement in mAP (from 63.1% to66.9%). Traditional R-CNN achieves a mAP of 66.0%. These results arepragmatically valuable given how much faster and easier Fast R-CNN is to trainand test, which we discuss next.
四、FASTER-RCNN
流程:
在fast-rcnn的基础上,借鉴了FCN的思路,将proposal阶段转化成一个layer加进了网络一起学习。
性能:
cost-free for proposal
精度:
our detection system has a frame rate of5fps (including all steps) on a GPU, while achieving state-of-the-art objectdetection accuracy on PASCAL VOC 2007 (73.2% mAP) and 2012 (70.4% mAP) using300 proposals per image
RCNN的原理图
1) selective
2) 原始图像进行wrap处理时,固定大小的选择,一般是227*227;
3) 由于训练集庞大,分类器优化开销很大,该文采用了标准的hard
4)分类器采用的是非线性核的SV;
5)为了强化定位,引入Bounding-Box;
该文算是诸多文章优势的集成体现。它达到的MAP也再次刷新了记录:在PASCAL
但一如文章中提到的,该方法的主要缺陷在于计算的时间成本很大,根本达不到real-time的要求。原因也在于region
SPP-net
还是先贴上图。首先需要声明的是这篇paper仍有些地方没搞明白(上边的RCNN虽然算是吧啦完了,但难免存在理解偏差,望大牛们多多指教。)
首先,我们看看截图二,很清楚的看到该文将crop/wrap这一预处理方法去掉了,同时在卷积层后加上了SPP。那我们就从这里开始谈起。
Crop/wrap,顾名思义就是对图像进行分割和变形。这两种方法都存在着丢失或者扭曲原始图像信息的缺陷。这样CNN获取的特征也就受到了限制,从而导致后续分类/预测的泛化能力不够。需要略作解释的是crop/wrap处理的充分性是由于FC层固有特性决定的,即FC层的输入必须固定大小。该文亮点在于,将这一固定大小的处理放在特征提取之后。这样原始图像得到保护,特征提取更加的充分,然后再利用该文中提出的SPP代替最后一个卷积层的max-pooling层,完成大小固定的处理。该文主要亮点如下:
1) 对输入图像尺度无限制,同时输出的是定长特征,但运用滑动窗口的pooling技术就不能;
2) SPP可运用不同大小的pooling窗口,但CNN只能是单一的窗口;
3)SPP可以从尺度变化中提取特征;
4) 大大提高了图像处理速度,24-102*faster
接下来就来看看SPP到底是什么。上边已经谈到,SPP是代替了传统CNN中的pool5层,所以它也是一种pooling方法。同时,传统CNN中pooling层的滑动窗口是一定的,但在SPP中可以看到,它的pooling层是分层的,正如SPP自身的含义——金字塔式池化一样,它每层pooling
SPP-net在物体探测中的效果也非常好。在RCNN中是对上千个region
尽管如此,SPP-net仍存在缺陷:一是SPP-net虽然极大的提高了RCNN的速度,但和RCNN一样,他们的训练过程都是一个多阶段过程:即包含着特征抽取,网络微调,分类器SVM的训练以及最后的对BB回归器的匹配。二是SPP-net中用到的微调技术只能更新FC层,这无疑限制了深度CNN的潜力。
Fast-RCNN
在此基础上,MSRA又提出了Fast-RCNN。相较与RCNN和SPP-net,它的亮点在于:
1)MAP相较于RCNN也有很大的提高;
2)训练过程通过运用多任务损失,实现单步骤完成;
3)在训练过程中所有层都可以得到更新;
4)不再需要磁盘存储器作为特征缓存;
5) 比RCNN的训练时间快9倍,测试时间快213倍,在
从下图可以看到如下变化:一是输入从单输入变为双输入;二是引入ROI
输入除了batch大小为N的图像外,还有R大小的ROI序列。这种多任务训练机制避免了对顺序训练任务的pipeline的管理,同时也对MAP的提高起到了一定的作用。输出也因为变成两个输出而存在着两个loss
该文在随后还探讨了SVM和softmax两类分类器在VOC07上MAP的大小,发现softmax表现更为突出;同时发现region
RCNN到SPP-net,再到Fast-RCNN,在MAP不断得到提升的同时,速度也不断的提升,但我们也注意到在proposals的计算中仍然存在的计算瓶颈,而最近MSRA提出的Faster-RCNN正是这一问题的解决方案。由于这篇文章才出来不久,还没来得及读,暂时写到这里。
PS:文章完全来自个人理解,肯定很多漏洞或者理解过于表面的问题,此文后续会不断更新,以求更全面更简单的诠释。
参考文献:
[1]
[2]
[3]
[4]
http://blog.sina.com.cn/s/blog_9ae57c020102vopp.html
http://blog.csdn.net/sunbaigui/article/details/47728251
- 深度学习CNN用于目标检测的方法总结
- 基于深度学习的目标检测方法:R-CNN
- 基于深度学习的目标检测方法:fast R-CNN
- 深度学习(主要是CNN)用于图片的分类和检测总结
- 基于深度学习的目标检测方法总结
- 基于深度学习的目标检测算法:Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- 基于深度学习的目标检测方法
- 1:基于深度学习的目标检测技术:RCNN、Fast R-CNN、Faster R-CNN
- Java垃圾回收机制
- Springboot项目启动
- yii2中sphinx搜索 多条件选择搜索
- 一个不错的代码搜索引擎
- Android Studio文件名颜色代表的意思
- 深度学习CNN用于目标检测的方法总结
- Java调用-Redis
- 记录webstorm注册码
- 整数划分 --- 一个老生长谈的问题 动态规划
- leetcode 43. Multiply Strings
- JS模块化编程总结
- **一个好幼稚的javascript变量加减的小东西**
- java冒泡法终极版
- redis安装(LINUX)