CNN目标检测系列算法发展脉络简析(二):R-CNN

  上周简要介绍了一下AlexNet,这周来聊一聊RCNN。

  2013年提出的RCNN结合了启发式的区域推荐(Select Search)、CNN特征提取器(AlexNet)和传统的图像分类器(SVM),在07-12年的VOC数据集上以压倒性的优势将旧霸主DPM远远甩在身后,详细数据可见原文(https://arxiv.org/abs/1311.2524)。

  一、模型架构

  如上图,RCNN的结构大致可以分为三个部分:区域推荐(Select Search)、特征提取(AlexNet)、图像分类器(SVM)。

  区域推荐

  RCNN中的区域推荐使用的是selsect search,其核心思想是,将图像划分成许多小区域(图像分割算法),然后通过相邻小区域之间的“相似性”,将相似度较高的区域合并成一个大区域-region proposal(可以类比机器学习中的聚类算法),然后将该大区域用作后续的特征提取。

  此处使用的图像分割,使用的是经典的Felzenszwalb算法(应该是2004年提出来的,GithHub上有相关的实现代码:https://github.com/AlpacaDB/selectivesearch),这里先挖个坑,因为我自己也没有细看Felzenszwalb算法的实现源码,后续希望自己能补上吧(传说中的迭代学习啊~)。

  区域间的“相似性”则是通过将原始图像使用不同的编码方式(RGB、Lab、HSV等等)的通道值Concat后,选择性的将部分通道值合并,最后映射到八通道的颜色空间,然后在这八通道空间上计算不同区域之间的距离(纹理距离,颜色距离等)。

  最后将上述计算出的区域距离与一定的合并条件(合并后的区域的形状要合理)结合,并计算加权距离,选取加权值在一定范围内的区域进行合并。在合并的同时会对合并后的区域进行打分(合并程度低的,以及合并时出现次数多的区域,得分会较高),最后根据需求,选取适当分数的合并区域用于后续的特征提取。(我这里讲的比较模糊,后续带我有空把相关原理和代码细看之后再补上吧/(ㄒoㄒ)/~~处处给自己挖坑╯︿╰)

  特征提取

  特征提取这块,用到的就是我们耳熟能详的AlexNet(后期也使用过VGG16),这也是我在上一篇博客中介绍AlexNet的原因。

  此处将区域推荐网络生成的region proposal提取出来,将宽/高值缩放到指定尺寸(不固定宽高比,也就是说在缩放之后图像很可能会产生变形和扭曲),最后送到AlexNet中提取特征。

  这里的AlexNet使用Caffe CNN库进行了预训练,之后使用提取出的region proposal进行Fine-Tune。

  图像分类器

  使用SVM对提取出的特征进行分类,为每一个类别训练一个二值分类器(分类器输出0/1,表示是否属于这个类)。在训练分类器时,将真值框作为正类模型,将IOU在0.3以下的region proposal作为负例。

  SVM(支持向量机)是一种二分类模型,它是基于高维数据比低维数据更易线性可分的原理,使用核方法将原始数据映射到高维空间,然后求解在高维空间的分离超平面(这里给自己挖个坑,以后有机会要把SVM具体的公式推导和代码写一写 ●ˇ∀ˇ●)。

  最后的最后,模型对SVM分类后的区域进行了边框回归,使预测区域更准确。

  二、模型总结

  创新:

    1、采用了CNN作为特征提取器,将早期的“人工提取特征”变成模型“自动提取特征”,极大的解放了研究人员和工程师,使得人们可以把精力专注于设计更加优秀的模型,而不用为大量的特征提取工作烦恼。

    2、引入了在大样本上预训练模型,然后在小样本上进行Fine-Tune的模式,也就是我们耳熟能详的“迁移学习”,使得模型在数据量不足的情况下也能够有很好的泛化性能(迁移学习,我的最爱啊~(* ̄0 ̄)ノ)

  缺点:

    1、每个region proposal都要进行卷积计算,导致特征的多次重复提取,浪费计算资源,降低计算速度(FastRCNN改成在CNN特征图生成之后再进行区域选择,改进了此问题)

    2、select search需要事先提取多个region proposal,对存储空间需求大(FasterRCNN中使用RPN改进了此问题)

    3、RCNN对region proposal输入CNN之前进行了缩放,使图像发生了变形,不利于特征的提取(FastRCNN中使用ROI改进了此问题)

原文地址:https://www.cnblogs.com/snailt/p/12392075.html

时间: 2024-08-02 16:40:47

CNN目标检测系列算法发展脉络简析(二):R-CNN的相关文章

深度学习之目标检测常用算法原理+实践精讲

第1章 课程介绍本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 第2章 目标检测算法基础介绍本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-stage.two-stage.多任务网络).相关算法的基本流程.算法性能的评价指标.不同算法的优缺点和性能比较等,并结合实际的应用场景和案例来介绍目标检测算法的重要性和实用

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络

深度学习之目标检测常用算法原理+实践精讲 YOLO / Faster RCNN / SSD / 文本检测 / 多任务网络 资源获取链接:点击这里 第1章 课程介绍 本章节主要介绍课程的主要内容.核心知识点.课程涉及到的应用案例.深度学习算法设计通用流程.适应人群.学习本门课程的前置条件.学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络. 1-1 课程导学 第2章 目标检测算法基础介绍 本章节主要介绍目标检测算法的基本概念.传统的目标检测算法.目前深度学习目标检测主流方法(one-sta

目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection

作者从detector的overfitting at training/quality mismatch at inference问题入手,提出了基于multi-stage的Cascade R-CNN,该网络结构清晰,效果显著,并且能简单移植到其它detector中,带来2-4%的性能提升 论文: Cascade R-CNN: Delving into High Quality Object Detection 论文地址: https://arxiv.org/abs/1712.00726 代码地

SequoiaDB 系列之四 :架构简析

在本系列的第一篇中,简述了SequoiaDB的安装,以及一个(伪)集群的部署 第二篇和第三篇对SequoiaDB的集群,做了简单地操作. 在本篇中,将对SequoiaDB的架构进行简单的分析. 因为自身能力有限,对于架构这么高大上的主题,不敢轻言.因此本文会摘抄SequoiaDB官方的描述,加上自己的理解,达到共同学习的目的. 在解析之前,先简单叙述一下分布式系统的CAP理论: C:代表一致性,即在某时刻,分布式系统中节点数据应该是相同的: A:代表可用性,即有求必应,在分布式系统中某节点后,统

Flutter样式和布局控件简析(二)

开始 继续接着分析Flutter相关的样式和布局控件,但是这次内容难度感觉比较高,怕有分析不到位的地方,所以这次仅仅当做一个参考,大家最好可以自己阅读一下代码,应该会有更深的体会. Sliver布局 Flutter存在着两大布局体系(就目前分析),一个是Box布局,还有另外一个就是Sliver布局:但是Sliver布局明显比Box会更加复杂,这真是一个坎,那么为啥说Sliver更加复杂尼,请看一下对比:首先是Box布局,主要看输入的BoxConstraints(约束)和输出Size(尺寸) cl

OWASP Top 10之文件上传漏洞简析(二)

0x01. 在问题一(详见上文)中,获取文件后缀名$file_type = $_FIELS['file']['type'],通过和白名单比较,假如相同,则取上传文件的后缀名.上文说过,MIME头欺骗问题(这里不考虑重命名文件名问题),如果上传数据包修改Content-type的类型,$file_type就获取修改后文件类型. 如:上传1.php=>burpsuite拦截修改数据包中的Content-Type为:image/jpg=>$file_type="image/jpg"

ehcache3-源码简析二

cache由heap+offheap组成时,authoritativeTier为OffHeapStore,OffHeapStore也会从map中get元素,该map就是EhcacheConcurrentOffHeapClockCache.EhcacheConcurrentOffHeapClockCache继承了AbstractConcurrentOffHeapMap,EhcacheConcurrentOffHeapClockCache也就具有了map的一些特性.AbstractConcurren

Linux Hugetlbfs内核源码简析-----(二)Hugetlbfs挂载

本文只讨论执行"mount none /mnt/huge -t hugetlbfs"命令后,mount系统调用的执行过程(基于Linux-3.4.51),不涉及进程相关的细节. mount系统调用的内核实现: 1 SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, 2 char __user *, type, unsigned long, flags, void __user *, data)

卷积神经网络(三)--目标检测

本章介绍目标定位和目标检测(包含多目标检测). 1. Object Localization 原始图片经过CONV卷积层后,Softmax层输出4 x 1向量,分别是: 注意,class label也可能是概率.上述四个向量分别对应pedestrain,car,motorcycle和background四类. 对于目标定位和目标检测问题,其模型如下所示: 原始图片经过CONV卷积层后,Softmax层输出8 x 1向量.除了包含上述一般CNN分类3 x 1向量(class label)之外,还包