这次要读的文章是 CADTransformer: Panoptic Symbol Spotting Transformer for CAD Drawings
这篇论文介绍了一个名为CADTransformer的新框架,用于自动化CAD图纸中的全景符号识别任务。该任务需要识别和解析可数对象实例(如窗户、门、桌子等)和不可数的物品(如墙壁、栏杆等),并在CAD图纸中进行标记。该任务的主要难点在于图纸中符号的高度不规则的排序和方向。现有方法基于卷积神经网络(CNNs)和/或图神经网络(GNNs)来回归实例边界框并将预测结果转换为符号。相比之下,CADTransformer直接从CAD图形原始集合中进行标记,通过一对预测头同时优化线条级别的语义和实例符号识别。此外,该框架还通过几个可插拔的修改增强了主干网络,包括邻域感知自注意力、分层特征聚合和图形实体位置编码等。此外,该论文还提出了一种新的数据增强方法,称为随机层(Random Layer),通过CAD图纸的分层分离和重组来进行数据增强。最终,CADTransformer在最新发布的FloorPlanCAD数据集上,将先前的最先进水平从0.595提高到0.685,展示了该模型可以识别具有不规则形状和任意方向的符号。
1 Introduction
1.1 关于 CNN 网络的准确性问题
在 CAD 文件中对图元要素分类的任务在本文中被称为 Symbol Spotting。这类任务在建筑行业和其他工业领域都要广泛的应用前景。Symbol Spotting 任务分类的目标是具有几何特征或更多异质特征的图元要素,不同的是,传统的基于计算机视觉,尤其是基于 CNN 网络的图像分割任务,其分割的目标元素是同质化的像素。由于存在遮挡、非均匀聚集、制图风格差异等原因,Symbol Spotting 任务具有较大的难度。
传统的 Symbol Spotting 采用的是一种名为 Query-by-example,望文生义地来看,这些方法需要提前指定特定的符号构成,然后以匹配的方式寻找图面中与之类似的元素。这种方法显然无法适应现实中复杂多变的画图方式。近年来也涌现了一些基于机器学习的方法,他们提出使用 CNN 方法来解决 Symbol Spotting 问题。但是将 CAD 矢量数据本身转化成位图天然就引入了精度损失,这使得这些方法存在先天性不足。
以建筑行业为例,建筑 CAD 图纸具有“高对比度”(或者说“高灵敏度:)的特点,在一个 100 米乘 100 米的平面空间内,在围观层面上要求达到 1 毫米的精度。为了保持这个精度,我们必须将其转化成 10 万像素乘 10 万像素的位图,这个尺寸的图像处理起来代价过于高昂。而如果减少像素数量,则无法保持 1 毫米的精度。
这篇论文的团队在之前的发表的论文中提出了 FloorPlanCAD 数据集。基于这个数据集可以训练能够进行 Panoptic Segmentation Task 的模型。这类任务是综合了实例分割和语义分割的复合任务。在 CAD Symbol Spotting 场景,这意味着需要同时得到图元级别的类型归属和具有语音含义的每个建筑构件的识别。
本文的作者通过引入图卷积神经网络 (GCN) 来解决 Symbol Spotting 问题。GCN 网络可以给出每个图元的语义信息,同时还有一个 CNN 网络来给出“可数”构件的实例分割结果。
1.2 Transformer 的作用
基于 Transformer,可以在不预先定义图连接结构的情况下,基于注意力机制推断到 tokens 之间的全局关系 (Transformers reason global relationships across tokens without pre-defined graph connectivity, by instead learning with self-attention)。这使得 Transformer 可以在 panoptic symbol spotting 任务中替代 GCN 的作用。但是标准的 Transformer 在这类任务上的使用仍然存在一些挑战:
- Tokenization and position encoding of graph symbols:前者是编码的问题,后者则是典型的 ViT 引入的问题。典型的 ViT,即 Visual Transformer 会将每个图像划分成 或者 个 Patch,即 token,同时基于这个二维网格分布可以将这些 token 的顺序线性化,并组合在一起。不过在 CAD 数据中,图元数据的排列是无序的,且坐标数值属于连续的实数空间,并非离散化,这和栅格化的图像有根本性的不同。
- Inmense set of primitives in certain scenes. ViT 的全局注意力机制的复杂度相比于 token 的数量是四次方的,如果是处理 CAD 数据,由于图元的数量非常庞大,这个数量级的复杂度是无法处理的。
- Training data limitations. ViT 架构能够提供更多灵活性的同时,其对数据的需求量也更大了。
作者提出的 CADTransformer 旨在成为一个通用的框架,可以被轻易地和现有的 ViT 骨干网络整合起来。
CADTransformer 是作为一个完整的 ViT 处理 Pipe 的一部分被插入到图像处理流程中。
2 Methodology
2.1 Overview
一般意义上的 Panoptic symbol spotting 任务可以表述为 ,其中 表示一个基础图元。 和 分别是此图元的语义标签与实例索引。对于输入的 CAD 矢量图纸,我们首先将其拆解成基础图元要素(弧线、多段线等),并将图纸转换成栅格化后的位图。图元的嵌入的获取方式是将每个图元投影到一个预训练的 CNN 网络输出的二维特征图上。基于这个这样获取的嵌入,使用一个标注你的 Vision Transformer 以及作者提出的可插拔的附加网络,模型可学习到不同的 Token 之间的关系。Transformer 层后面跟着的是 Two-Branch heads 结构,我们可以通过这个结构来优化图元级预测的精度。本文提出的模型的整体结构如下图所示
具体而言,图元 Embeding 获取的方式是将图纸的栅格化图像输入 HRNetV2-W48 这个预训练网络。此网络是一个多级多分辨率的网络,我们取不同分辨率的分支,拼成一个 的张量。对于每个几何图元,我们将其中心点投影到这个张量的第二、三个维度张成的平面上,去第一个维度的特征值构成特征向量。这样最终得到所有 token 的 Embedding 就是 ,其中 是图元的数量, 是 Embedding 的维度。
2.2 Two-Branch heads
如前文所述,Two-Branch heads 提出的目的是优化预测精度。TBH 层以 Transformer 骨干网络输出的几何 Embedding 为输入。
2.2.1 语义分割
对于聚合后的 Transformer 特征输出 ,施加一个 MLP 层,可以生成一个语义分数 。损失函数使用交叉熵 。
2.2.2 实例分割
CAD 图纸场景中的实例分割结果无法简单地用 BoundingBox 来表示。作者提出了一个新的方法,不是在像素图像中预测 2D BoundingBox,而是针对每个图形实体预测一个偏移向量,以便将实例实体聚集在一个公共的实例中心周围。为了更好地将实例相关的图元聚类在一起,作者使用一系列的 MLP 来编码图元的 Embedding,进而产生 个偏移向量 。针对这个偏移量的训练使用 损失函数。
其中 是一个指示变量组成的向量,只有可数构件的图元参与这个计算。在经过这个 Offset 量处理之后,可以用聚类算法对偏移后的图元中心点进行聚类。
2.3 Improve Transformer Backbone Design for Better Spotting
ViT 骨干网络以上述编码层的输出,即 Tokenization Module 的输出作为输入,执行自注意力机制,并生成送往 Two-Branch Head 网络的特征表示。
2.3.1 Self-Attension with Neighbor Awareness
典型的 ViT 的架构由多个 Transformer 层组成,每层包含一个 self-attention 模块和一个前馈网络(Feed-Forward Network) 。自注意力机制的计算方式为:
其中 分别是 query, key 和 value 矩阵, 和 表示样本数量和隐藏层维度。
然而,图纸中图元的数量非常多,因此全局注意力复杂度太高。为了解决这个问题,作者提出以下改进方法。
2.3.2 Self-attention with k Neighbors
让注意力机制的计算只在图元最邻近的 k 个邻居之间进行计算,这样可以限制复杂度随着图纸规模增长的速度。这里的临近关系通过计算起始点和终止点的距离来实现。
其中 和 表示图元 的起始点和终止点, 是目标图元, 表示其他图元。增加注意力机制计算中考虑的临近的图元数量可以增加感知的范围。作者提出的 Transformer 主干网络划分成了若干个阶段,每经过一个阶段会提提高 的值。
2.3.3 Multi-resolution Feature Fusion
我们将不同阶段得到的特征输出整合起来,令
2.3.4 Graphic Entity Position Encoding
由于图元数据天然来自于二维欧式空间,因此可以的比较容易的定义位置编码:
2.4 Random Layer Augmentation
本章节介绍的是一种数据增强策略。这个策略很简单,就是利用 CAD 图纸的图层结构信息,将图层划分为是哪个类别,分别是 Thing layer, Stuff layer 和 Background Layer。我们让这些层内随机挑选出的若干层组成新的图纸。