论文研读: Faster R-CNN

[TOC] 摘要 代码:https://github.com/rbgirshick/py-faster-rcnn 论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (https://arxiv.org/pdf/1506.01497.pdf) 引入 我们首先回顾一下 Fast R-CNN 的主要步骤: 特征提取:输入整张图片,利用 CNN 提取图片的特征。 提取候选区域:使用 selective search 从原始图片中提取出区域候选框,并把这些候选框一一投影到最后的特征层。 进行分类和回归:通过两个全连接层,分别用 softmax 进行目标分类识别和用回归模型进行边框位置和大小的微调。 Fast R-CNN 虽然比 R-CNN 和 SPP-net 都快,但是速度也依然不够快,因为使用 selective search 进行候选区域提名是个耗时的过程。论文中指出使用 Selective Search 在 CPU 上执行每张图需要2s,即便是使用另一个候选窗口提取模块:EdgeBoxes,也需要0.2s。而Faster R-CNN 去掉了 Selective search, 通过引入 RPN (Region Proposal Networks) 来提取候选窗口,使得区域提名、分类、回归能共享卷积层,节约了计算时间,进一步提高了检测速度,实现了端到端的训练。 RPN如何工作的?…

论文研读:Fast R-CNN

[TOC] 前面我们介绍了RCNN和SPP-Net,这次来介绍一下Fast R-CNN。 论文地址:https://arxiv.org/abs/1504.08083 代码:https://github.com/rbgirshick/fast-rcnn 摘要: R-CNN和SPP-net存在的问题 训练过程pipeline 比较麻烦:R-CNN 和 SPP-net 的训练分为多个步骤,较为繁琐 • 1. 对网络进行微调 – R-CNN对整个CNN进行fine tuning – SPP-net只对SPP之后的(全连接)层进行fine tuning(这个也限制了其准确度的提高) • 2. 针对每个类别训练SVM,替代softmax • 3. 训练bounding-box回归模型 训练过程耗费时间和内存空间 1.需要用CNN提取所有训练样本的特征 2.在训练SVM和回归的时候都需要用CNN提取的特征作为输入,特征需要写入磁盘上,时间开销大 “With Very Deep Networks, Such As Vgg16, This Process Takes 2.5 Gpu-Days For The 5k Images Of The Voc07 Trainval Set. These Features Require Hundreds…

论文研读:SPP-net

论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks 摘要 问题引入 我们先回顾一下 R-CNN 的基本步骤: 1. 使用 seletive search 从输入图片中提取大约 2k 个候选区域。 2. 对所有候选区域进行 warp 到固定尺度(227 × 227),也就是使得不同尺度和长宽比的区域被变换到相同大小,然后将其送入 CNN 网络,提取出 feature maps 。 3. 使用 SVM 进行分类,并做边框回归。 我们再来看一张时间复杂度上的统计分析图 由图可看,除了CNN网络提取特征耗时(需要对每一张图片的2000个窗口进行卷积网络计算),其中的warp操作(Cropping & resizing )也是挺费时间的。 另外我们从下图进行分析warp这种操作对信息可能造成的影响: 在左图中,我们进行裁剪 (crop) 的时候,丢失了车头和车尾信息,后续再送入 CNN 网络提取特征必定对识别精度有影响。 在右图中,进行 warp 操作后,明显可以看到塔已经变形。 我们不禁要问,既然 warp/crop 操作既费时间,又会造成信息损失或破坏,那么我们为什么要进行warp/crop这类操作? 答案是:CNN 网络对输入有固定尺度要求,我们需要 warp 来将输入统一到一个尺度。…

论文研读:R-CNN

R-CNN属于两阶段目标检测器,也就是会首先生成可能包含物体的候选区域(region proposal),然后再对候选区域进一步分类和校准,最终得到检测结果。R-CNN是首次把CNN引入目标检测领域,极大地提高了目标检测的精度,后续的Fast R-CNN以及Faster R-CNN都继承于它,算是开山鼻祖吧。 Rich feature hierarchies for accurate object detection and semantic segmentation 我们先看一下论文的摘要: Object detection performance, as measured on the canonical PASCAL VOC dataset, has plateaued in the last few years. The best-performing methods are complex en- semble systems that typically combine multiple low-level image features with high-level context. In this paper, we…

小试牛刀Keras之MNIST数据集识别

前言 在全世界中目前比较流行的深度学习框架主要有:Theano 、Torch 、PyTorch、Caffe、Tensorflow、MXNet、Keras。由于在笔者的工作中大部分是使用Tensorflow 和 Caffe,此外还有MXNet,但是对其他框架没有上过手,因此笔者有一个想法,就是把这些框架都体验一遍,并用这些框架都去实现一遍经典的深度学习网络模型。 关于Keras Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端,并将其函数统一封装,使得用户可以以同一个接口调用不同后端引擎的函数。Keras默认使用Tensorflow作为其后端。 – Theano是一个开源的符号主义张量操作框架,由蒙特利尔大学LISA/MILA实验室开发。 – TensorFlow是一个符号yo的商业级工具包。 时间就是金钱,Keras具有网络层、损失函数、优化器、初始化策略、激活函数和正则化方法等独立模块,能简易快速地实现原型设计,可以大大提高我们动手实现网络模型的效率。 安装Keras 建议使用PyPI的方法安装: sudo pip install keras MNIST数据集识别 talk is cheap,show me the code. from __future__ import print_function import keras import tensorflow as tf from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D…