0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyTorch教程-14.8。基于区域的 CNN (R-CNN)

jf_pJlTbmA9 来源:PyTorch 作者:PyTorch 2023-06-05 15:44 次阅读

除了第 14.7 节中描述的单次多框检测之外,基于区域的 CNN 或具有 CNN 特征的区域 (R-CNN) 也是将深度学习应用于对象检测的许多开创性方法之一 (Girshick等人,2014 年)。在本节中,我们将介绍 R-CNN 及其一系列改进:fast R-CNN ( Girshick, 2015 )、faster R-CNN ( Ren et al. , 2015 )和掩模 R-CNN ( He等,2017)。由于篇幅有限,我们将只关注这些模型的设计。

14.8.1。R-CNN

R -CNN首先从输入图像中提取许多(例如,2000 个)region proposals (例如,anchor boxes 也可以被认为是 region proposals),标记它们的类别和边界框(例如,offsets)。

(Girshick等人,2014 年)

然后使用 CNN 对每个候选区域执行前向传播以提取其特征。接下来,每个区域提案的特征用于预测该区域提案的类别和边界框。

poYBAGR9O8KAMP_vAAQHJgcCVic113.svg

图 14.8.1 R-CNN 模型。

图 14.8.1显示了 R-CNN 模型。更具体地说,R-CNN包括以下四个步骤:

执行选择性搜索以在输入图像上提取多个高质量区域建议 (Uijlings等人,2013 年)。这些提议的区域通常是在具有不同形状和大小的多个尺度上选择的。每个区域提案都将标有一个类别和一个真实边界框。

选择一个预训练的 CNN 并在输出层之前截断它。resize每个region proposal到网络需要的输入大小,通过前向传播输出为region proposal提取的特征。

以每个region proposal的提取特征和标注类别为例。训练多个支持向量机对对象进行分类,其中每个支持向量机单独确定示例是否包含特定类。

以每个region proposal的提取特征和标注bounding box为例。训练线性回归模型来预测地面实况边界框。

尽管 R-CNN 模型使用预训练的 CNNs 来有效地提取图像特征,但速度很慢。想象一下,我们从单个输入图像中选择了数千个区域建议:这需要数千个 CNN 前向传播来执行对象检测。这种庞大的计算负载使得在实际应用中广泛使用 R-CNN 变得不可行。

14.8.2。快速 R-CNN

R-CNN 的主要性能瓶颈在于每个 region proposal 的独立 CNN 前向传播,没有共享计算。由于这些区域通常有重叠,独立的特征提取会导致大量重复计算。Fast R-CNN相比 R-CNN的主要改进之一是 CNN 前向传播仅在整个图像上进行 ( Girshick, 2015 )。

pYYBAGR9O8WATfePAAfvq7owwD4432.svg

图 14.8.2快速 R-CNN 模型。

图 14.8.2描述了快速 R-CNN 模型。其主要计算如下:

与 R-CNN 相比,在快速 R-CNN 中,CNN 用于特征提取的输入是整个图像,而不是单个区域建议。此外,这个 CNN 是可训练的。给定输入图像,让 CNN 输出的形状为 1×c×h1×w1.

假设选择性搜索生成n区域提案。这些区域提议(不同形状)在 CNN 输出上标记感兴趣区域(不同形状)。然后这些感兴趣的区域进一步提取相同形状的特征(比如高度 h2和宽度w2指定)以便于连接。为了实现这一点,快速 R-CNN 引入了 感兴趣区域 (RoI) 池化层:CNN 输出和区域提议被输入到该层,输出形状的级联特征n×c×h2×w2为所有区域提案进一步提取。

使用全连接层,将连接的特征转换为形状的输出n×d, 在哪里d取决于模型设计。

预测每个类别和边界框n区域提案。更具体地说,在类和边界框预测中,将全连接层输出转换为形状的输出 n×q(q是类的数量)和形状的输出n×4, 分别。类别预测使用 softmax 回归。

