• 【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解


    学习视频:Faster-RCNN理论合集

    概念辨析

    在目标检测中,proposals和anchors都是用于生成候选区域的概念,但它们在实现上有些许不同。

    • Anchors(锚框): 锚框是在图像中预定义的一组框,它们通常以不同的尺度和长宽比分布在图像的每个位置。锚框的目的是覆盖图像中可能出现的各种目标形状和尺寸,以便在后续的目标检测过程中进行检测。在训练过程中,通过将锚框与真实目标框进行匹配,以确定哪些锚框包含目标,以及它们与目标的重叠程度。

    • Proposals(提议): 提议是通过一种方法(如Selective Search或者Region Proposal Network)生成的候选区域。与锚框不同,提议的位置和形状不是预定义的,而是根据图像内容和算法生成的。提议通常是通过对图像进行分割、合并、过滤或其他技术来生成一组可能包含目标的区域。

    总的来说,锚框是一种固定的形状和尺寸的预定义区域,而提议是根据图像内容和算法生成的候选区域。在训练和测试目标检测模型时,通常会使用锚框或提议来生成候选区域,并进一步对这些区域进行分类和定位。

    R-CNN

    R-CNN(Region-based Convolutional Neural Network) 是一种经典的目标检测方法,它将目标检测任务分解为两个子任务:1)生成候选区域(region proposals);2)对每个候选区域进行分类和位置回归。

    • backbone : VGG16

    在这里插入图片描述

    R-CNN框架

    R-CNN的模型框架总体分为四个部分:

    1. Region proposal: Selective Search算法生成大量候选框
    2. Feacure extraction :神经网络对候选框进行特征提取
    3. Classification: 分类器对候选框内的物体进行分类
    4. Bounding-box regression: 回归器对候选框位置进行修正

    在这里插入图片描述

    1. 候选框生成(使用SS算法)

    在这里插入图片描述

    什么是目标检测中的Selective Search (SS) 算法

    Selective Search是一种常用于目标检测的候选区域生成方法。在传统的目标检测算法中,需要对图像中的每个可能包含目标的区域进行检测,但这样做会导致计算量巨大,尤其是在图像具有大量区域时。Selective Search的目标是通过一种高效的方式生成一组可能包含目标的区域,以减少后续目标检测算法的计算复杂度。

    Selective Search算法的核心思想是通过结合不同的图像特征(如颜色、纹理、大小等)来生成候选区域。具体来说,该算法首先将图像分割成多个小的超像素,然后利用这些超像素之间的相似性进行合并,生成不同大小和形状的候选区域。最终,Selective Search输出一组具有多样性和丰富性的候选区域,其中有些可能包含真实目标。

    这些生成的候选区域可以用作后续目标检测算法的输入,从而减少了需要检测的区域数量,提高了检测的效率。Selective Search已经成为了目标检测领域中的经典方法之一,在许多基于深度学习的目标检测算法中仍然被广泛使用。

    2. 使用神经网络提取每个候选框的特征

    在这里插入图片描述

    由2000个候选框输入神经网络中,获取4096维的特征,变为2000*4096的矩阵。特征矩阵如下所示。

    在这里插入图片描述

    3. 分类器判定候选框所选物体的类别

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

    NMS非极大值抑制

    计算两个候选框(A和B)的IOU值,如果A和B两个候选框所计算的IOU计算结果都大于设定的阈值,则说明这两个候选框代表的是同一个物体,就把预测概率更低的候选框(B)删除,保留A,如此循环操作。

    目的:剔除掉多个重复的候选框,只保留每个类中得分最高的候选框。

    在这里插入图片描述

    具体流程如下所示。

    在这里插入图片描述

    4. 回归器修正候选框位置

    在这里插入图片描述
    因为候选框位置可能不够精确,所以使用回归器对NMS剩下的候选框进行进一步的位置修正,从而得到每个类别得分最高的bounding box。

    5. RCNN缺陷

    1. 计算量大:R-CNN需要在图像中生成大量的候选区域,并对每个候选区域进行CNN特征提取和分类,这导致了大量的重复计算,计算量巨大,使得其在实时性上受限。

    2. 训练和推理速度慢:由于R-CNN需要对每个候选区域进行独立的CNN前向传播,因此其训练和推理速度较慢,尤其是在大规模数据集上。

    3. 空间利用率低:R-CNN在生成候选区域时会产生大量的重叠区域,而且需要每个候选区域都要进行独立的CNN特征提取,这导致了空间利用率较低,计算资源的浪费。

    4. 不可端到端训练:R-CNN是一种多阶段的目标检测方法,需要分别训练生成候选区域的模块和分类位置回归的模块,这种多阶段的训练过程不利于端到端的优化。

    5. 感兴趣区域池化(RoI Pooling)的固定大小:R-CNN中的RoI Pooling操作将不同尺寸的候选区域映射到相同大小的特征图上,这会造成信息损失,尤其是对于较小的目标。

    6. 改进

    详见下篇:
    【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列二:Fast R-CNN图文详解

  • 相关阅读:
    tensor.nozero(), mask, [mask]
    七年前端,如何做好一个team leader
    [附源码]计算机毕业设计游戏商城平台论文Springboot程序
    qt5-MVC:数据可视化的层次揭秘
    (附源码)spring boot流浪动物救助系统 毕业设计 180920
    通过Linux deploy搭建Android服务器(包括git)
    职场PUA:为什么你就不能逼自己一把呢?
    Abnova荧光原位杂交(FISH)探针解决方案
    【Java】类和对象知识
    100天精通Python(爬虫篇)——第43天:爬虫入门知识
  • 原文地址:https://blog.csdn.net/weixin_45662399/article/details/136674710