• RCNN

    • 问题与创新
    • 架构
    • 训练
    • 测试
  • Fast RCNN
    • 问题与创新
    • 架构
    • 训练
    • 测试
  • Faster RCNN
    • 问题与创新
    • 架构
    • 训练
    • 测试
  • 总结

本文将简要介绍物体检测的two stage的相关算法,two stage包括:region proposals、classification。介绍的相关算法有:RCNN、Fast RCNN、Faster RCNN。

RCNN

RCNN是基于CNN物体检测的奠基之作。其核心思想是:利用selective search对图片选取多个proposals;将每个proposals送入预训练的CNN得到features;在features上使用分类器对齐分类,使用回归器得到准确边框。

问题与创新

问题:

  1. 目标检测进展缓慢,传统的基于SIFT、HOG的方法不符合视觉启发式、多阶段的认知,需要尝试新的方法。
  2. CNN在ImamgeNet图片分类领域上取得了较好的效果,同样的方法是否可以移植到目标检测领域(PASCAL VOC)。

创新:

  1. 将CNN应用到了目标检测上,相比传统基于HOG的方法提升巨大。
  2. 采用两阶段的方法,先提取proposal,再识别。
  3. 通过在相似数据集上有监督的预训练和目标领域的微调解决了数据量不足的问题。

架构

网络自底向上包括三部分:

  1. region proposal:使用selective search。
  2. CNN:使用在其他数据集上预训练的模型。
  3. 分类器和回归器

训练

训练包含4部分:

  1. CNN的预训练:在其他数据集上预训练CNN模型。
  2. CNN的微调:CNN部分输入是warped region proposals,输出是N+1个类别(N个分类目标与背景)。
  3. SVM detector的训练: 针对每个类别分别训练一个SVM。训练数据前景的条件是真实的box;背景的条件的IoU<0.3。
  4. Box regression的训练:针对每个类别分别训练一个regression。训练数据的条件是IoU>0.6。

CNN的微调部分有几个问题,分别是:

  1. proposals中如何区分前景背景:与真实proposal的IoV>0.5的记为前景,其余记为背景。
  2. 训练的时候数据的比例如何选取:batch_size设置为128,其中包含32个所有类别随机的前景和96个随机背景。选取的原则是偏向于数量较少的前景。

测试

  1. 利用selective search计算region proposals(大约2k个)
  2. warp proposals将其送入到CNN中得到features
  3. 利用各类的SVM计算proposals的类别与分数。针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。
  4. 利用各类的Box regression修正类别的bounding box。

Fast RCNN

问题与创新

针对RCNN,其存在以下问题:

  1. 多步训练:先在大规模类似数据集上预训练CNN,然后微调CNN,最后在微调获得的特征上加入分类器、回归器。
  2. 训练过程耗费过多的时间、空间:时间空间主要花费在计算CNN的features。
  3. 测试过慢:时间主要花在了CNN的计算上。

其中,训练及测试过慢的主要原因是:RCNN中每个proposals都经过CNN计算,计算冗余。

创新:

  1. single-stage training,使用multi-task loss,可以end2end训练,不需要额外存储空间。
  2. 针对图片先构建feature map再抽取区域,batch中的图片的个数较少,避免了冗余计算。
  3. 使用ROI pooling,有效地将不同大小的proposal固定为相同长度的向量。
  4. 采用Truncated SVD将全连接层分解成两个小的全连接,加速全连接过程的计算。

架构

网络架构如上图所示,自底向上包含下面几部分:

  1. 预训练的Cov层
  2. selective search提取的proposals
  3. 对Cov层上的各个proposal的映射做ROI pooling
  4. 全连接层
  5. 分类器和回归器

训练

训练包含

  1. 利用预训练的CNN初始化,并调整部分网络结构以初始化网络
  2. 利用multi-task loss对目标检测问题做fine tuning

在初始化网络部分,对预训练的CNN网络主要做了以下的修改:

  1. 最后一个max pooling层被ROI pooling层取代。ROI pooling层的固定参数是H,WH, W,含义是将region均分成H∗WH*W子区域,对每个子区域做max pooling从而得到固定的输出。
  2. 网络最后的全连接和softmax层被分类器、各个类别的回归器取代。
  3. 网络的输入源更改为2个,包括图片和图片对应的ROI。