fast R-CNN 中提出的感兴趣区域池化层与7.5 节中介绍的池化层不同。在池化层中,我们通过指定池化窗口、填充和步幅的大小来间接控制输出形状。相反,我们可以直接在感兴趣区域池化层中指定输出形状。

例如,让我们将每个区域的输出高度和宽度指定为h2和w2, 分别。对于形状的任何感兴趣区域窗口h×w, 这个窗口被分为 h2×w2子窗口的网格,其中每个子窗口的形状大约是(h/h2)×(w/w2). 在实际应用中,任何一个子窗口的高和宽都要向上取整,最大的元素作为子窗口的输出。因此,即使感兴趣区域具有不同的形状,感兴趣区域池化层也可以提取相同形状的特征。

作为说明性示例,在图 14.8.3中,左上角 3×3感兴趣的区域被选择在4×4 输入。对于这个感兴趣的区域,我们使用2×2感兴趣区域池化层以获得2×2输出。请注意,四个划分的子窗口中的每一个都包含元素 0、1、4 和 5(5 是最大值);2 和 6(6 是最大值);8 和 9(9 是最大值);和 10。

pYYBAGR9O8iAF6hzAAC-ikVsQiI293.svg

图 14.8.3 A2×2感兴趣区域池化层。

下面我们演示感兴趣区域池化层的计算。假设CNN提取的特征的高和宽 X都是4,并且只有一个通道。

import torch import torchvision X = torch.arange(16.).reshape(1, 1, 4, 4) X

tensor([[[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.]]]])

from mxnet import np, npx npx.set_np() X = np.arange(16).reshape(1, 1, 4, 4) X

array([[[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.]]]])

让我们进一步假设输入图像的高度和宽度均为 40 像素,并且选择性搜索在该图像上生成两个区域建议。每个区域建议由五个元素表示:其对象类,后跟(x,y)- 其左上角和右下角的坐标。

rois = torch.Tensor([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])

rois = np.array([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])

因为的高度和宽度X是1/10输入图像的高度和宽度,根据指定参数将两个区域提议的坐标乘以0.1 spatial_scale 。然后将两个感兴趣区域分别标记X为 和。终于在X[:, :, 0:3, 0:3]X[:, :, 1:4, 0:4]2×2region of interest pooling,将每个感兴趣区域划分为子窗口的网格,进一步提取相同形状的特征2×2.

torchvision.ops.roi_pool(X, rois, output_size=(2, 2), spatial_scale=0.1)

tensor([[[[ 5., 6.], [ 9., 10.]]], [[[ 9., 11.], [13., 15.]]]])

npx.roi_pooling(X, rois, pooled_size=(2, 2), spatial_scale=0.1)

array([[[[ 5., 6.], [ 9., 10.]]], [[[ 9., 11.], [13., 15.]]]])

14.8.3。更快的 R-CNN

为了在目标检测中更加准确,快速 R-CNN 模型通常必须在选择性搜索中生成大量区域建议。为了在不损失准确性的情况下减少区域建议,更快的 R-CNN提出用区域建议网络 代替选择性搜索(Ren等人,2015 年)。

pYYBAGR9O8yAEp5OAAkQcA2GsKs954.svg

图 14.8.4更快的 R-CNN 模型。

图 14.8.4显示了更快的 R-CNN 模型。与fast R-CNN相比,faster R-CNN只是将region proposal方法从selective search改为region proposal network。模型的其余部分保持不变。区域建议网络的工作步骤如下:

用一个3×3填充为 1 的卷积层将 CNN 输出转换为新的输出c渠道。这样,CNN提取的特征图的空间维度上的每个单元都会得到一个新的长度为c.

以特征图的每个像素为中心,生成多个不同尺度和纵横比的anchor boxes并进行标注。

使用长度-c每个锚框中心的特征向量,预测该锚框的二元类(背景或对象)和边界框。

