如果我们把“语义与区域解析”拆成大白话就是两个问题语义解析这张图里每个像素到底属于哪一类天空、道路、车、行人区域解析同属“车”的那些像素到底是一辆还是两辆它们的轮廓在哪里在当代计算机视觉里这两个问题已经被统一成一个核心任务全景分割Panoptic Segmentation。它同时要求你给每个像素打上类别标签并且把“可数的东西”things如人、车分成不同的实例把“不可数的背景”stuff如天空、草地作为语义区域给出。这个定义几乎完美对应“语义 区域”的直觉也是目前学界前沿最集中的擂台。所以接下来的所有内容都会围绕这个任务的当代统一框架展开。你不用再在语义分割、实例分割、全景分割之间来回选模型——现在的趋势是一个模型全部搞定。而我们要把它掰开揉碎。Mask2Former是目前全景分割最经典的统一架构几乎所有后续工作OneFormer、Mask DINO都沿用了它的核心思路。读透它你就掌握了一套可复用的“理论零件箱”。模型整体长什么样先记住一个极简公式图像 → 多尺度特征图 → 一组可学习的“查询向量”反复观察特征 → 每个查询输出一个类别标签 一个二值mask。把大象装进冰箱只需要三步Mask2Former 也只需要三个大模块模块一骨干网络 像素解码器——从像素到知识的压缩与展开第一阶段骨干网络的“压缩”——把世界抽象成多层次的语义想象你拿到一张照片你的眼睛并不是同时看清所有细节的。你先是瞬间把握整体这是一条街道有天空、建筑和几辆车。然后当你想辨认某辆车的品牌时你的注意力会聚焦到车标、车灯这些细节上。骨干网络做的就是类似的事它是一个层层抽象的加工流水线每一层都在上一层的特征图上继续“往深了想”。网络的最底层看到的是原始像素只能识别出细微的颜色变化和简单的边缘。随着层级加深感受野每个神经元能看到的原图范围越来越大能识别的模式也越来越复杂底层特征边缘、角点、纹理。中层特征车轮、窗户、人脸五官这类由边缘组合成的“零件”。高层特征完整的物体比如“一辆车”“一个人”此时细节边界已经模糊但语义概念极其明确。这个流水线通常会输出四个不同分辨率的特征图比如原图尺寸的1/4、1/8、1/16、1/32。我们重点看两个极端就能理解整个谱系1/32 特征图经过最多次下采样一张 1024×1024 的原图到这里只剩 32×32 个格点。每个格点的感受野覆盖了原图上 32×32 的一大片区域它已经丢失了精确的形状和边缘但内部蕴含着一个高度浓缩的语义判断“我这一片区域极大概率包含了一辆汽车”。这是全局语义的巅峰是“是什么”的答案。1/4 特征图只经过少量下采样尺寸为 256×256。每个格点的感受野只有 4×4 像素因此它对物体的边缘、轮廓、线条走向保有极其清晰的记忆。车灯的弧线、行人的手指在这里依然棱角分明。这是局部细节的宝库是“边缘在哪”的答案。问题是这两个“天才”是分家的。1/32 特征图在语义上很聪明但它是高度近视画不出边界1/4 特征图视力绝佳却缺乏宏观理解很容易把一块天空碎片和一块水面碎片当成完全无关的东西。如果直接把这堆特征甩给后续模块模型就会陷入“看得懂轮廓的不知道这是什么知道这是什么的画不出轮廓”的困境。ResNet 系列这是计算机视觉领域的常青树也是 Mask2Former 论文中大量实验所用的基线。它的核心创新是“残差连接”简单说就是让信息可以抄近道跳过某些层解决了深层网络训练困难的问题。ResNet-50 和 ResNet-101 最为常用前者轻量快速后者精度更高。即使到了 Transformer 时代ResNet 依然凭借其极其稳定的训练特性和广泛的开源预训练权重占据着不可动摇的地位。ViT (Vision Transformer)纯粹的视觉 Transformer没有卷积。它把图像切成固定大小的“图块”Patch把这些图块的序列直接喂给自然语言处理中标准的 Transformer 编码器。ViT 的优势在于结构极度简洁、全局感受野从第一层就开始但缺点是极其依赖海量数据预训练在中等规模数据集上容易不如卷积网络。通常需要用 JFT-300M 或 ImageNet-21K 这样的大规模数据集预训练后才能发挥威力。第二阶段像素解码器的“展开”——让语义与细节对话所以像素解码器上场。它的唯一使命就是举办一场高层语义与底层细节的圆桌会议让每一张特征图都同时兼具“知道是什么”的智慧和“看清边缘”的敏锐。最经典的主持人就是 FPN特征金字塔网络。FPN 的工作流程是一场自上而下的“语义浇灌”起点从语义最浓缩的 1/32 特征图开始。它已经没什么细节了但它对自己覆盖的每个区域“是什么”最有把握。先用一个 1×1 卷积调整它的通道数将它作为一个“强语义信号源”。自上而下的融合路径将这个强语义信号进行 2 倍上采样比如从 32×32 变成 64×64使其空间尺寸与下一级的 1/16 特征图对齐。此时上采样后的特征带来了从最高层继承的全局理解而 1/16 特征图本身保留着更多轮廓信息。把这两个特征图直接逐元素相加——这是一个关键操作它意味着“高层说这里很可能有一辆车”和“底层说这里有两条锐利的水平边缘和一条圆弧”这两种信息被叠加在了一起。于是1/16 这个层次的特征图突然开了窍它不仅看到了边缘还知道这些边缘组合起来大概是一辆车。逐级传递这个融合后的 1/16 特征图继续被上采样去和 1/8 特征图相加以此类推一直传递到分辨率最高的 1/4 特征图。每一步高层的强语义都像灌溉一样浸润下来与底层的锐利细节水乳交融。消除混叠每次融合后通常会再接一个 3×3 卷积。它的作用是平滑由于上采样和相加可能引入的空间混叠伪影让融合后的特征更加自然连贯。经过这一轮处理我们最终拿到的是一组新的多尺度特征图分辨率仍然是 1/32、1/16、1/8、1/4但内涵已经脱胎换骨。那个分辨率最低的 1/32 图依然掌管最高级的全局语义而那个分辨率最高的 1/4 图现在不再是只有细节的“近视眼”它已经吸收了全图的语义上下文既能看清车灯的锋利边缘也明白这个车灯是“汽车”这个整体的一部分。PANet (Path Aggregation Network)如果说 FPN 是把高层语义“自上而下”浇灌下来PANet 就是再额外加了一条“自下而上”的通路。它发现底层的细节信息传到顶层要经过很长的路径于是新增了一条从低分辨率到高分辨率的横向连接让顶层也能直接拿到精细的边缘信息。这条双通道设计使得特征融合更加彻底在实例分割任务中尤其有效。BiFPN (Bidirectional Feature Pyramid Network)EfficientDet 提出的高效双向量化金字塔。它不像 FPN 那样每一层都只有一条输入边而是允许跨层级的双向连接并且给每条连接都分配一个可学习的权重让网络自己去决定哪一层的信息更重要。同时BiFPN 会反复使用同一个模块多次叠加在极低的计算开销下达到极佳的融合效果。Semantic FPN一个非常轻量的变体它的思路非常简单粗暴——把 1/32、1/16、1/8、1/4 的特征图全部直接上采样到同一尺寸比如 1/4然后简单合并。它放弃了 FPN 那种逐级渐进融合的结构换来的是极简的实现和极快的速度在一些对实时性要求高的语义分割场景中仍有生命力。模块二Transformer 解码器——用可学习的“查询”把画面里的东西一个个认出来这里是 Mask2Former 的灵魂也是它区别于传统分割模型的根本所在。解码器的任务不是拿把刷子在特征图上涂色而是用一种更聪明的方式用 N 个可学习的“物体查询”像指派调查员一样让它们自己去特征图里反复观察、交流、锁定最终每一个查询认领并精细描绘出画面中的一块区域一辆车、一片天空、一个人、一条路。查询是什么——从空白问卷到专职调查员一开始这 N 个查询就是一堆随机初始化的向量N 通常取 100 或 200。在模型看到任何图像之前它们完全一样都是白纸一张。你可以把它们想象成N 个拿着空白问卷的调查员被同时放进一个陌生的场景中。他们不知道现场有多少物体也不知道各自该记录什么问卷上还是空的。然而神奇之处在于通过训练这些查询会自动分化学出不同的“专长模式”。有的查询渐渐对大面积、语义一致的“背景”区域特别敏感比如天空、草地有的则专门盯梢中、小尺度的“前景物体”比如行人、车辆。这种分化不是靠人工规则预先指定而是梯度下降在成千上万张图像中自然演化出的最优分工。就像调查员们在无数次任务后形成了默契“我擅长观察天空你负责左边那些快速移动的小目标他来处理右边那辆显眼的轿车。”N 的数量100 或 200则是一个经验性权衡太少一幅图像中的物体数可能超过查询数就会漏检太多计算量增大且会产生很多永远预测为“无物体”的闲置查询。在实践中100 个查询已经足够应付绝大多数街景或室内场景。解码器如何让查询“看懂”图像——多轮会议层层聚焦解码器并不是只让查询看一次图就下结论而是通过多个结构完全相同的 Transformer 解码层通常堆叠 6 到 9 层进行反复打磨。每一层都是一轮“观察—沟通—思考”的完整过程查询们在这一轮轮迭代中从模糊走向清晰。每一层内部固定执行三个标准步骤步骤一自注意力——调查员的碰头会在每一个解码层开始时查询们首先要开一个内部会议。这就是自注意力机制做的事让每个查询都能看到其他所有查询的当前状态。这一步至关重要它解决两个核心问题。一是避免碰撞假如有两个查询都觉得自己应该负责同一辆红色轿车自注意力让它们互相“看到”对方的意图从而协商出排他性的分工——“左边这辆我已经盯上了你最好去检查一下旁边那块阴影区域是不是另一辆车。” 这种协商不是硬性的非极大值抑制而是一种软性、可学习的双向博弈。二是上下文协调一个查询在判断自己的区域类别时可以借用其他查询的发现。比如一个查询看到很多相邻的查询都在关注“道路”区域那么它就更确信自己关注的那块灰色地带也属于“道路”而非“人行道”。最终通过自注意力查询之间形成了全局性的共识与分工避免了两个调查员交出一模一样的答卷。步骤二交叉注意力核心视觉交互——带着问卷去记忆库检索开完碰头会每个调查员都带着自己更新过的“任务意图”即查询向量走向模块一搭建好的多尺度特征图记忆库去查找与自己当前任务最相关的视觉信息。这就是交叉注意力。在标准的交叉注意力中查询向量作为“查询”Query而记忆库中每一个空间位置的特征向量都作为“键”Key和“值”Value。查询通过与所有位置的点积计算相似度得到一个全局的注意力图然后加权聚合特征值更新自己的状态。这意味着每个调查员会扫视整张图像任何位置的角落都可能被它纳入考虑。但这里有一个关键问题让一个正在寻找红色轿车的查询去精读天空或远处的树梢是一种巨大的计算浪费而且会引入大量噪声让调查员分心收敛缓慢。Mask2Former 的杀手锏掩码注意力这就是 Mask2Former 独创的掩码注意力登场的地方。它的思想既直觉又高效每个查询只应该在自己的“辖区”内观察没必要全世界乱看。具体做法是每个查询都携带着一个从前一层预测中继承下来的二值掩码在第一层中掩码可以初始化为全图可见或基于查询向量做粗糙估计。这个掩码标示了它当前认为自己该负责的粗略区域。在进行交叉注意力时模型强制把注意力计算限制在这个掩码所指示的范围之内——掩码外的所有特征点注意力权重直接被置为零或极小的负无穷。这带来了两个巨大的好处计算量骤降标准的交叉注意力复杂度是 O(查询数 × 特征图总点数)。掩码注意力让每个查询只与掩码区域内的几千个点交互而非几十万个点使得训练和推理速度成倍提升。学习效率飙升调查员的目光被一个“聚光灯”锁死在自己认领的物体周围再也不会被背景杂波干扰。它看到的每一点视觉信息都高度相关因此能极快地调整自己对物体轮廓和类别的判断收敛速度远快于无掩码的版本。随着层数加深这个掩码会从模糊、扩张变得极其精准形成一个“粗到细”的自我进化过程。步骤三前馈网络——独立思考深化认知完成交叉注意力每个调查员已经从记忆库中获取了新的视觉证据更新了自己的“见闻”。但此时它体内的信息还需要被进一步消化、提炼。于是每个查询单独进入一个共享参数的前馈网络通常是两层线性变换加激活函数。这一步不涉及查询间互动也不涉及视觉特征纯粹是让每个查询对自身编码的内容进行非线性映射增强其表达能力。你可以理解为调查员在观察结束后回到自己的写字台前把刚才潦草的笔记整理成清晰、结构化的记录把碎片信息抽象为更高层的类别和形状概念。层层递进从“一片混沌”到“轮廓分明”这样一层结束查询向量就完成了一次完整的更新。它的掩码会在输出给下一层之前经过一次简单的处理如阈值化成为下一层更精确的注意力约束。经过 6 到 9 层这样的迭代查询们经历了一场令人惊叹的进化第 1 层查询的注意力是发散的掩码是一大块模糊的圆斑只粗略地圈定一个大致位置。第 3 层掩码开始收缩逐渐包裹住物体的大致轮廓类别倾向开始显现。第 6 层掩码已经紧紧贴合在物体的实际边缘上像被剪刀精细裁剪过一样。查询向量内部已经同时编码了两类信息这个区域“是什么”类别语义和“边界在哪里”形状几何。到最后一层输出时每个查询向量不再是一个空白的调查员而是一份填好的完整档案上面写着“我负责的物体是‘汽车’置信度 0.98其精确轮廓已记录在掩码分支中。” 接下来这份档案将被送往模块三——输出头翻译成最终的类别标签和像素级掩码。模块三输出头——把查询里的知识翻译成类别和精确掩码经过解码器 6 到 9 层的反复观察、交流与聚焦那 N 个查询向量已经不再是初生时的一无所知。每个查询内部都像一份被填满的档案浓缩编码了两类关键信息这个区域最可能是什么类别以及它的精确轮廓在哪里。但此刻这些知识还储存在一个高维向量的“暗码”里外界读不懂。输出头的任务就是做一位忠实的翻译官把每个查询向量解码成两个人类可理解的结果一个类别标签和一张精细的二值掩码。这两个翻译工作同时进行分别通过一个分类分支和一个掩码分支来完成。分类分支给这个区域贴上类别标签分类分支是输出头中最简单也最直接的部分。它要回答的问题只有一个“这个查询负责的区域到底是什么”它由一个极度精简的线性层全连接层担纲。这个线性层相当于一本类别字典它的输入是那个蕴含了全部区域知识的高维查询向量输出则是一个分数向量长度等于全部类别数再加上一个额外的“1”。这个“1” 至关重要——它代表“无物体”类别。为什么需要它因为 N 通常取 100 或 200对于大多数图像来说是“供过于求”的。一张典型街景照可能只有七八辆车、几个行人剩下的天空、道路、建筑作为 stuff 区域也只需要几个查询就能覆盖。那么多余的查询该干什么它们就学会输出“无物体”这个最高分在推理时被直接丢弃不留痕迹。这个巧妙的设计让模型可以用统一的数量上限灵活应对任意物体数量的场景完全不需要预先知道一张图里有多少东西。这个线性层输出的分数向量随后经过一次Softmax归一化被压成所有类别含“无物体”上的概率分布。至此我们得到了一个确定的类别判决比如对于第 k 个查询它输出的结果是“汽车置信度 0.95”“行人置信度 0.03”“背景 0.02”等等分数最高的那个类别就是它最终贴上的标签。这个分支的简洁是有意为之的——类别的判断高度依赖查询向量本身经过解码器多轮融合后形成的强语义特征不需要再看像素细节。一个查询在和特征图反复交互之后其向量内部已经足够确定“我是车”这个事实无需再回到记忆库里逐像素推敲。所以一层简单的线性映射足矣。掩码分支为这个区域描出精确轮廓如果分类分支是贴标签掩码分支就是描边界。它要回答一个更难的问题“这个查询负责的区域到底覆盖了哪些像素”这个过程分两步走设计得极其精妙第一步查询向量的“二次编译”——生成掩码嵌入掩码分支的开端是一个多层感知机MLP通常由两到三层线性变换加激活函数构成。它接收解码器输出的查询向量对它做一次专门的“二次编译”输出一个新的向量称为掩码嵌入。为什么不能直接用原查询向量而要再过一个 MLP因为原查询向量是个“全才”它内部夹杂了类别、形状、位置、与其他查询的关系等五花八门的信息。掩码分支不需要知道与其他查询的博弈也不关心类别分布它只专注于一件事在最高分辨率特征图上找到自己该有的轮廓。这个 MLP 就像一个滤镜从查询向量中提取、重组出专门服务于“画轮廓”的那部分知识形成一句明确的命令。这句命令——也就是掩码嵌入——最清楚该去高分辨率特征图的哪些位置寻找正响应。第二步用掩码嵌入扫描高分辨率特征图——点积生成掩码接下来掩码嵌入要开始真正“画图”了。它被带到了像素解码器里分辨率最高1/4 原图的特征图面前。这张 1/4 特征图我们在模块一已经重点介绍过它经过 FPN 自上而下的语义浇灌既保留了大量精细的物体边缘和纹理细节车轮弧线、行人手指又吸收了来自高层的全局语义理解知道这些边缘属于“一辆车”而非随机纹理。掩码分支的全部掩码预测只基于这一张图而不用多尺度特征图。这是因为——类别的判断已经由分类分支完成掩码分支的唯一使命是画出最精确的边界而这恰恰是高分辨率特征图的专长。用更低分辨率的特征图反而会损失边缘精度。具体操作上掩码嵌入与这张 1/4 特征图上每一个空间位置的特征向量做点积内积。每一个位置的点积结果就是一个标量代表了该位置对该查询所描述区域的“响应程度”或“归属分数”。遍历所有空间位置我们就得到了一张与原图 1/4 尺寸等大的分数图。这个过程可以用一个形象的比喻来理解掩码嵌入像一句提问——“谁的身上有红色、金属质感、流线型弧线”高分辨率特征图上的每一个位置向量则像一个回答——“我这里有红色金属流线”“我这里只有灰色沥青”“我这里是绿色树叶点”。点积就是计算提问与回答之间的匹配度。只有真正属于那个物体的像素点其特征向量才会与掩码嵌入产生强烈共鸣得分高无关区域的响应则趋近于零。这一步计算之所以高效且精准是因为它没有引入任何新的可学习参数掩码嵌入本身由 MLP 生成但点积操作是纯粹的矩阵乘法计算量极低却天然对齐于特征空间中的相似性度量。这张分数图随后被直接双线性上采样到原图大小就得到了该查询对应的最终掩码 logits——一个与原图等大的、每个像素一个实数值的分数图。再经过一次Sigmoid激活每个像素值被压到 0 到 1 之间表示该像素“属于这个查询所描述的区域的概率”。至此每一个查询都同时产出了一份完整的答卷分类分支给出了一个类别标签含置信度掩码分支给出了一张原图大小的二值掩码概率图。将这两个结果合并一幅全景分割图的雏形就已经诞生对于“汽车”查询它的掩码高亮处就是一辆汽车的精确轮廓对于“天空”查询它的掩码则覆盖了上方广袤的背景区域。把所有查询的结果按照后处理逻辑堆叠、逐像素竞争最终统一的全景分割结果便水到渠成。最后一步从查询到全景图推理时把所有 N 个查询的结果叠在一起对于每个查询我们都有一个类别概率向量和一个原图大小的掩码概率图。把掩码概率图乘上它属于某一类的概率乘积相当于联合概率。然后对每个像素找出所有查询中联合概率最大的那个该像素就被赋上对应的类别和实例 ID。“不可数的 stuff”区域天空、草地和“可数的 things”实例一辆车、一个人就这样被同一个过程统一输出完全不用任何手工合并或 NMS 后处理。
对计算机视觉的具体认知(语义与区域解析)
如果我们把“语义与区域解析”拆成大白话就是两个问题语义解析这张图里每个像素到底属于哪一类天空、道路、车、行人区域解析同属“车”的那些像素到底是一辆还是两辆它们的轮廓在哪里在当代计算机视觉里这两个问题已经被统一成一个核心任务全景分割Panoptic Segmentation。它同时要求你给每个像素打上类别标签并且把“可数的东西”things如人、车分成不同的实例把“不可数的背景”stuff如天空、草地作为语义区域给出。这个定义几乎完美对应“语义 区域”的直觉也是目前学界前沿最集中的擂台。所以接下来的所有内容都会围绕这个任务的当代统一框架展开。你不用再在语义分割、实例分割、全景分割之间来回选模型——现在的趋势是一个模型全部搞定。而我们要把它掰开揉碎。Mask2Former是目前全景分割最经典的统一架构几乎所有后续工作OneFormer、Mask DINO都沿用了它的核心思路。读透它你就掌握了一套可复用的“理论零件箱”。模型整体长什么样先记住一个极简公式图像 → 多尺度特征图 → 一组可学习的“查询向量”反复观察特征 → 每个查询输出一个类别标签 一个二值mask。把大象装进冰箱只需要三步Mask2Former 也只需要三个大模块模块一骨干网络 像素解码器——从像素到知识的压缩与展开第一阶段骨干网络的“压缩”——把世界抽象成多层次的语义想象你拿到一张照片你的眼睛并不是同时看清所有细节的。你先是瞬间把握整体这是一条街道有天空、建筑和几辆车。然后当你想辨认某辆车的品牌时你的注意力会聚焦到车标、车灯这些细节上。骨干网络做的就是类似的事它是一个层层抽象的加工流水线每一层都在上一层的特征图上继续“往深了想”。网络的最底层看到的是原始像素只能识别出细微的颜色变化和简单的边缘。随着层级加深感受野每个神经元能看到的原图范围越来越大能识别的模式也越来越复杂底层特征边缘、角点、纹理。中层特征车轮、窗户、人脸五官这类由边缘组合成的“零件”。高层特征完整的物体比如“一辆车”“一个人”此时细节边界已经模糊但语义概念极其明确。这个流水线通常会输出四个不同分辨率的特征图比如原图尺寸的1/4、1/8、1/16、1/32。我们重点看两个极端就能理解整个谱系1/32 特征图经过最多次下采样一张 1024×1024 的原图到这里只剩 32×32 个格点。每个格点的感受野覆盖了原图上 32×32 的一大片区域它已经丢失了精确的形状和边缘但内部蕴含着一个高度浓缩的语义判断“我这一片区域极大概率包含了一辆汽车”。这是全局语义的巅峰是“是什么”的答案。1/4 特征图只经过少量下采样尺寸为 256×256。每个格点的感受野只有 4×4 像素因此它对物体的边缘、轮廓、线条走向保有极其清晰的记忆。车灯的弧线、行人的手指在这里依然棱角分明。这是局部细节的宝库是“边缘在哪”的答案。问题是这两个“天才”是分家的。1/32 特征图在语义上很聪明但它是高度近视画不出边界1/4 特征图视力绝佳却缺乏宏观理解很容易把一块天空碎片和一块水面碎片当成完全无关的东西。如果直接把这堆特征甩给后续模块模型就会陷入“看得懂轮廓的不知道这是什么知道这是什么的画不出轮廓”的困境。ResNet 系列这是计算机视觉领域的常青树也是 Mask2Former 论文中大量实验所用的基线。它的核心创新是“残差连接”简单说就是让信息可以抄近道跳过某些层解决了深层网络训练困难的问题。ResNet-50 和 ResNet-101 最为常用前者轻量快速后者精度更高。即使到了 Transformer 时代ResNet 依然凭借其极其稳定的训练特性和广泛的开源预训练权重占据着不可动摇的地位。ViT (Vision Transformer)纯粹的视觉 Transformer没有卷积。它把图像切成固定大小的“图块”Patch把这些图块的序列直接喂给自然语言处理中标准的 Transformer 编码器。ViT 的优势在于结构极度简洁、全局感受野从第一层就开始但缺点是极其依赖海量数据预训练在中等规模数据集上容易不如卷积网络。通常需要用 JFT-300M 或 ImageNet-21K 这样的大规模数据集预训练后才能发挥威力。第二阶段像素解码器的“展开”——让语义与细节对话所以像素解码器上场。它的唯一使命就是举办一场高层语义与底层细节的圆桌会议让每一张特征图都同时兼具“知道是什么”的智慧和“看清边缘”的敏锐。最经典的主持人就是 FPN特征金字塔网络。FPN 的工作流程是一场自上而下的“语义浇灌”起点从语义最浓缩的 1/32 特征图开始。它已经没什么细节了但它对自己覆盖的每个区域“是什么”最有把握。先用一个 1×1 卷积调整它的通道数将它作为一个“强语义信号源”。自上而下的融合路径将这个强语义信号进行 2 倍上采样比如从 32×32 变成 64×64使其空间尺寸与下一级的 1/16 特征图对齐。此时上采样后的特征带来了从最高层继承的全局理解而 1/16 特征图本身保留着更多轮廓信息。把这两个特征图直接逐元素相加——这是一个关键操作它意味着“高层说这里很可能有一辆车”和“底层说这里有两条锐利的水平边缘和一条圆弧”这两种信息被叠加在了一起。于是1/16 这个层次的特征图突然开了窍它不仅看到了边缘还知道这些边缘组合起来大概是一辆车。逐级传递这个融合后的 1/16 特征图继续被上采样去和 1/8 特征图相加以此类推一直传递到分辨率最高的 1/4 特征图。每一步高层的强语义都像灌溉一样浸润下来与底层的锐利细节水乳交融。消除混叠每次融合后通常会再接一个 3×3 卷积。它的作用是平滑由于上采样和相加可能引入的空间混叠伪影让融合后的特征更加自然连贯。经过这一轮处理我们最终拿到的是一组新的多尺度特征图分辨率仍然是 1/32、1/16、1/8、1/4但内涵已经脱胎换骨。那个分辨率最低的 1/32 图依然掌管最高级的全局语义而那个分辨率最高的 1/4 图现在不再是只有细节的“近视眼”它已经吸收了全图的语义上下文既能看清车灯的锋利边缘也明白这个车灯是“汽车”这个整体的一部分。PANet (Path Aggregation Network)如果说 FPN 是把高层语义“自上而下”浇灌下来PANet 就是再额外加了一条“自下而上”的通路。它发现底层的细节信息传到顶层要经过很长的路径于是新增了一条从低分辨率到高分辨率的横向连接让顶层也能直接拿到精细的边缘信息。这条双通道设计使得特征融合更加彻底在实例分割任务中尤其有效。BiFPN (Bidirectional Feature Pyramid Network)EfficientDet 提出的高效双向量化金字塔。它不像 FPN 那样每一层都只有一条输入边而是允许跨层级的双向连接并且给每条连接都分配一个可学习的权重让网络自己去决定哪一层的信息更重要。同时BiFPN 会反复使用同一个模块多次叠加在极低的计算开销下达到极佳的融合效果。Semantic FPN一个非常轻量的变体它的思路非常简单粗暴——把 1/32、1/16、1/8、1/4 的特征图全部直接上采样到同一尺寸比如 1/4然后简单合并。它放弃了 FPN 那种逐级渐进融合的结构换来的是极简的实现和极快的速度在一些对实时性要求高的语义分割场景中仍有生命力。模块二Transformer 解码器——用可学习的“查询”把画面里的东西一个个认出来这里是 Mask2Former 的灵魂也是它区别于传统分割模型的根本所在。解码器的任务不是拿把刷子在特征图上涂色而是用一种更聪明的方式用 N 个可学习的“物体查询”像指派调查员一样让它们自己去特征图里反复观察、交流、锁定最终每一个查询认领并精细描绘出画面中的一块区域一辆车、一片天空、一个人、一条路。查询是什么——从空白问卷到专职调查员一开始这 N 个查询就是一堆随机初始化的向量N 通常取 100 或 200。在模型看到任何图像之前它们完全一样都是白纸一张。你可以把它们想象成N 个拿着空白问卷的调查员被同时放进一个陌生的场景中。他们不知道现场有多少物体也不知道各自该记录什么问卷上还是空的。然而神奇之处在于通过训练这些查询会自动分化学出不同的“专长模式”。有的查询渐渐对大面积、语义一致的“背景”区域特别敏感比如天空、草地有的则专门盯梢中、小尺度的“前景物体”比如行人、车辆。这种分化不是靠人工规则预先指定而是梯度下降在成千上万张图像中自然演化出的最优分工。就像调查员们在无数次任务后形成了默契“我擅长观察天空你负责左边那些快速移动的小目标他来处理右边那辆显眼的轿车。”N 的数量100 或 200则是一个经验性权衡太少一幅图像中的物体数可能超过查询数就会漏检太多计算量增大且会产生很多永远预测为“无物体”的闲置查询。在实践中100 个查询已经足够应付绝大多数街景或室内场景。解码器如何让查询“看懂”图像——多轮会议层层聚焦解码器并不是只让查询看一次图就下结论而是通过多个结构完全相同的 Transformer 解码层通常堆叠 6 到 9 层进行反复打磨。每一层都是一轮“观察—沟通—思考”的完整过程查询们在这一轮轮迭代中从模糊走向清晰。每一层内部固定执行三个标准步骤步骤一自注意力——调查员的碰头会在每一个解码层开始时查询们首先要开一个内部会议。这就是自注意力机制做的事让每个查询都能看到其他所有查询的当前状态。这一步至关重要它解决两个核心问题。一是避免碰撞假如有两个查询都觉得自己应该负责同一辆红色轿车自注意力让它们互相“看到”对方的意图从而协商出排他性的分工——“左边这辆我已经盯上了你最好去检查一下旁边那块阴影区域是不是另一辆车。” 这种协商不是硬性的非极大值抑制而是一种软性、可学习的双向博弈。二是上下文协调一个查询在判断自己的区域类别时可以借用其他查询的发现。比如一个查询看到很多相邻的查询都在关注“道路”区域那么它就更确信自己关注的那块灰色地带也属于“道路”而非“人行道”。最终通过自注意力查询之间形成了全局性的共识与分工避免了两个调查员交出一模一样的答卷。步骤二交叉注意力核心视觉交互——带着问卷去记忆库检索开完碰头会每个调查员都带着自己更新过的“任务意图”即查询向量走向模块一搭建好的多尺度特征图记忆库去查找与自己当前任务最相关的视觉信息。这就是交叉注意力。在标准的交叉注意力中查询向量作为“查询”Query而记忆库中每一个空间位置的特征向量都作为“键”Key和“值”Value。查询通过与所有位置的点积计算相似度得到一个全局的注意力图然后加权聚合特征值更新自己的状态。这意味着每个调查员会扫视整张图像任何位置的角落都可能被它纳入考虑。但这里有一个关键问题让一个正在寻找红色轿车的查询去精读天空或远处的树梢是一种巨大的计算浪费而且会引入大量噪声让调查员分心收敛缓慢。Mask2Former 的杀手锏掩码注意力这就是 Mask2Former 独创的掩码注意力登场的地方。它的思想既直觉又高效每个查询只应该在自己的“辖区”内观察没必要全世界乱看。具体做法是每个查询都携带着一个从前一层预测中继承下来的二值掩码在第一层中掩码可以初始化为全图可见或基于查询向量做粗糙估计。这个掩码标示了它当前认为自己该负责的粗略区域。在进行交叉注意力时模型强制把注意力计算限制在这个掩码所指示的范围之内——掩码外的所有特征点注意力权重直接被置为零或极小的负无穷。这带来了两个巨大的好处计算量骤降标准的交叉注意力复杂度是 O(查询数 × 特征图总点数)。掩码注意力让每个查询只与掩码区域内的几千个点交互而非几十万个点使得训练和推理速度成倍提升。学习效率飙升调查员的目光被一个“聚光灯”锁死在自己认领的物体周围再也不会被背景杂波干扰。它看到的每一点视觉信息都高度相关因此能极快地调整自己对物体轮廓和类别的判断收敛速度远快于无掩码的版本。随着层数加深这个掩码会从模糊、扩张变得极其精准形成一个“粗到细”的自我进化过程。步骤三前馈网络——独立思考深化认知完成交叉注意力每个调查员已经从记忆库中获取了新的视觉证据更新了自己的“见闻”。但此时它体内的信息还需要被进一步消化、提炼。于是每个查询单独进入一个共享参数的前馈网络通常是两层线性变换加激活函数。这一步不涉及查询间互动也不涉及视觉特征纯粹是让每个查询对自身编码的内容进行非线性映射增强其表达能力。你可以理解为调查员在观察结束后回到自己的写字台前把刚才潦草的笔记整理成清晰、结构化的记录把碎片信息抽象为更高层的类别和形状概念。层层递进从“一片混沌”到“轮廓分明”这样一层结束查询向量就完成了一次完整的更新。它的掩码会在输出给下一层之前经过一次简单的处理如阈值化成为下一层更精确的注意力约束。经过 6 到 9 层这样的迭代查询们经历了一场令人惊叹的进化第 1 层查询的注意力是发散的掩码是一大块模糊的圆斑只粗略地圈定一个大致位置。第 3 层掩码开始收缩逐渐包裹住物体的大致轮廓类别倾向开始显现。第 6 层掩码已经紧紧贴合在物体的实际边缘上像被剪刀精细裁剪过一样。查询向量内部已经同时编码了两类信息这个区域“是什么”类别语义和“边界在哪里”形状几何。到最后一层输出时每个查询向量不再是一个空白的调查员而是一份填好的完整档案上面写着“我负责的物体是‘汽车’置信度 0.98其精确轮廓已记录在掩码分支中。” 接下来这份档案将被送往模块三——输出头翻译成最终的类别标签和像素级掩码。模块三输出头——把查询里的知识翻译成类别和精确掩码经过解码器 6 到 9 层的反复观察、交流与聚焦那 N 个查询向量已经不再是初生时的一无所知。每个查询内部都像一份被填满的档案浓缩编码了两类关键信息这个区域最可能是什么类别以及它的精确轮廓在哪里。但此刻这些知识还储存在一个高维向量的“暗码”里外界读不懂。输出头的任务就是做一位忠实的翻译官把每个查询向量解码成两个人类可理解的结果一个类别标签和一张精细的二值掩码。这两个翻译工作同时进行分别通过一个分类分支和一个掩码分支来完成。分类分支给这个区域贴上类别标签分类分支是输出头中最简单也最直接的部分。它要回答的问题只有一个“这个查询负责的区域到底是什么”它由一个极度精简的线性层全连接层担纲。这个线性层相当于一本类别字典它的输入是那个蕴含了全部区域知识的高维查询向量输出则是一个分数向量长度等于全部类别数再加上一个额外的“1”。这个“1” 至关重要——它代表“无物体”类别。为什么需要它因为 N 通常取 100 或 200对于大多数图像来说是“供过于求”的。一张典型街景照可能只有七八辆车、几个行人剩下的天空、道路、建筑作为 stuff 区域也只需要几个查询就能覆盖。那么多余的查询该干什么它们就学会输出“无物体”这个最高分在推理时被直接丢弃不留痕迹。这个巧妙的设计让模型可以用统一的数量上限灵活应对任意物体数量的场景完全不需要预先知道一张图里有多少东西。这个线性层输出的分数向量随后经过一次Softmax归一化被压成所有类别含“无物体”上的概率分布。至此我们得到了一个确定的类别判决比如对于第 k 个查询它输出的结果是“汽车置信度 0.95”“行人置信度 0.03”“背景 0.02”等等分数最高的那个类别就是它最终贴上的标签。这个分支的简洁是有意为之的——类别的判断高度依赖查询向量本身经过解码器多轮融合后形成的强语义特征不需要再看像素细节。一个查询在和特征图反复交互之后其向量内部已经足够确定“我是车”这个事实无需再回到记忆库里逐像素推敲。所以一层简单的线性映射足矣。掩码分支为这个区域描出精确轮廓如果分类分支是贴标签掩码分支就是描边界。它要回答一个更难的问题“这个查询负责的区域到底覆盖了哪些像素”这个过程分两步走设计得极其精妙第一步查询向量的“二次编译”——生成掩码嵌入掩码分支的开端是一个多层感知机MLP通常由两到三层线性变换加激活函数构成。它接收解码器输出的查询向量对它做一次专门的“二次编译”输出一个新的向量称为掩码嵌入。为什么不能直接用原查询向量而要再过一个 MLP因为原查询向量是个“全才”它内部夹杂了类别、形状、位置、与其他查询的关系等五花八门的信息。掩码分支不需要知道与其他查询的博弈也不关心类别分布它只专注于一件事在最高分辨率特征图上找到自己该有的轮廓。这个 MLP 就像一个滤镜从查询向量中提取、重组出专门服务于“画轮廓”的那部分知识形成一句明确的命令。这句命令——也就是掩码嵌入——最清楚该去高分辨率特征图的哪些位置寻找正响应。第二步用掩码嵌入扫描高分辨率特征图——点积生成掩码接下来掩码嵌入要开始真正“画图”了。它被带到了像素解码器里分辨率最高1/4 原图的特征图面前。这张 1/4 特征图我们在模块一已经重点介绍过它经过 FPN 自上而下的语义浇灌既保留了大量精细的物体边缘和纹理细节车轮弧线、行人手指又吸收了来自高层的全局语义理解知道这些边缘属于“一辆车”而非随机纹理。掩码分支的全部掩码预测只基于这一张图而不用多尺度特征图。这是因为——类别的判断已经由分类分支完成掩码分支的唯一使命是画出最精确的边界而这恰恰是高分辨率特征图的专长。用更低分辨率的特征图反而会损失边缘精度。具体操作上掩码嵌入与这张 1/4 特征图上每一个空间位置的特征向量做点积内积。每一个位置的点积结果就是一个标量代表了该位置对该查询所描述区域的“响应程度”或“归属分数”。遍历所有空间位置我们就得到了一张与原图 1/4 尺寸等大的分数图。这个过程可以用一个形象的比喻来理解掩码嵌入像一句提问——“谁的身上有红色、金属质感、流线型弧线”高分辨率特征图上的每一个位置向量则像一个回答——“我这里有红色金属流线”“我这里只有灰色沥青”“我这里是绿色树叶点”。点积就是计算提问与回答之间的匹配度。只有真正属于那个物体的像素点其特征向量才会与掩码嵌入产生强烈共鸣得分高无关区域的响应则趋近于零。这一步计算之所以高效且精准是因为它没有引入任何新的可学习参数掩码嵌入本身由 MLP 生成但点积操作是纯粹的矩阵乘法计算量极低却天然对齐于特征空间中的相似性度量。这张分数图随后被直接双线性上采样到原图大小就得到了该查询对应的最终掩码 logits——一个与原图等大的、每个像素一个实数值的分数图。再经过一次Sigmoid激活每个像素值被压到 0 到 1 之间表示该像素“属于这个查询所描述的区域的概率”。至此每一个查询都同时产出了一份完整的答卷分类分支给出了一个类别标签含置信度掩码分支给出了一张原图大小的二值掩码概率图。将这两个结果合并一幅全景分割图的雏形就已经诞生对于“汽车”查询它的掩码高亮处就是一辆汽车的精确轮廓对于“天空”查询它的掩码则覆盖了上方广袤的背景区域。把所有查询的结果按照后处理逻辑堆叠、逐像素竞争最终统一的全景分割结果便水到渠成。最后一步从查询到全景图推理时把所有 N 个查询的结果叠在一起对于每个查询我们都有一个类别概率向量和一个原图大小的掩码概率图。把掩码概率图乘上它属于某一类的概率乘积相当于联合概率。然后对每个像素找出所有查询中联合概率最大的那个该像素就被赋上对应的类别和实例 ID。“不可数的 stuff”区域天空、草地和“可数的 things”实例一辆车、一个人就这样被同一个过程统一输出完全不用任何手工合并或 NMS 后处理。