在fine tuning部分,存在以下问题:

  1. proposals中如何区分前景背景:与真实proposal的IoV>0.5的记为前景,0.1<=Iov<0.5记为背景。
  2. 训练的时候数据的比例如何选取:选取的图片记为N,每张图片选择R/N个ROI。论文中使用的参数是N=2,R=128。这样做的好处是输入的图片较少,从而避免了因图片不同造成的冗余计算。选择25%的数据作为前景,75%的数据作为背景。
  3. 训练的时候使用综合分类、回归的multi-task loss。

测试

  1. 输入图像到CNN中得到feature map。
  2. 利用selective search计算region proposals(大约2k个)
  3. 在feature map上找到proposals的映射,针对每个proposal做ROI pooling得到固定长度的feature。
  4. 通过全连接、分类器、回归器得到各类别的概率及各类别的box。
  5. 针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。

Faster RCNN

问题与创新

问题:

  1. SPP Net和Fast RCNN的计算瓶颈主要是region proposals。

创新:

  1. 将之前用于detection的CNN feature map用于计算region proposals。采用RPN网络计算region proposals。RPN网络和detection网络共享CNN权重,几乎实现了cost-free的proposals计算。

架构

Faster RCNN的大体架构与Fast RCNN一致,唯一不同的是将Selective Search换成了Region Proposal Network去获得bounding box。

网络架构如上图所示,自底向上包含下面几部分:

  1. 预训练的Cov层
  2. Region Proposal Network提取的proposals
  3. 对Cov层上的各个proposal的映射做ROI pooling
  4. 全连接层
  5. 分类器和回归器

下面,将详细介绍RPN网络架构。

RPN网络在feature map上加了一个n*n(3*3),通道为256的卷积,这样feature map上的每一个点连同其周围的8个点都被映射成了一个大小256的向量;接着再通过1*1的卷积,得到通道为(2k+4k=6k)的feature map。其中,k代表锚框的数量。

训练

训练包含

  1. Region Proposal Network的训练
  2. 将RPN网络和Fast RCNN detection网络的卷积共享

先来谈RPN网络的训练

RPN网络的输入是正负例的锚框,输出是边框的修正(回归)以及是不是前景(二分类)。

选择正负例锚框的标准如下,其batch为256,正负比例为1比1:

  • 正例:对每个真实box,距离其IOU最大的锚框;对任意一个真实box,IOU>0.7的锚框。
  • 负例:对所有真实box,IOU<0.3的锚框。

其中,对于1000*600大小的图片,大约有20000(60*40*9)个锚框。忽略了与边界相交的锚框后还剩6000个。但是这些边框有相当一部分相交的很多,因此采用IOU阈值为0.7的NMS,余下2000个锚框。

损失函数使用的是综合分类、回归的multi-task loss。


再来谈如何共享RPN和Fast RCNN的卷积

一般来说,有三种共享卷积的方法:

  1. 交替训练RPN和Fast RCNN,使用一个训练的结果去初始化另外一个
  2. 当成一个网络去做end2end的训练,综合RPN的2类loss和Fast RCNN的loss
  3. 使用Fast RCNN的loss去做完全backward的训练

实际使用时,采取4-step的训练:

  1. 先预训练再微调训练RPN网络
  2. 使用上一步RPN网络的结果,先预训练再微调训练Fast RCNN网络。在这一步后两个网络还未共享CNN权重。
  3. 使用上一步Detection网络的结果去初始化RPN网络,接着固定CNN的权重不变,微调RPN网络。在这一步后两个网络共享权重。
  4. 使用上一步RPN的结果去初始化Detection网络,接着固定CNN的权重不变,微调RPN网络。

测试

  1. 输入图像到CNN中得到feature map。
  2. 利用RPN网络计算region proposals
  3. 针对每个proposal做ROI pooling得到固定长度的feature。
  4. 通过全连接、分类器、回归器得到各类别的概率及各类别的box。
  5. 针对每个类别,采用非极大抑制(Non-Maximum Suppression)得到该类别所有的proposals。

总结

  • RCNN将CNN引入了物体检测上,提出了proposal-classification做物体检测的整体框架。
  • Fast RCNN针对RCNN不同proposals间冗余计算的问题,提出了先构建feature map,再将region proposal的region映射到feature map上进行计算;同时采用ROI pooling解决proposal大小不同的问题。
  • Faster RCNN针对Fast RCNN的速度瓶颈在region proposal上,直接在CNN的feature map上加了RPN网络提供高效的proposal计算。