考虑那些预测的边界框,其预测的类是对象。使用非最大抑制去除重叠的结果。其余预测的对象边界框是感兴趣区域池化层所需的区域建议。

值得注意的是,作为更快的 R-CNN 模型的一部分,区域建议网络与模型的其余部分联合训练。换句话说,Faster R-CNN的目标函数不仅包括目标检测中的类和边界框预测,还包括区域提议网络中anchor boxes的二值类和边界框预测。作为端到端训练的结果,区域建议网络学习如何生成高质量的区域建议,从而在减少从数据中学习的区域建议数量的情况下保持目标检测的准确性。

14.8.4。Mask R-CNN

在训练数据集中,如果对象的像素级位置也被标记在图像上,mask R-CNN可以有效地利用这些详细的标记来进一步提高对象检测的准确性 ( He et al. , 2017 )。

pYYBAGR9O8-AXzZ1AAiSQsM4RMk798.svg

图 14.8.5 mask R-CNN 模型。

如图14.8.5所示,mask R-CNN在faster R-CNN的基础上进行了修改。具体来说,mask R-CNN 将感兴趣区域池化层替换为感兴趣区域 (RoI) 对齐 层。该感兴趣区域对齐层使用双线性插值来保留特征图上的空间信息,更适合像素级预测。该层的输出包含所有感兴趣区域的相同形状的特征图。它们不仅用于预测每个感兴趣区域的类和边界框,还用于通过额外的全卷积网络预测对象的像素级位置。本章后续部分将提供有关使用全卷积网络预测图像像素级语义的更多详细信息。

14.8.5。概括

R-CNN从输入图像中提取出多个region proposals,使用一个CNN对每个region proposals进行前向传播来提取其特征,然后使用这些特征来预测这个region proposals的类别和bounding box。

Fast R-CNN 相比 R-CNN 的一大改进是 CNN 前向传播只对整幅图像进行。它还引入了感兴趣区域池化层,使得具有不同形状的感兴趣区域可以进一步提取相同形状的特征。

Faster R-CNN 用联合训练的区域建议网络代替了 Fast R-CNN 中使用的选择性搜索,因此前者可以在减少区域建议数量的情况下保持目标检测的准确性。

在Faster R-CNN的基础上,mask R-CNN额外引入全卷积网络,利用像素级标签进一步提高目标检测的准确率。

14.8.6。练习

我们能否将目标检测框定为单个回归问题,例如预测边界框和类别概率?你可以参考YOLO模型的设计 (Redmon et al. , 2016)。

将单次射击多框检测与本节介绍的方法进行比较。它们的主要区别是什么?您可以参考Zhao等人的图 2。(2019)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cnn
    cnn
    +关注

    关注

    3

    文章

    327

    浏览量

    21298
  • pytorch
    +关注

    关注

    2

    文章

    761

    浏览量

    12831
