• 目标检测算法之R-CNN算法详解


    R-CNN全称为Region-CNN,它可以说是第一个成功地将深度学习应用到目标检测上的算法。后面提到的Fast R-CNN、Faster R-CNN全部都是建立在R-CNN的基础上的。

    传统目标检测流程:

    (1)区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)

    (2)特征提取(SIFT、HOG等;形态多样性、光照变换多样性、背景多样性使得特征鲁棒性差)

    (3)分类器分类(SVM、Adaboost)

    一、RCNN思路(Selective Search + CNN + SVM)

    R-CNN遵循传统目标检测的思路,同样采用,对每个框提取特征、图像分类、非极大值抑制四个步骤进行目标检测,只不过进行了部分的改进。

    • 经典的目标检测算法使用滑动窗法去依次判断所有可能的区域。而这里预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断,大大减少了计算量
    • 将传统的特征(如SIFT,HOG特征等)换成了深度卷积网络提取特征

    &创新点

      1. 采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力

      2. 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题

    二、算法步骤

    数据集采用pascal VOC,这个数据集的object一共有20个类别。首先用selective search方法在每张图像上选取约2000个region proposal,region proposal就是object有可能出现的位置。然后根据这些region proposal构造训练和测试样本,注意这些region proposal的大小不一,另外样本的类别是21个(包括了背景)

    简要步骤如下:

    (1)输入测试图像,利用选择性搜索selective search在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal

    (2)先在每个建议框周围加上16个像素值为建议框像素平均值的边框,在直接变形为227x227的大小(Alexnet的尺寸)

    (3)先将所有建议框像素减去该建议框像素平均值,将每个227x227输入Alexnet CNN网络获取4096维特征。2000个建议框的CNN特征组合成2000x4096维矩阵

    (4)将2000x4096维特征与20个SVM组成权值矩阵4096x2000相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000x20维矩阵表示每个建议框是某个物体类别的得分

    (5)对上述2000x20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框

    (6)分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box

    具体步骤如下:

    步骤一:下载一个分类模型(Alexnet)

    步骤二:对该模型做fine-tuning

      • 将分类数从1000改为21,比如20种物体 + 1个背景

      • 去掉最后一个全连接层

    步骤三:特征提取

       • 提取图像的所有候选框(选择性搜索Selective Search)

      • 对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(对候选框提取到的特征)存到硬盘

    步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别

    每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative。

    比如下图,就是狗分类的SVM

     步骤五:使用回归器精细修正候选框位置:对每一个类,训练一个线性回归模型去判定这个框是否框的完美

    &缺点

    R-CNN第一步对原始图片通过Selective Search提取的候选框region proposal多大2000个左右,而这2000个候选框每个框度需要进行CNN提取特征 + SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都要47s

    参考地址:

    https://cloud.tencent.com/developer/news/281788

    https://blog.csdn.net/wopawn/article/details/52133338

    https://www.cnblogs.com/zyly/p/9246221.html

  • 相关阅读:
    JS中的宽高(基础知识很重要)
    JS基础知识总结
    Spring中的JdbcTemplate使用
    Spring中集合类型属性注入
    白盒交换机公司&产品列表
    虚拟化有哪几种架构
    全虚拟化与半虚拟化
    白牌交换机现状分析zz
    SDN控制器列表
    Arista公司
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10456854.html
Copyright © 2020-2023  润新知