很久之前试着写一篇深度学习的基础知识,无奈下笔之后发现这个话题确实太大,今天发一篇最近看的论文Fast RCNN。这篇文章是微软研究院的Ross Girshick大神的一篇作品,主要是对RCNN的一些改进,但是效果十分明显,paper和项目的地址都能从Ross Girshick的主页找到:http://people.eecs.berkeley.edu/~rbg/

刚刚接触深度学习,难免纰漏很多,还请大神指教。

自己的百度云里也有一些相关内容http://pan.baidu.com/s/1o79NZ2E

文字内容大多是自己讲解时的PPT的内容。


背景介绍

Fast rcnn是针对RCNN+SPP-NET的改进,改进的原因是:

1.Training is a multi-stage pipeline.
2.Training is expensive in space and time
3.Object detection is slow

1.RCNN

RCNN的结构示意图

首先看一下RCNN的框架图,大概的工作过程是:

  1. takes an input image,
  2. extracts around 2000 bottom-up region proposals,
  3. computes features for each proposal using a large convolutional neural network (CNN)
  4.  classifies each region using class-specific linear SVMs.

详细的说一下就是:首先输入一张图片,通过selective search获得约2K个proposal(也就是candidate object locations),之后对图像进行伸缩变换,把图像变为固定尺寸的照片,之后把固定尺寸之后的图片传入CNN网络中进行提取特征等操作,之后使用SVM分类器进行分类。

由此可以看出RCNN有这样的缺点:

  1. 训练的时候,多pipeline分离,首先提取proposal,之后使用CNN提取特征,最后使用SVM分类然后进行boundingbox regression。

  2. 训练时间和空间开销大。RCNN中ROI-centric的运算开销大,所以FRCN用了image-centric的训练方式来通过卷积的share特性来降低运算开销;RCNN提取特征给SVM训练时候需要中间要大量的磁盘空间存放特征,FRCN去掉了SVM这一步,所有的特征都暂存在显存中,就不需要额外的磁盘空间了。

由此看一看出RCNN的问题所在,首先在提取完proposal之后,整个网络对提取到的RCNN中的所有的proposal都进行了整套的提取特征这些操作,这些操作是非常耗时,耗费空间的。事实上我们并不需要对每个proposal都进行CNN操作,只需要对原始的整张图片进行CNN操作即可,因为我们所提取到的proposal属于整张图片,因此对整张图片提取出feature map之后,再找出对应proposal在feature map中对应的区域,进行对比分类即可。第二个问题所在就是在框架中2-3过程中的对提取到的区域进行变形,我们知道CNN提取特征的过程对图像的大小并无要求,只是在提取完特征,进行全连接的时候才需要固定尺寸的特征,然后使用SVM等分类器进行分类操作,当然这两个问题在SPP -NET中得到了很好的解决。

2.SPP NET

引入原因:在RCNN中,使用完ss提取proposal之后,对每个proposal都进行了CNN提取特征+SVM分类。
解决方法:因为region proposal都是图像的一部分,我们只需要对图像提一次卷积层特征,然后将region proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个region proposal的卷积层特征输入到全连接层做后续操作。

更直白的讲就是SPP-NET代替卷积网络中最后一个pooling层,而且这pooling层是多scale的。

接下来看一下SPPNET的框架图

SPPNET框架图

图中叠在一起的四个黑色方框是输入图像经过卷积层得到的特征图(feature maps of conv5),图中叫window的方框就是我们proposal在feature map中的对应位置,之后我们使用空间金字塔pooling层对这块区域进行池化,得到一个固定尺寸的向量,之后再加入到全连接层中。

(这一篇论文正在看,先写一部分大概内容,以后进行系统点补充)

关于Fast RCNN

FRCNN针对RCNN在训练时是multi-stage pipeline和训练的过程中很耗费时间空间的问题进行改进。

  1. 最后一个卷积层后加了一个ROI pooling layer。ROI pooling layer首先可以将image中的ROI定位到feature map,然后是用一个单层的SPP layer将这个feature map patch池化为固定大小的feature之后再传入全连接层。
  2. 损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

接下来看一下FRCNN的框架图

FRCNN的框架图

图中省略了通过ss获得proposal的过程,第一张图中红框里的内容即为通过ss提取到的proposal,中间的一块是经过深度卷积之后得到的conv feature map,图中灰色的部分就是我们红框中的proposal对应于conv feature map中的位置,之后对这个特征经过ROI pooling layer处理,之后进行全连接。在这里得到的ROI feature vector最终被分享,一个进行全连接之后用来做softmax回归,用来进行分类,另一个经过全连接之后用来做bbox回归。

