这部分,写一写faster rcnn

0. faster rcnn

经过了rcnn,spp,fast rcnn,又到了faster rcnn,作者在对前面的模型回顾中发现,fast rcnn提出的roi pooling 虽然解决的cnn网络在单张完整图重复计算的问题(每个由ss算法得到的区域候选框都需要过一遍cnn)。

虽然说在训练阶段,不管时间复杂度,无所谓,可是在测试阶段,还是会因为ss算法过慢而无法达到实时的目的,Shaoqing Ren等人发现单一张图上ss基本就需要花费2秒来提取区域候选框,然而即使权衡准确度和速度选择了edgebox算法,每个图片上还是需要花费200ms来做区域候选框提取。所以才提出了RPN这个东西。

RPN:Region Proposal Networks,意图和fast rcnn网络一样,共享前面的cnn层,也就是一张完整的图片经过cnn,达到了最后的feature map,这个feature map需要做两件事:

  • 1 提供候选框区域;通过给出区域的坐标回归和当前区域的得分,即该框中是对象的置信度(比如该区域多少面积与真的对象的区域重合,iou越高,该得分越高)
  • 2 同时,也需要基于该区域得到对应的ROI,然后接着走fast rcnn 后续网络进行对象的分类和对象的坐标回归任务(包含坐标回归和得分)。

所以按照这个分法,faster rcnn就是由2个网络构成的,如图0.1所示:

图0.1 faster rcnn网络结构

  • 1 用一个深度网络来生成区域候选框:cnn+RPN;
  • 2 用一个深度网络来对之前提出的区域候选框进行分类和坐标微调回归:cnn+roiPooling

而如果将上面两个深度网络的cnn部分合并,共享同一个基cnn,那么该网络就叫做faster rcnn

1. RPN

从论文中抠出RPN网络结构如下图所示:

图1.1 RPN网络结构
为了实现直接从CNN最后一个feature map中得到对象候选框,也就是RPN网络的任务,如图1.1所示,在CNN网络的最后一层feature map上建立一个新的,小型网络;
该网络也就是RPN的精华所在,其实就是一个新的小的CNN网络:将由基CNN的feature map作为该网络的图片输入,然后如CNN的卷积一样,建立一,其中k表示当前划框位置上可以预测几个对象候选框。下面介绍。
图中256-d的解释:图中介绍的是基于一个划框下的结果。我们回忆最简单的卷积操作,其实就是对一个感受野做卷积,生成一个值作为下一层map中的一个点。图中表示的其实是一个点,比如:

  • 上一个图的大小是13*13*256,
  • 通过3*3,stride=1,padd=1,output=256的卷积,生成144个划框的结果。为12*12*256的map;
  • 然后再通过一个1*1,output=(2*9)的卷积,生成为12*12*18的map.

图中全都省略每个划框,只针对一个划框,从而对应的就是256-d和2*9的cls层。

其中RPN的输入划窗大小是3*3,按照对应回基CNN的输入层,也就是真实图片上面的区域,分别是171和228,计算过程如下所示,来自这里

1.1 在图片中如何处理不同尺寸大小的对象的

如上面介绍的RPN网络,在每个划框上,会有k个对象候选框,论文中叫做锚框“anchor box”(或者是reference boxes),这么做的灵感如下图所示:

图1.1.1 RPN灵感来源
如图1.1.1所示,在处理不同图片尺寸上,有通过如图像金字塔得到不同尺寸的feature map的,或者在一个图像上使用不同的滤波(即卷积核)大小;而作者不同于他们,在单个尺寸图片和单尺寸滤波器大小上,选取多个不同尺寸的anchor box。从而基于加快整体的速度基础上,还能检测不同尺寸的图片,具有更好的适应性。

1.2 在每个划框上的操作

如1.1所示,作者希望能在每个划框上预测多个不同尺寸的对象(一个划框预测多个对象,每个对象可以存在不同的尺寸),其中当前这个划框上能有k个候选框,每个候选框对应一个分类和坐标回归(如图1.1中的2k和4k)。因为采用了3种缩放因子和3种长宽比,所以k等于9。更进一步,如果当前feature map的大小是40*60,那么就是2400个神经元,按照每个神经元都是可以成为划框中心来说,一共会有2400*9个候选框。量还是挺大的。而基于VGG的话,所需要增加的参数量:卷积核大小3*3,RPN中间层512个神经元,因为VGG有512个通道,且RPN顶层有9个2分类softmax和9个4坐标的回归层,所以:3*3(卷积核)*512(通道数)*512(中间层神经元个数)+512(中间层神经元个数)*(2+4)*9(锚框个数)=\(2.4*10^6\)

可以看出,该RPN网络在设计的时候本身就是具有平移不变性了,即当图片中的某个对象从一个位置移动到另一个位置,也能通过RPN网络得到相同的候选框区域,故而该网络具有很强的平移不变性

1.3 训练RPN

对于RPN网络的分类和回归层来说:分类层就是一个2分类,是将当前的候选框标记为对象还是非对象。
对于训练集的采样:其中,论文将2种情况下的锚box标记为正标签。

  • 1 当前候选框与groundtruth的iou最高的时候;
  • 2 与任何一个groundtruth的iou超过0.7的时候。

而当当前候选框与groundtruth的iou低于0.3的时候作为负标签。所以可想而知会发生一个groundtruth被多个候选框标记为正标签的情况。虽然第二种标记正标签的方法在很多时候也够用,不过还是会有极端情况下不满足0.7这个阈值,所以论文采用了第一种标记方法,以此保证正样本的足够(也就是一个划框中9个锚box中选取一个锚box为正标签)。而对于介于中间那些无标记的锚box,则让他们不参与误差的反向传播,也就是不对这些框做采样,不把它们放入训练集中。当然如果当前9个锚box对应的本就是背景,那么当前划框中9个候选框就没正标签了,不过因为每个锚box对应的输入层感受野本身就很大,所以应该很少会存在没有正标签的情况。

