zoukankan      html  css  js  c++  java
  • 目标检测算法RCNN,Fast RCNN,Faster RCNN

    @

    一、REGION CNN

    1.1 原理

    滑窗法是一种行之有效的暴力方法,先生成大量的候选框,对每个框进行分类,可以大概的检测出类

    在这里插入图片描述

    • 一张图像生成1K~2K个候选区域
    • 对每个候选区域,使用深度网络提取特征
    • 特征送入每一类的SVM分类器,判别是否属于该类
    • 使用回归器精细修正候选框位置

    1.2 候选区域生成方法

    在这里插入图片描述

    使用了Selective Search方法从一张图像生成约2000-3000个候选区域。基本思路:

    • 传统分割算法(如像素点聚合),将图像分割成小区域
    • 使用贪心算法合并候选区域:计算所有相邻区域的相似度。将最相似的两个区域合并为一个区域。重复直到整张图像合并成一个区域位置
    • 输出所有曾经存在过的区域,生成候选区域

    1.3 训练过程

    1. 预训练:在lmageNet上面训练一个分类神经网络
    2. 使用Selective Search找出候选区域
    3. 将候选区域resize成CNN输入的尺寸
    4. fine-tuning:在自己的训练数据集中fine-tune CNN,作为一个识别K+1种类别的分类问题,K为感兴趣的目标种类数,1为背景类别.Fine-tune使用比较小的learning-rate,在正样本上面oversample (selective search出来的候选区域大多为背景)
    5. 去掉fine-tune后的CNN的最后一个分类层,将每一个候选区域通过CNN,输出为一个特征向量,
    6. 使用特征向量为每一个类别训练一个二元SVM分类器(正样本为候选区域和真实区域loU大于等于0.3的区域,其它为负样本)
    7. 为了减少Selective Search候选区域定位误差,使用regression模型预测新的定位
      在这里插入图片描述di是和ti一样的转换后的比例值

    在这里插入图片描述

    1.4 R-CNN的计算瓶颈

    · 对于每一幅图,使用Selective Search选择2000个候选区域,这个过程本身比较慢
    . 2000个区域都要使用CNN网络预测图像特征,这些区域还会有重叠的部分
    · 4个分离的部件没有重用计算:

    • Selective Search:选择候选区域
    • CNN:提取图像特征
    • SVM:目标分类识别 Regression模型:定位

    二、Fast RCNN

    在这里插入图片描述

    2.1 改进点

    • 将R-CNN中下面3个独立模块整合在一起,减少计算量:
      • CNN:提取图像特征
      • SVM:目标分类识别
      • Regression模型:定位
    • 不对每个候选区域独立通过CNN提取特征,将整个图像通过CNN提取特征,然后从CNN的特征图中根据Selection Search的候选区域通过Rol Pooling层提取区域特征

    2.2 网络结构

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    2.3 ROI Pooling

    在这里插入图片描述

    • 将任意大小的特征图(CNN的输出)使用Max Pooling转换为固定大小的特征图.
    • 假设Rol Pooling的输入为H1* W1像素,输出为H2W2像素(H2<H1; W2< W1),那么输入特征图会被平均分为H2 W2个格子(每一个格子包含H1/H2 * W1/W2个像素).然后对每一个格子做MaxPooling.

    2.4 损失函数

    在这里插入图片描述

    2.5 总结

    优点:

    • 由于图像只通过CNN一次,而不是让每一个候选区独立通过CNN,减少了运算量
    • 将R-CNN中的多个SVM的分类合并为一个DNN,让分类和定位可以同时训练

    缺点:

    • 但是任然依靠Selective Search选择候选区域

    三、Faster R-CNN

    去掉selective Search,将候选区域的选择整合到深度学习网络模型中(Region Proposal Network: RPN和fast R-CNN结合)
    在这里插入图片描述

    3.1 RPN网络

    在这里插入图片描述

    3*3的滑窗。在每个中心生成k(k=9)个anchor boxes。每个anchor boxes需要判断里面是否有需要识别的物体(前景和背景),所以有2k个得分。每个anchor boxes还有四个坐标,所以有4k个坐标

    • 一个点处的anchor boxes
    • 在这里插入图片描述

    3.2 损失函数

    在这里插入图片描述

    3.3 训练步骤

    在这里插入图片描述

  • 相关阅读:
    opencv-learnopencv-Facial Landmark Detection
    【OpenCV】Learn OpenCV
    leetcode-1-TwoNums
    【c++基础】判断是否到文件末尾-eof函数
    【c++基础】int转string自动补零
    【linux】如何退出shell终端
    【机器学习算法】bagging算法
    【机器学习算法】Boostrapping算法
    【python基础】如何注释代码块
    【机器学习算法】cascade classifier级联分类器
  • 原文地址:https://www.cnblogs.com/long5683/p/14810373.html
Copyright © 2011-2022 走看看