赞
踩
作者:Sixiao Zheng et al.(复旦大学 & 牛津大学 & 萨里大学 & 腾讯优图 & 脸书)
论文:https://arxiv.org/abs/2012.15840
代码:https://github.com/fudan-zvg/SETR
摘要
最新的语义分割方法采用全卷积网络(FCN),并具有编码器和解码器架构。编码器逐渐降低空间分辨率,并学习更多的抽象/语义视觉概念与更大的感受野。由于上下文建模对分割至关重要,最近的研究集中在通过扩张/空洞卷积或插入注意模块来增加感受野。然而,基于FCN的编码器-解码器架构保持不变。在本文中,我们的提供一个替代的视角,将语义分割作为一个序列到序列的预测任务。具体来说,我们部署了一个纯Transformer(即,没有卷积和分辨率降低)来将图像编码为一系列补丁。通过在Transformer的每一层中建模全局上下文,这个编码器可以与一个简单的解码器相结合,以提供一个强大的分割模型,称为SETR。大量的实验表明,SETR在ADE20K上达到了新的水平(50.28% mIoU), Pascal Context (55.83% mIoU),在Cityscapes上也取得了很好的结果。特别是,我们在提交当天就在竞争激烈的ADE20K测试服务器排行榜上获得了第一名。
1.引言
自从[36]的开创性工作以来,现有的语义分割模型一直被基于全卷积网络(FCN)的模型所主导。标准FCN分割模型具有编解码器体系结构:编码器用于特征表示学习,解码器用于对编码器产生的特征表示进行像素级分类。其中,特征表示学习(即编码器)可以说是最重要的模型组件[8,28,57,60]。这个编码器,像大多数其他为图像理解而设计的cnn一样,由堆叠的卷积层组成。由于考虑到计算成本,特征图的分辨率逐渐降低,编码器因此能够学习更抽象/语义的视觉概念,并逐渐增加感受野。由于平移不变性和局部性这两个优点,这种设计很受欢迎。前者很好地尊重了成像过程[58]的本质,从而支持了模型对不可见图像数据的泛化能力。而后者通过跨空间共享参数来控制模型的复杂性。然而,它也存在一个基本的限制,其有限的感受野难以学习远程依赖信息,这对无约束场景图像的语义分割至关重要。
为了克服上述限制,最近提出了一些方法。一种方法是直接操作卷积运算,包括大尺寸卷积核[40],空洞卷积[8,22]和图像/特征金字塔[60]。另一种方法是将注意力模块集成到FCN架构中。该模块旨在对特征映射[48]中所有像素的全局交互进行建模。当应用到语义分割时[25,29],一个常见的设计是将注意力模块与FCN架构相结合,注意力层位于顶部。无论采用哪种方法,标准的编解码器FCN模型架构都保持不变。最近,人们试图完全消除卷积,转而采用单独注意力模型[47]。然而,即使没有卷积,它们也不会改变FCN模型结构的本质:编码器对输入的空间分辨率进行下采样,产生用于区分语义类的低分辨率特征映射,解码器对特征进行上采样转换为全分辨率分割图。
本文旨在对语义分割模型的设计进行重新思考,并提出一种替代方法。特别地,我们建议用一个纯transformer[45]取代基于堆叠卷积层的逐渐降低空间分辨率的编码器,从而产生一个新的分割模型称为SEgmentation TRansformer(SETR)。该编码器将输入图像看作由学习到的patch嵌入表示的图像小块序列,并对该序列进行全局自注意建模,进行判别特征表示学习。具体来说,我们首先将图像分解为一个由固定大小的patch组成的网格,形成一系列patch。线性嵌入层将每个patch的像素映射成平坦向量,得到一个特征嵌入向量序列作为transformer的输入。给定从transformer编码器学到的特征,然后使用解码器恢复原始图像分辨率。关键是在空间分辨率上没有下采样,而是在transformer编码器的每一层进行全局上下文建模,从而为语义分割问题提供了一个全新的视角。
这种纯transformer设计的灵感来自其在自然语言处理(NLP)方面的巨大成功[15,45]。最近,纯视觉transformer或ViT[17]已被证明对图像分类任务有效。因此,它提供了直接证据,表明传统的堆叠卷积层(即CNN)设计可以受到挑战,图像特征不必通过降低空间分辨率从局部到全局逐步学习。然而,将纯Transformer从图像分类扩展到空间位置敏感的语义分割任务并不是简单的。我们通过经验表明SETR不仅在模型设计中提供了一个新的视角,而且在许多基准上达到了新的水平。
本文的主要贡献如下:
(1)我们从序列到序列学习的角度重新思考了图像语义分割问题,提供了一种替代主要编码器-解码器FCN模型的设计。
(2)作为实例,我们利用transformer框架通过对图像进行序列化来实现我们完全注意力的特征表示编码器。
(3)为了广泛地检查自注意的特征表示,我们进一步介绍了三种不同的复杂程度的解码器设计。
大量的实验表明,我们的SETR模型可以学习到比不同的带或不带注意模块的FCNs更好的特征表示,从而在ADE20K上达到了新的水平(50.28%)、Pascal Context(55.83%)和Cityscapes上有竞争力的结果。尤其值得一提的是,我们的参赛作品在竞争激烈的ADE20K测试服务器排行榜上排名第一。
2.相关工作
语义分割:随着深度神经网络的发展,语义图像分割得到了极大的发展。通过去除全连接层,全卷积网络(FCN)[36]能够实现像素预测。虽然FCN的预测相对粗糙,但开发了几种基于CRF/MRF的方法来帮助细化粗糙的预测。为了解决语义和位置[36]之间的内在关系,需要为编码器和解码器聚合粗粒度层和细粒度层。这导致了不同变体的编码器-解码器结构[2,38,42]用于多级特征融合。
许多最近的努力都集中在解决FCN有限的感受野/上下文建模问题。为了扩大接受野,DeepLab[7]和Dilation[53]引入扩张卷积。另外,上下文建模是PSPNet[60]和DeepLabV2[9]的重点。前者提出了PPM模块来获取不同区域的上下文信息,后者开发了ASPP模块,采用了不同膨胀率的金字塔扩张卷积。分解的大卷积核[40]也用于上下文捕获。近年来,基于注意力的模型被广泛应用于获取长范围的上下文信息。PSANet[61]开发了点级空间注意模块,用于动态捕捉远程情境。DANet[18]包含空间注意和通道注意。CCNet[26]侧重于节省由全空间注意引入的复杂的计算。DGMN[57]为场景建模建立了一个动态的图消息传递网络,可以显著降低计算复杂度。注意,所有这些方法仍然是基于fcn,其中特征编码和提取部分是基于经典的ConvNets,如VGG[43]和ResNet[20]。在这项工作中,我们从不同的角度重新思考语义分割任务。
Transformer:transformer和自注意模型已经彻底改变了机器翻译和NLP。近年来,对transformer结构在图像识别中的应用也进行了一些探索。Non-local网络[48]将transformer式的注意力附加到卷积骨干网上。AANet[3]混合卷积和自我注意骨干训练。LRNet[24]和standalone网络[41]探索局部自我注意,以避免全局自我注意带来的大量计算。SAN[59]探索了两种类型的自我注意模块。Axial-Attention[47]将全局空间注意分解为两个独立的轴向注意,从而极大地减少了计算量。除了这些基于纯transformer的模型,还有cnn -transformer混合模型。DETR[5]和后续变形版本利用transformer进行目标检测,其中transformer被附加在检测头内。STTR [32]LSTR[34]分别采用transformer进行视差估计和车道形状预测。最近,ViT[17]是第一个表明基于纯transformer的图像分类模型可以达到最先进的工作。这为在语义分割模型中开发基于纯transformer的编码器设计提供了直接的启发。
最相关的工作是[47],它也利用注意力机制进行图像分割。然而,有几个关键的区别。首先,虽然在[47]中类似我们的SETR完全消除了卷积,但他们的模型仍然遵循传统的FCN设计,即特征地图的空间分辨率逐渐降低。相比之下,我们的序列-序列预测模型始终保持相同的空间分辨率,代表了模型设计的一个阶跃变化。其次,为了最大限度地提高现代硬件加速器的可扩展性和便于使用,我们坚持标准的自注意力设计。相反,[47]采用了一个特别设计的轴向注意[21],这使标准计算设施的可伸缩性较小。我们的模型在分割精度上也很优越(见第4节)。
3.方法
3.1 FCN-based语义分割
为了与我们的新模型设计进行对比,让我们首先重温用于图像语义分割的传FCN[36]。FCN编码器由一堆顺序连接的卷积层组成。第一层以图像作为输入,记为H ×W ×3,H ×W指定以像素为单位的图像大小。后续第i层的输入是一个大小为h × w × d的三维张量,其中h和w是特征映射的空间维数,d是特征/通道维数。张量在较高一层的位置是基于所有较低一层的张量的位置来计算的,这些张量通过一层一层的卷积来连接,被定义为它们的感受野。由于卷积操作的局域性,感受野沿着层的深度线性增加,这取决于卷积核的大小(通常为3 × 3)。因此,在这种FCN架构中,只有具有大感受野的更高层次才能建模长距离依赖关系。然而,研究表明,一旦达到一定的深度[20],随着增加更多层,优势将迅速减少,因此,为上下文建模提供有限的感受野是普通FCN架构的内在限制。
最近一些SOTA方法[25,56,57]建议FCN与注意力机制相结合是学习长距离上下文信息的一种更有效的策略。这些方法由于其二次复杂度w.r.t.特征张量的像素数,将注意力学习限制在具有较小输入尺寸的较高层次上。这意味着缺乏对低层次特征张量的依赖学习,导致次优表示学习。为了克服这一限制,我们提出了一个纯粹的基于自注意的编码器,命名为SEgmentation TRansformers(SETR)。
3.2. Segmentation transformers (SETR)
Image to sequence:图像到序列的SETR遵循与NLP相同的输入-输出结构进行1维序列之间的转换。因此二维图像与一维序列不匹配。具体地说,如图1(a)所示,Transformer接受1维序列的特性嵌入Z∈RL×C为输入,L为序列长度,C为隐藏通道大小。因此,将输入图像x∈RH×W×3转换为Z需要图像序列化。
一种简单的图像序列化方法是将图像像素值扁平化为大小为3HW的一维向量。对于大小为480(H) × 480(W) × 3的典型图像,得到的矢量长度为691200。考虑到Transformer的二次模型复杂性,这样的高维向量不可能同时在空间和时间上处理。因此,将每个像素标记为Transformer的输入是不可能的。
考虑到一个典型的用于语义分割的编码器会将一个二维图像x∈RH×W×3下采样为一个特征映射xf∈RH/16×W/16 ×C,因此我们决定将transformer输入序列长度L设为H/16×W/16 =HW/256。这样,Transformer的输出序列可以被简单地重塑为目标特性映射xf。
获取HW/256个长输入序列,我们将图像x∈RH×W×3划分为H/16×W/16个补丁组成的网格,然后将这个网格平展成一个序列。通过使用线性投影函数f: p−→e∈RC将每个向量化的补丁 p进一步映射到一个潜在的c维嵌入空间中,我们得到了图像x的一维patch嵌入序列。为了对patch空间信息进行编码,我们对每个位置i学习一个特定的嵌入pi,并将其添加到ei中,形成最终序列输入E = {e1 + p1, e2 + p2,···,eL + pL}。通过这种方式,空间信息得以保留,尽管transformer具有无序的自我注意特性。
Transformer:以一维嵌入序列E为输入,采用基于纯transformer的编码器来学习特征表示。这意味着每一个transformer层都有一个全局感受野,一次性解决了现有FCN编码器感受野有限的问题。transformer编码器由多头自注意(MSA) 层和多层感知器(MLP)[46]组成(图1(a))。在每一层l上,self-attention的输入是由输入Zl−1∈RL×C计算出来的(查询、键、值)三元组,即:
其中,WQ/WK/WV∈RC×d为三个线性投影层的可学习参数,d为(查询、键、值)的维度。Self-attention (SA)被定义为:
MSA是一个扩展,有m个独立的SA操作,并投影它们的连接输出:
WO∈R md×C。d通常设置为C/m。MSA的输出被一个带有残差跳跃作为层输出的MLP块转换为:
注意,层标准化在MSA和MLP块之前应用,为简单起见省略。我们表示{Z1、Z2、··、ZLe}为transformer层特征。
3.3 译码器的设计
为了评估SETR编码器特征表示Z的有效性,我们引入了三种不同的解码器设计来执行像素级分割。由于解码器的目标是在原始二维图像空间(H × W)中生成分割结果,我们需要重塑编码器的特性(在解码器中使用)Z,从二维图像HW/256到三维特征图H/16×W/16×C.接下来,我们简要描述了这三种解码器。
(1) Naive upsampling (Naive) 这个朴素解码器首先将transformer特征ZLe投射到类别数的维度上(例如,在城市景观的实验中为19)。为此,我们采用简单的2层网络结构:1 × 1 conv +同步批标准化(w/ ReLU) + 1 × 1 conv。之后,我们简单地双线性向上采样输出到全图像分辨率,然后是一个分类层,像素级交叉熵损失。当使用该解码器时,我们将模型标记为SETR-Naıve。
(2)渐进上采样(PUP)取代了可能引入噪声预测的一步上采样策略,我们考虑了交替卷积层和上采样操作的渐进上采样策略。为了最大限度地减轻对抗效应,我们将采样限制为2倍。因此,从ZLe得到H/16×W/16大小的特征图恢复到完整分辨率总共需要4次操作。这个过程的更多细节见图1(b)。当使用该解码器时,我们将模型表示为SETR-PUP。
(3)多层级特征聚合(MLA)第三种设计采用多层级特征聚合(图1(c))以类似的特征金字塔网络[27,33]。然而,我们的解码器是根本不同的,因为每个SETR层的特征表示Zl共享相同的分辨率,没有金字塔形状。
具体地说,我们将特征表示作为输入{Zm} (m∈{Le/M, 2Le/M,···,MLe/M})从M层均匀分布在Le/M步的层到解码器。然后部署M数据流,每个数据流聚焦于一个特定的选定层。在每个数据流中,我们首先从HW/256的二维形状重塑编码器的特征Zl到3D特征图H/16×W/16×C。采用核大小为1 × 1,3 × 3和3 × 3的3层网络,在第一层和第三层分别减半特征通道,在第三层后通过双线性运算将空间分辨率提高4倍。为了增强跨不同流的交互,我们通过在第一层之后添加元素引入了自顶向下的聚合设计。一个额外的在元素上添加特征后应用3 × 3 conv。在第三层之后,我们通过通道级联从所有流中获得融合特征,然后双线性上采样4倍至全分辨率。当使用这个解码器时,我们将模型表示为SETR-MLA。
4实验
4.1. 实验设置
我们在三种广泛使用的语义分割基准数据集上进行了实验。
Cityscapes[13]密集注释19个对象类别的图像与城市场景。它包含5000张精心标注的图像,分为2975张、500张和1525张,分别用于训练、验证和测试。这些图像都是在2048 × 1024的高分辨率下拍摄的。此外,它还提供19,998幅粗标注图像用于模型训练。
ADE20K[63]是一个具有挑战性的场景解析基准,包含150个细粒度语义概念。它包含了20210,2000和3352张图像用于训练、验证和测试。
PASCAL Context [37]为整个场景(“thing” and “stuff”类)提供像素级语义标签,并分别包含4998和5105张用于训练和验证的图像。根据之前的工作,我们评估了最频繁的59个类和背景类(总共60个类)。
实现细节:遵循默认设置(例如,数据增强和训练计划)的公共代码库mmsegmentation [39], (i)在所有实验的训练过程中,我们使用随机调整大小的比例在0.5和2之间,随机裁剪(Cityscapes,ADE20K和Pascal Context分别为768,512和480)和随机水平翻转; (ii)我们设置批量大小为16,ADE20K和Pascal Context的实验的总迭代次数分别为16万和8万。对于Cityscapes,我们将批大小设置为8,并在表2、6和7中报告了一些训练计划,以便进行公平比较。我们采用多项式学习速率衰减计划[60],并采用SGD作为优化器。在三个数据集上的所有实验动量和权重衰减被设置为0.9和0。我们将ADE20K和Pascal Context的初始学习速率设置为0.001,Cityscapes设为0.01。
辅助损失:和[60]一样,我们发现辅助分割损失有助于模型的训练。每个辅助损失头遵循一个2层网络。我们在不同的transformer层添加辅助损失,SETR-Naıve (Z10, z15, z20), SETR-PUP (Z10、Z15、Z20、Z24)、SETR-MLA (Z6, Z12, Z18,Z24)。辅助损失和主损失头同时应用。
多尺度测试:我们使用mmsegmentation[39]的默认设置。具体地说,首先将输入图像缩放到统一的大小。然后对具有缩放因子的图像进行多尺度缩放和随机水平翻转(0.5, 0.75, 1.0, 1.25, 1.5, 1.75)。测试采用滑动窗口(例如,Pascal Context为480 × 480)。如果短边小于滑动窗口的大小,则图像将其短边缩放为滑动窗口大小(e.g., 480)同时保持长宽比。同步BN用于解码器和辅助损失头。为了训练的简单性,我们在模型训练中不采用OHEM [55] loss等常用的技巧。
Baseline:我们采用扩展的FCN[36]和语义FPN[27]作为基线,其结果取自[39]。我们的模型和基线在相同的设置下进行训练和测试,以便进行公平的比较。此外,还对最新的模型进行了比较。注意,由于GPU内存的限制,我们在所有的模型中使用输出stride 16,膨胀卷积的FCN输出stride 8。
SETR变体:我们模型的三种不同解码器设计的变体(见第3.3节),即SETR- naıve,SETR-PUP, SETR-MLA。此外,我们使用了两种不同的编码器“T-Base”和“T-Large”,分别具有12层和24层(表1)。除非另有说明,我们使用“T-Large”作为SETR-Naıve、SETR-PUP和SETR-MLA的编码器。我们将SETR-Naıve-Base表示为SETR-Naıve中使用“T-Base”的模型。
虽然设计上为一个纯transformer编码器的模型,但我们也设置一个基线混合使用基于ResNet-50的FCN编码器,并将其输出特性输入到SETR中。为了解决GPU内存限制和公平比较,我们在Hybrid中只考虑' T-Base ',并将FCN的输出stride设置为1/16。也就是说,Hybrid是ResNet-50和SETR-Naıve-Base的组合。
预训练:我们使用由ViT[17]或DeiT[44]初始化我们模型中的所有transformer层和输入线性投影层。我们将SETR-Naıve-DeiT表示为SETR-Naıve-Base中利用DeiT[44]预训练的模型。所有未经预先训练的层都是随机初始化的。对于Hybrid的FCN编码器,我们使用预训练的初始权值ImageNet-1k。对于transformer部分,我们使用ViT[17]、DeiT[44]或随机初始化的预训练权值。
我们使用16 × 16大小的patch进行所有的实验。我们对预训练的位置嵌入进行二维插值,根据其在原始图像中的位置进行不同输入大小的微调。
评价指标:遵循标准的评估方法[13],平均交并比(mIoU)作为所有类的评价指标。在ADE20K中加上了像素的精度指标。
4.2.消融研究
表2和表3显示了(a)不同训练计划下SETR的不同变体的消融研究,(b)与FCN[39]和语义FPN[39]的比较,(c)不同数据上的预训练,(d)与Hybrid的比较,(e)与不同预训练下的FCN的比较。除特别说明外,表2和表3上的所有实验都是在城市景观数据集训练,批大小为8,并使用单尺度测试协议对城市景观验证集的平均IoU(%)率进行评估。在ADE20K上的实验也遵循单尺度测试协议。
从表2中,我们可以得出以下结论:(1)逐步向上采样特征地图,SETR-PUP在城市景观数据集的所有变体中取得了最好的表现。SETR-MLA性能较差的一个可能原因是,不同transformer层的特征输出没有像特征金字塔网络(FPN)那样的分辨率金字塔的好处(见图5)。然而,在ADE20K val集上(表3和4),SETR-MLA的表现略好于SETR-PUP,并大大优于对transformer输出特性进行一次性16×的上采样的变种SETR-Naıve。(2)使用“T-Large”的变体(例如,SETR-MLA和SETRNaıve)优于它们的“T-Base”对应版本,即,SETR-MLA-Base和SETR-Naıve-Base。(3)我们的SETR-PUP-Base(76.71)表现不如混合baseline(76.76),当使用更多的迭代(80k)进行训练时,它变得更好(78.02)。结果表明语义分割中transformer可以替代FCN编码器设计,进一步验证了本文模型的有效性。(4)预训练对我们的模型至关重要。在城市景观上,随机初始化的SETR-PUP只给出42.27%的mIoU。模型pre-trained
DeiT[44]在ImageNet-1K上达到了最好的性能,略好于在ImageNet-21K上使用ViT[17]预训练的对手。(5)为了研究预训练的作用,进一步验证我们提出的方法的有效性,我们对表3中的预训练策略进行了消融研究。为了与FCN基线进行公平比较,我们首先对ResNet-101进行预训练。然后采用预训练的权值进行扩张FCN训练,用于ADE20K或Cityscapes上的语义分割任务。表3显示,经过ImageNet-21k预训练后,FCN基线较ImageNet-1k预训练的变体有明显改善。然而,我们的方法大大优于FCN的同类方法,这证明了我们的方法的优势主要来自所提出的序列到序列建模策略,而不是更大的训练前数据。
4.3.与SOTA的对比
在ADE20K上的结果:表4展示了我们在更具挑战性的ADE20K数据集上的结果。我们的SETR-MLA在单尺度(SS)下实现了48.64%的优越mIoU推理。当采用多尺度推理时,我们的方法达到了一个新的水平50.28%。图2显示了我们的模型和扩张的FCN在ADE20K上的定性结果。当在训练集和验证集上训练一个单尺度模型16万轮次,我们的方法在ADE20K测试服务器排行榜激烈的竞争中排名第一。
Pascal Context的结果:表5比较了Pascal Context上的分割结果。扩张FCNResNet-101骨干的mIoU为45.74%。使用相同的训练时间,我们提出的SETR显著优于这个基线,实现mIoU54.40% (SETR-PUP)和54.87% (SETR-MLA)。当采用多尺度(multi-scale, MS)推理时,SETRMLA进一步将性能提高到55.83%,明显优于最接近的竞争对手APCNet。图3给出了一些关于SETR和膨胀FCN的定性结果。图6中学习到的注意力图的进一步可视化显示,SETR可以关注有语义意义的前景区域,这表明它学习区分特征表示的能力对分割有用。
Cityscapes结果:表6和表7分别是城市景观验证集和测试集的对比结果。我们可以看到,我们的模型SETR-PUP优于FCN基线,以及基于FCN +注意力的方法,如Non-local[48]和CCNet [25];它的表现与迄今为止报道的最好的结果相当。在这个数据集上,我们现在可以与密切相关的数据集进行比较,Axis - deeplab[12,47]的目标是使用单独注意模型,但仍然遵循FCN的基本结构。注意,Axis - deeplab设置了与我们相同的输出步幅16。然而,它的完整输入分辨率(1024 × 2048)比我们的产出大小768 × 768大得多,而且它运行的次数(60k迭代,批处理大小为32)比我们的设置多(80k迭代,批大小为8)。然而,当城市景观验证集采用多尺度推理时,我们的模型仍然优于Axis - deeplab。仅使用精细集,我们的模型(经过100k次迭代训练)在测试集上有明确的边界,优于Axis-deeplab-XL。图4显示了我们的模型和扩展的FCN对城市景观的定性结果。
结论
在这项工作中,我们通过引入一个序列-序列预测框架,提出了一个语义分割的替代视角。与现有的基于FCN的方法,通常是在组件级别使用扩张卷积和注意模块来扩大感受野,我们在架构级别进行了一步式的改变,以完全消除对FCN的依赖,优雅地解决有限的感受野挑战。我们使用Transformer实现了该想法,可以在特征学习的每个阶段建模全局上下文。随着一套不同复杂度的解码器设计,建立了强大的分割模型,而不采用现有方法部署的花哨功能。大量的实验表明,我们的模型在ADE20、PascalContext上取得SOTA效果,在Cityscapes上也取得了有竞争力的表现。令人鼓舞的是,我们的方法在提交当天在竞争激烈的ADE20K测试服务器排行榜上排名第一。
致谢
上海市科技重大专项(No.2018SHZDZX01)资助
上海脑科学与脑创意技术研究中心
附录:
A可视化
Position embedding:图7所示的学习位置嵌入可视化显示,该模型在位置嵌入的相似性中学习编码图像内的距离。
Features:图9显示了我们的SETR-PUP特整可视化。对于编码器,24个输出特性来自24个Transformer层,即Z1−Z24。同时,5个特征性(U1−U5)在解码器头的每一个双线性插值之后。
Attention maps:每个Transformer层中的注意图(图10)引起了我们的兴趣。T-large有16个头部和24层。与[1]类似,对该问题应用了递归透视图。图8显示了不同选择空间点的注意图(红色)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。