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

电子说

1.2w人已加入

描述

除了第 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 对每个候选区域执行前向传播以提取其特征。接下来,每个区域提案的特征用于预测该区域提案的类别和边界框。

pytorch

图 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 )。

pytorch

图 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。

pytorch

图 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 年)。

pytorch

图 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 )。

pytorch

图 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)。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分