关于multi-task loss

参数含义:

p = (p0; : : : ; pK), over K + 1 categories.P是通过k+1个全连接层输出使用softmax计算得到的。

v=

未完待续....

论文笔记--Fast RCNN的更多相关文章

  1. 论文笔记:目标检测算法(R-CNN,Fast R-CNN,Faster R-CNN,FPN,YOLOv1-v3)

    R-CNN(Region-based CNN) motivation:之前的视觉任务大多数考虑使用SIFT和HOG特征,而近年来CNN和ImageNet的出现使得图像分类问题取得重大突破,那么这方面的 ...

  2. 深度学习论文笔记:Fast R-CNN

    知识点 mAP:detection quality. Abstract 本文提出一种基于快速区域的卷积网络方法(快速R-CNN)用于对象检测. 快速R-CNN采用多项创新技术来提高训练和测试速度,同时 ...

  3. 论文笔记:Fast(er) RCNN

    在 RCNN 初步试水取得成功后,研究人员又迅速跟进,针对 RCNN 中的几点不足提出改进,接连推出了 fast-rcnn 和 faster-rcnn.关于这两篇论文,网上相关的文章实在是多如牛毛,因 ...

  4. 论文阅读笔记二十六:Fast R-CNN (ICCV2015)

    论文源址:https://arxiv.org/abs/1504.08083 参考博客:https://blog.csdn.net/shenxiaolu1984/article/details/5103 ...

  5. Fast R-CNN论文阅读笔记

    论文地址:Fast R-CNN R-CNN的缺陷 (1)训练是一个多级的流水线.R-CNN首先在候选目标上微调一个卷积神经网络,使用log loss.然后使用SVMs充当目标分类器,以取代softma ...

  6. 【CV论文阅读】 Fast RCNN + SGD笔记

    Fast RCNN的结构: 先从这幅图解释FAST RCNN的结构.首先,FAST RCNN的输入是包含两部分,image以及region proposal(在论文中叫做region of inter ...

  7. 标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN

    最近两周忙着上网课.投简历,博客没什么时间写,姑且把之前做的笔记放上来把... 下面是我之前看论文时记的笔记,之间copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来( ...

  8. 论文笔记(2):A fast learning algorithm for deep belief nets.

    论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...

  9. 论文笔记:Mask R-CNN

    之前在一次组会上,师弟诉苦说他用 UNet 处理一个病灶分割的任务,但效果极差,我看了他的数据后发现,那些病灶区域比起整张图而言非常的小,而 UNet 采用的损失函数通常是逐像素的分类损失,如此一来, ...

随机推荐

  1. AngularJs的UI组件ui-Bootstrap分享(七)——Buttons和Dropdown

    在ui-Bootstrap中,Buttons控件和Dropdown控件与form表单中的按钮和下拉框名字很像,但实际上这两个控件有新的含义. 先说Buttons,它是一组按钮,用来实现form表单中的 ...

  2. [make]makefile使用积累

    [注]:文中所指手册皆为GNU make Version 4.1 1.make的一般特性 1.1.Makefiles的构成 Makefiles包含五种元素: 显式规则(explicit rules), ...

  3. jacon

    com的线程回收不由java垃圾回收器进行处理,因此,每new一次jacob提供的类就要分配一定大小的内存给该操作,new出来的这个com对象在使用结束之后产生的垃圾java是无法回收的,new出来的 ...

  4. X3850M2安装CertOS 7 KVM

    在旧的X3850中安装linux系统,研究KVM. 通过选择fedora和centos测试,最终选择centos7来安装. 先安装了一台,安装第二台时又出现第一台的问题,决定记录下来防止记忆出错. 1 ...

  5. Android数据持久化技术 — — —SharedPreferences

    SharedPreferences是使用键值对的方式来存储数据. 要想使用SharedPreferences来存储数据,必须获取SharedPreferences对象,获取SharedPreferen ...

  6. BootStrap框架

    简介: Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷,是一个CSS ...

  7. 初学Spring

    Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油 以下是一个简单的应用Spring框架的java程序 src\dayday\HelloSpring.java ...

  8. java开发模式学习

    1.瀑布模式 这种模式适合小项目,一层层进行编码,没有规模的设计, 2.原型模式 先做模板给客户在做实体 3.面向对象模式 用面向对象的思想进行开发 4.螺旋模式 从内到外一层层开,

  9. Java输入一行数据并转存到数组中

    直接看下面的代码吧!主要是split和foreach的使用 import java.io.*; import java.util.*; public class Main{ public static ...

  10. BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)

    BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...