收藏 人收藏

    评论

    相关推荐

    手把手教你使用LabVIEW实现Mask R-CNN图像实例分割(含源码)

    使用LabVIEW实现Mask R-CNN图像实例分割
    的头像 发表于 03-21 13:39 1407次阅读
    手把手教你使用LabVIEW实现Mask <b class='flag-5'>R-CNN</b>图像实例分割(含源码)

    TF之CNNCNN实现mnist数据集预测

    TF之CNNCNN实现mnist数据集预测 96%采用placeholder用法+2层C及其max_pool法+隐藏层dropout法+输出层softmax法+目标函数cross_entropy法+
    发表于 12-19 17:02

    大家是怎么压榨CNN模型的

    【技术综述】为了压榨CNN模型,这几年大家都干了什么
    发表于 05-29 14:49

    如何利用PyTorch API构建CNN?

      很多人对于卷积神经网络(CNN)并不了解,卷积神经网络是一种前馈神经网络,它包括卷积计算并具有很深的结构,卷积神经网络是深度学习的代表性算法之一。那么如何利用PyTorch API构建CNN
    发表于 07-16 18:13

    如何将DS_CNN_S.pb转换为ds_cnn_s.tflite?

    MIMRTX1064(SDK2.13.0)的KWS demo中放置了ds_cnn_s.tflite文件,提供demo中使用的模型示例。在 read.me 中,声明我可以找到脚本,但是,该文档中的脚本
    发表于 04-19 06:11

    如何将PyTorch模型与OpenVINO trade结合使用?

    无法确定如何转换 PyTorch 掩码 R-CNN 模型以配合OpenVINO™使用。
    发表于 08-15 07:04

    介绍目标检测工具Faster R-CNN,包括它的构造及实现原理

    在本篇文章中,公司的研究人员介绍了他们在研究过程中所使用的先进目标检测工具Faster R-CNN,包括它的构造及实现原理。
    的头像 发表于 01-27 11:49 1.8w次阅读
    介绍目标检测工具Faster <b class='flag-5'>R-CNN</b>,包括它的构造及实现原理

    Mask R-CNN:自动从视频中制作目标物体的GIF动图

    用深度学习模型——Mask R-CNN,自动从视频中制作目标物体的GIF动图。
    的头像 发表于 02-03 14:19 1.1w次阅读

    什么是Mask R-CNN?Mask R-CNN的工作原理

    它的概念很简单:对于每个目标对象,Faster R-CNN都有两个输出,一是分类标签,二是候选窗口;为了分割目标像素,我们可以在前两个输出的基础上增加第三个输出——指示对象在窗口中像素位置的二进制
    的头像 发表于 07-20 08:53 6.7w次阅读

    引入Mask R-CNN思想通过语义分割进行任意形状文本检测与识别

    网络架构由四部分组成,骨干网feature pyramid network (FPN) ,文本候选区域生成网络region proposal network (RPN) ,文本包围盒回归网络Fast R-CNN ,文本实例分割与字符分割网络mask branch。
    的头像 发表于 08-07 14:24 1.4w次阅读

    手把手教你操作Faster R-CNN和Mask R-CNN

    Mask R-CNN是承继于Faster R-CNN,Mask R-CNN只是在Faster R-CNN上面增加了一个Mask Prediction Branch(Mask预测分支),
    的头像 发表于 04-04 16:32 1.3w次阅读

    基于改进Faster R-CNN的目标检测方法

    为提高小尺度行人检测的准确性,提出一种基于改进 Faster r-CNN的目标检测方法。通过引入基于双线性插值的对齐池化层,避免感兴趣区域池化过程中两次量化操作导致的位置偏差,同时设计基于级联的多层
    发表于 03-23 14:52 3次下载
    基于改进Faster <b class='flag-5'>R-CNN</b>的目标检测方法

    用于实例分割的Mask R-CNN框架

    我们的方法称为 Mask R-CNN,扩展了 Faster RCNN ,方法是在每个感兴趣区域 (RoI) 上添加一个用于预测分割掩码的分支,与用于分类和边界框回归的现有分支并行(图 1)。掩码分支
    的头像 发表于 04-13 10:40 2202次阅读

    使用CNN进行2D路径规划

    卷积神经网络(CNN)是解决图像分类、分割、目标检测等任务的流行模型。本文将CNN应用于解决简单的二维路径规划问题。主要使用Python, PyTorch, NumPy和OpenCV。
    的头像 发表于 02-13 14:30 444次阅读

    PyTorch教程14.8之基于区域CNN(R-CNN)

    电子发烧友网站提供《PyTorch教程14.8之基于区域CNN(R-CNN).pdf》资料免费下载
    发表于 06-05 11:09 0次下载
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>14.8</b>之基于<b class='flag-5'>区域</b>的<b class='flag-5'>CNN</b>(<b class='flag-5'>R-CNN</b>)