• R-CNN,Fast R-CNN详解


    R-CNN

    R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。

    R-CNN流程

    R-CNN流程可以分为4个步骤:
    1.一张图像生成1k~2k个候选区域(使用Selective Search方法);
    2.对每个候选区域,使用深度网络提取特征;
    3.特征送入每一类的SVM分类器,判断是否属于该类;
    4.使用回归器精细修正候选框位置。

    在这里插入图片描述

    在这里插入图片描述

    1.Selective Search算法生成候选区域

    Selective Search算法用于为物体检测算法提供候选区域,它速度快,召回率高。Selective Search算法需要先使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。简单介绍一下算法流程:

    在这里插入图片描述

    算法描述如下
    * 输入:彩色图片
    * 输出:物体可能的位置,实际上是很多的矩形坐标
    
    1. 首先,使用论文中的方法将图片初始化为很多小区域 R = {r1, r2, ..., rn}2. 初始化一个相似集合为空集:S = {}
    3. 计算所有相邻区域之间的相似度,放入集合 S 中,集合 S 保存的其实是一个区域对以及它们之间的相似度
    
       for each 邻居区域对(ri, rj) do
           计算相似度 s(ri, rj)
           放入集合 SS = Ss(ri, rj)
           
    4. 找出 S 中相似度最高的区域对,将它们合并,并从 S 中删除与它们相关的所有相似度和区域对。
       重新计算这个新区域与周围区域的相似度,放入集合 S 中,并将这个新合并的区域放入集合 R 中,重复这个步骤直到 **S** 为空。
       
       while S 不为空 doS 中取得最大相似度区域对 s(ri, rj) = max(S)
           将取得的区域对合并,产生新的区域:rt = ri ∪ rj
           移除 ri 对应的所有相似度:S = S\s(ri, r*)
           移除 rj 对应的所有相似度:S = S\s(r*, rj)
           计算新的区域 rt 与周围区域的相似度集合 St
           将 St 放入相似度集合 SS = S ∪ St
           将 新的区域 rt 放入集合 RR = R ∪ rt
           
    5.R 中找出所有区域的 bounding box (即包围该区域的最小矩形框),
       这些 box 就是物体可能的区域。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    2.对候选区域使用深度网络提取特征

    将生成的候选区域缩放到227x227,接着将候选区域输入事先训练好的AlexNet CNN网络(这里的AlexNet网络去掉最后的全连接层)获取4096维的特征得到2000×4096维矩阵。

    3.特征送入每一类的SVM分类器,判断是否属于该类

    将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000x20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

    在这里插入图片描述

    4.使用回归器精细修正候选框位置

    对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
    如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

    在这里插入图片描述

    R-CNN存在的问题

    1.测试速度慢:测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
    2.训练速度慢:过程及其繁琐。
    3.训练所需空间大:对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间。

    Fast R-CNN

    Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal VOC数据集上)。

    Fast R-CNN流程

    1.一张图像生成1K~2K个候选区域(使用Selective Search方法) ;
    2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵;
    3.将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

    在这里插入图片描述

    在这里插入图片描述

    1.一张图像生成1K~2K个候选区域(同R-CNN第一步)
    2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵;

    与R-CNN相比,从第二步开始就完全不同了。Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。

    在这里插入图片描述

    3.将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

    关于ROI(Region of Interest) pooling层缩放到7x7大小的特征图,假设我们左边这张图为候选框对应特征图的特征矩阵,将其划分为7x7等份,对每一份进行maxpooling池化。无论你的特征矩阵多大,都能缩放成7x7大小。

    请添加图片描述

    关于分类器和边界框回归器,分类器输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点,这里取N=20。

    在这里插入图片描述

    边界回归器输出对应N+1个类别的候选边界框回归参数(dx,dy,dw,dh),共(N+1)x4个节点,这里取N=20。

    请添加图片描述

    根据边界回归器的输出调整候选框的位置:

    在这里插入图片描述

    Px,Py,Pw,Ph分别为候选框的中心x,y坐标,以及宽高;
    G x ^ \widehat{Gx} Gx G y ^ \widehat{Gy} Gy G w ^ \widehat{Gw} Gw G h ^ \widehat{Gh} Gh 分别为最终预测的边界框中心x,y坐标,以及宽高。

    在这里插入图片描述

    Fast R-CNN的损失函数包括两部分,分类损失和边界框回归损失:

    在这里插入图片描述

    p是分类器预测的softmax概率分布p=(p0……pk);
    u对应目标真实类别标签;
    tu对应边界框回归器预测的对应类别u的回归参数(txu,tyu,twu,thu);
    v对应真实目标的边界框回归参数(vx,vy,vw,vh);
    其中,vx = (Gx - Px)/Pw;vy = (Gy - Py)/Ph;vw=In(Gw/Pw);vh=In(Gh/Ph);
    λ是一个平衡系数,用于平衡分类损失和边界框回归损失;
    [u≥1]是一个艾弗森括号,当u≥1时,该项等于1;小于则该项等于0。当u≥1时,表示候选区域属于我们检测的某个类别,属于正样本,这时才有边界回归损失;等于0时表示候选区域是背景,是负样本,没有边界损失这一项;

    请添加图片描述

  • 相关阅读:
    在windows操作系统上安装MariaDB
    两台Linux文件夹单向同步【inotify、rsync、ssh】
    黑客技术(网络安全)自学2024
    阅读Skeleton.css源码,改善睡眠质量(尽管它只有419行代码)
    Xavier(8):Xavier使用速腾聚创激光雷达运行a-loam算法部分报错与解决方案
    使用C语言进行问题分析
    jsp JSTL标签详细示例(c:if与c:forEach)
    【uniapp小程序开发】—— 组件封装之【自定义轮播图】
    Windows下安装Redis服务
    llama-7B、vicuna-7b-delta-v1.1和vicuna-7b-v1.3——使用体验
  • 原文地址:https://blog.csdn.net/weixin_43912621/article/details/128026009