物体检测之从RCNN到Faster RCNN相关推荐

  1. Grid R-CNN解读:商汤最新目标检测算法,定位精度超越Faster R-CNN

    作者 | 周强 来源 | 我爱计算机视觉 Grid R-CNN是商汤科技最新发表于arXiv的一篇目标检测的论文,对Faster R-CNN架构的目标坐标回归部分进行了替换,取得了更加精确的定位精度, ...

  2. 基于深度学习的目标检测技术的演进:从R-CNN到Faster R-CNN

    导语 什么是Objection Detection?就是在给定的图片中精确的找到物体所在位置,并且标注出物体的类别.目标检测要解决的问题就是物体在哪里?是什么?这样的问题.然而,这个问题并不是那么容易 ...

  3. 带你深入AI(4)- 目标检测领域:R-CNN,faster R-CNN,yolo,SSD, yoloV2

    带你深入AI(4)- 目标检测领域:R-CNN,faster R-CNN,yolo,SSD, yoloV2 2018年04月15日 11:09:29 阅读数:103 1 引言 深度学习目前已经应用到了 ...

  4. 大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)

    目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤: 1.分类,识别物体是什么   2.定位,找出物体在哪里   除了对单个物体进行检测,还要 ...

  5. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    一. 从图像识别的任务说起   1.1 思路一:看做回归问题   1.2 思路二:取图像窗口 二. R-CNN横空出世 三. SPP Net 四.Fast R-CNN 五.Faster R-CNN 看 ...

  6. 目标检测——从RCNN到Faster RCNN 串烧

    目标检测--从RCNN到Faster RCNN 串烧 https://blog.csdn.net/xyy19920105/article/details/50817725 本人小硕一枚,方向是深度学习 ...

  7. 《目标检测》R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN

    学习内容来自:https://www.bilibili.com/video/BV1m5411A7FD?p=2 类似的博文:https://blog.csdn.net/v_JULY_v/article/ ...

  8. 人工智能目标检测模型总结(一)——R-CNN、Fast R-CNN、Faster R-CNN

    前言 目标检测是人工智能的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤: 1.分类,识别物体是什么 2.定位,找出物体在哪里 除了对单个物体进行检测,还要能 ...

  9. R-CNN,Fast R-CNN,Faster R-CNN原理及执行与训练的实例+实现自己的目标检测(转)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37407756/article/details/80810364 一.原理篇 R-CNN的原理 ...

最新文章

  1. Python培训:try-except语句与else子句联合使用处理可能出现的程序异常
  2. Netscape Mozilla源代码指南
  3. YOLO学习-1:win10(64位)+ python3.6 + TensorFlow + keras + yolov3测试实践
  4. 【已解决】Exception in thread “Thread-0“ redis.clients.jedis.exceptions.JedisConnectionException: java.n
  5. dede织梦5.7,后台采集数据导入,空文章过滤.
  6. springmvc sends and receives data by ajax request using json format
  7. 字节取消大小周,部分员工:心疼,每个月少拿 1W 块
  8. 04 ansible其他常见模块(yum模块、service模块、mount模块、cron模块、user模块、group模块)...
  9. LiteOS内核源码分析:动态内存之Bestfit分配算法
  10. Linux 服务器做网关
  11. 面试官:为什么要合并 HTTP 请求?
  12. 计算机软考程序员客观题,历年计算机软考程序员部分选择题真题重点
  13. 天翼云盘v6.3.5绿色精简版
  14. 解决winrm4j中文乱码问题和执行脚本文件
  15. linux编辑文件发生错误E45: ‘readonly‘ option is set (add ! to override)
  16. [2017-07-27] 依图科技电话面试
  17. 濡沫江湖一直显示获取服务器地址,濡沫江湖霜儿剧情任务怎么完成?霜儿专属剧情任务接取以及完成攻略...
  18. JSON——Json对象扁平化
  19. 用JS实现贪吃蛇小游戏
  20. 每天15min-HTML5(10)-表单(上)

热门文章

  1. A Neural Probabilistic Language Model 论文阅读及实战
  2. 「3D视觉从入门到精通」知识星球
  3. SpringBoot 项目tomcat插件启动报错 java.lang.NoClassDefFoundError: javax/el/ELManager
  4. vue 复选框的渲染
  5. numpy 数组和矩阵的乘法
  6. DeepChem | DeepChem的图卷积特征化器
  7. RDKit相关文章汇总
  8. pyhton 中的字符串切片问题
  9. 新版本,ggplot2 v3.3.0 新特性来袭
  10. 微生物组科学蓬勃发展,5大方向备受行业关注!