对于RPN的目标函数:

图1.3.1 RPN网络中单张图下的目标函数
如图1.3.1所示,在单张图基础上,有如上的目标函数,其中\(p_i\)为RPN预测的当前锚box是否是对象的概率,\(p_i^*\)是训练过程中人工标记的当前锚box是否是对象的值(故而该值只有0和1这两个值)。

\(N_{cls}\)为当前batch size的值,而\(N_{reg}\)为什么不也是batch size的值呢?个人觉得是因为分类部分是固定的,比如batch size等于256,也就是有256个锚box,因为每个锚box一定有0和1存在,而回归是建立在当当前锚box的确预测对了的基础上,所以这时候假如当前batch中有10个正锚box,而如果回归部分还是除以256,会有失公允,所以除以整体的2400(一张图上划框的总数),并引入\(lambda\)来权衡两个部分,不过作者通过实验发现\(lambda\)的值不是很敏感。

对于faster rcnn整个网络的训练如下面步骤:

  • 1 用imagenet的分类网络来初始化基CNN,然后随机初始化RPN网络,并整体进行微调;
  • 2 对基CNN,重新用imagenet的分类网络来初始化,然后将之前RPN网络预测得到的区域候选框来微调fast rcnn;
  • 3 这时候固定住基CNN,微调RPN部分;
  • 4 还是固定住基CNN,微调fast rcnn的ROI-pooling部分。

如上四步,这两个任务代表的网络就共享了基CNN。

待续。。。
参考文献:
[] - .faster rcnn

object detection[faster rcnn]的更多相关文章

  1. tensorflow object detection faster r-cnn 中keep_aspect_ratio_resizer是什么意思

    如果小伙伴的英语能力强可以直接阅读这里:https://stackoverflow.com/questions/45137835/what-the-impact-of-different-dimens ...

  2. 基于深度学习的目标检测(object detection)—— rcnn、fast-rcnn、faster-rcnn

    模型和方法: 在深度学习求解目标检测问题之前的主流 detection 方法是,DPM(Deformable parts models), 度量与评价: mAP:mean Average Precis ...

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

    作者从detector的overfitting at training/quality mismatch at inference问题入手,提出了基于multi-stage的Cascade R-CNN ...

  4. 深度学习笔记(十)Augmentation for small object detection(翻译)

    一. abstract 这些年来,目标检测取得了令人瞩目的成就.尽管改进很大,但对于小目标和大目标的检测性能差异还是蛮大的.我们在 MS COCO 数据集上分析了如今一个比较先进的算法,Mask-RC ...

  5. object detection技术演进:RCNN、Fast RCNN、Faster RCNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  6. 读论文系列:Object Detection NIPS2015 Faster RCNN

    转载请注明作者:梦里茶 Faster RCNN在Fast RCNN上更进一步,将Region Proposal也用神经网络来做,如果说Fast RCNN的最大贡献是ROI pooling layer和 ...

  7. 目标检测(四)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun SPPnet.Fast R-CNN等目标检测算法已经大幅降低了目标检测网络的运行时间. ...

  8. 深度学习论文翻译解析(四):Faster R-CNN: Down the rabbit hole of modern object detection

    论文标题:Faster R-CNN: Down the rabbit hole of modern object detection 论文作者:Zhi Tian , Weilin Huang, Ton ...

  9. Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)

    RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...

随机推荐

  1. 数据库连接池(基于MySQL数据库)

    使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC ...

  2. JAVA TestNG单元测试详解

    TestNG单元测试详解   by:授客 QQ:1033553122 1. 测试环境 2 2. 介绍 2 3. Annotation 2 4. testng.xml 3 4.1. 例1 3 4.2. ...

  3. 【Spring源码解读】bean标签中的属性

    说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-met ...

  4. 章节七、3-ArrayList和LinkedList对比

    一.创建集合并添加元素(从末尾位置添加) package ZangJie7; import java.util.ArrayList; import java.util.LinkedList; impo ...

  5. Android Thread 官方说明

    Thread官方说明 https://developer.android.google.cn/reference/java/lang/Thread Thread是程序中执行的线程.Java虚拟机允许应 ...

  6. java开发基础知识学习

    java环境配置 classpath: .当前目录 path: java 命令所在目录 jdk安装目录 jdk/bin jre安装目录 jre/bin 安装JDK后配置环境变量如下: 安装过程用到了j ...

  7. 自动化测试基础篇--Selenium中JS处理浏览器弹窗

    摘自https://www.cnblogs.com/sanzangTst/p/7692454.html 浏览器弹窗: 现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法暂时处理不了,这时 ...

  8. c/c++ 多维数组和指针

    c/c++ 多维数组和指针 知识点 1,初始化多维数组,对应代码里的test1 2,遍历多维数组,除了最内层循环外,其他所有层都必须是引用类型,对应代码里的test2 3,指针和多维数组 ,对应代码里 ...

  9. linux c 语言之--fseek(),fseeko(),fseeko64()讲解 (转载)

    转载:http://blog.csdn.net/lemoncyb/article/details/16841317 fseek() 函数讲解: 函数定义: int fseek(FILE *stream ...

  10. spring cloud 微服务日志跟踪 sleuth logback elk 整合

    看过我之前的文章的就可以一步一步搭建起日志传输到搜索引擎 不知道的 看下之前的文章 (1) 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引 (2)关 ...