目标检测


当前目标检测算法总结与一些实现
KeyWords Plus:      R-CNN      Fast R-CNN      Faster R-CNN      YOLO

Introduction

数据库

目标检测算法

        R-CNN

        物体检测:搜索+分类
        首先需要产生物体可能的位置的候选区域,然后把这个区域送给CNN去 做分类和检测框回归,CNN可以使用在 ImageNet 数据集上预训练的模型。
        缺陷:每个区域的分类器计算都是独立的,速度太慢

Alt text

        Fast R-CNN

        物体检测:搜索+分类
         输入图片直接输入到卷积网络得到特征图,特征计算可以被不同 的候选区域共享 .
        主要贡献:避免了对相同区域的特征重复提取,大大提高了检测 器的速度
        缺陷候选区域提取成了瓶颈

Alt text

        Faster R-CNN

        物体检测:搜索+分类
         引入了一个叫Region Proposal Network(RPN)的结构,所谓 RPN就是一个CNN,用来预测哪些地方可能有物体,并回归出 物体的位置.

Alt text

        YOLO

        物体检测:一步到位的检测器
         利用整张图作为网络的输入,直接在输出层回归bounding box的 位置和bounding box所属的类别

Alt text

        SSD

        物体检测:一步到位的检测器
         SSD可以看作是一个强化版的RPN,多尺度检测,比较浅的输出层的分辨率比较高,用来检测小一些 的物体,比较深的层分辨率低,检测大的物体。

Alt text

        FPN

        物体检测:多尺度检测
        很好的利用了各个卷积特征图.预测是在不同特征层独立进行的。

Alt text

        Mask R-CNN

         将Roi Pooling 层替换成了 RoiAlign,解决了仅通过 Pooling直 接采样带来的 misalignment 非对齐问题
         在 Faster-RCNN 的基础上添加一个分支网络,在实现目标检测 的同时,把目标像素分割出来

Alt text

Faster R-CNN

安装faster-rcnn

Caffe安装中多版本protoc选择问题
Ubuntu 16.04 在Conda沙盒环境下安装Caffe(Python2.7.15 + Protobuf2.6.1 + GPU)
Ubuntu14.04下安装protobuf 2.6.1
Caffe框架的机器学习——安装与问题锦集
         重新编译caffe即可!重新编译之前一定记得 make clean !!!

安装流程

环境要求
Ubuntu16.04, cuda8
• 安装依赖库

1
2
3
4
5
6
7
   sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev git python-dev python-setuptools cython python-numpy python-pip 
sudo apt-get install --no-install-recommends libboost-all-dev
pip install scikit-image
pip install easydict
pip install Cython
pip install PyYAML
pip install opencv-python

• 安装 cuda8 https://developer.nvidia.com/cuda-80-ga2-download-archive
• 下载 faster rcnn 代码

1
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

• 进入 py-faster-rcnn 代码目录

1
cd py-faster-rcnn

• 编译 lib 库模块

1
cd lib && make && cd ..

• 编译 caffe 和 pycaffe http://caffe.berkeleyvision.org/installation.html - compilation

1
2
cd caffe-fast-rcnn 
cp Makefile.config.example Makefile.config

• 修改 Makefile.config 内容
WITH_PYTHON_LAYER:= 1
• make -j8
• 编译 pycaffe

注意事项

protoc版本问题
        编译caffe需要的protoc版本是protobuf-2.6.1。

        若想用/usr/bin/protoc则:

Alt text

        若使用anaconda中的,则:

        Alt text

        安装

1
conda install -c anaconda protobuf=2.6.1

数据集

        采用PASCAL VOC数据集
        20类物体检测 + 1类背景
        VOCdevkit目录

1
2
3
4
5
6
7
8
9
10
11
└── VOCdevkit     #根目录
└── VOC2012 #不同年份的数据集,这里只下载了2012的,还有2007等其它年份的
├── Annotations #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等
├── ImageSets #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本
│ ├── Action
│ ├── Layout
│ ├── Main
│ └── Segmentation
├── JPEGImages #存放源图片
├── SegmentationClass #存放的是图片,分割后的效果,见下文的例子
└── SegmentationObject #存放的是图片,分割后的效果,见下文的例子

        详情参考Pascal Voc数据集详细分析

网络框架

Alt text
整体网络结构

Alt text

Input-data

Alt text

        得到resize后的图片,boxes:框的坐标和类别

RPN卷积

        二分类检测器

Alt text
RPN的整体流程框架

Anchor box

        – base_size :16
        – ratios:[0.5,1, 2]
                • 矩形框面积不变
                • 𝑊𝑎=𝑊∗𝑟𝑎𝑡𝑖𝑜,𝐻𝑎=𝐻/𝑟𝑎𝑡𝑖𝑜
        – scales: [8, 16, 32]
                • 𝑊𝑠=𝑊𝑎∗𝑠𝑐𝑎𝑙𝑒,𝐻𝑠=𝐻𝑎∗𝑠𝑐𝑎𝑙𝑒
        – feat_stride :16
        

Alt text

        生成256个正例和负例的anchor

Alt text

Rpn_cls_score

Alt text
区分背景和前景

Rpn_loss_cls

Alt text

Rpn_loss_bbox

Alt text

NMS非极大值抑制:
        抑制不是极大值的元素,可以理解为局部最大搜索,除冗余的检测框,保留最好的一个.

ROI_pooling

        确定上一阶段的每个region proposal是否属于目标一类或者背景。

        ROI pooling提出的根本原因:
ROI pooling层能实现training和testing的显著加速,并提高检测accuracy。该层有两个输入:

  • 从具有多个卷积核池化的深度网络中获得的固定大小的feature maps
  • 一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标;

ROI pooling具体操作如下:
(1)根据输入image,将ROI映射到feature map对应位置
(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
(3)对每个sections进行max pooling操作;

        这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。

Alt text

Faster-rcnn应用

后续补上

反馈与建议

文章目录
  1. 1. Introduction
    1. 1.1. 数据库
    2. 1.2. 目标检测算法
  2. 2. Faster R-CNN
    1. 2.1. 安装faster-rcnn
    2. 2.2. 数据集
    3. 2.3. 网络框架
      1. 2.3.1. RPN卷积
      2. 2.3.2. ROI_pooling
    4. 2.4. Faster-rcnn应用
  3. 3. 反馈与建议
|