说到实例分割绕不开的就是Mask R-CNN2017 年何恺明那篇拿 ICCV Best Paper 的工作。这玩意儿本质上就是在 Faster R-CNN 的 RoI Head 旁边又搭了一个并行的分支专门用来预测二值掩膜mask。RoI Pooling 升级成了 RoIAlign解决了特征图和原图之间的像素对齐问题——别小看这个改动以前 RoI Pooling 里那些取整操作在分类和回归里无所谓但在像素级掩膜预测里几个像素的偏差就能让边缘变得跟狗啃的一样。RoIAlign 用双线性插值避免了取整就这么一个小改进让掩膜精度提升了 10% 以上。Mask R-CNN 出来之后实例分割这领域就跟检测当年一样进入了人人都用 Mask R-CNN的时代。说实话这玩意儿确实强——结构清晰、扩展性好、代码开源、效果稳定你在 COCO 上用 ResNet-101 FPN 训出来mask AP 轻轻松松上 35。很多项目直接拿它当 baseline改都不改就上线。但 Mask R-CNN 也不是没毛病。最大的问题就是慢——两阶段架构的老毛病RPN 加 RoI Head大图推理一张要几百毫秒。而且它依赖检测框的质量框歪了或者框漏了掩膜也跟着完蛋。于是有人想走单阶段的路子最典型的是YOLACT——把实例分割拆成生成原型掩膜和预测掩膜系数两个子任务然后用线性组合把两者拼起来。这思路相当清奇把像素级的分割问题变成了矩阵运算问题速度飙到了 30 FPS 以上。但代价是掩膜质量不如 Mask R-CNN尤其边缘细节保留得不好。后来SOLO出来了直接抛弃检测框把图像划分成网格每个网格负责预测该位置物体的类别和掩膜。这方法彻底摆脱了先检测再分割的范式性能不错而且结构简洁优雅。但说实话SOLO 对网格尺寸很敏感小物体落到大网格里就挂了得配多级网格才能覆盖不同尺度的物体。再后来Mask2Former彻底把实例分割带进了 Transformer 时代。它用一组可学习的 query 向量通过 Transformer 解码器直接输出掩膜和类别把检测、实例分割、全景分割统一到了一个框架下。Mask2Former 用 Masked Attention 机制每个 query 只关注自己预测区域内的特征而不是整张图这样收敛速度快了很多。在 COCO 上Mask2Former 用 Swin-L backbone 能刷到 50 的 mask AP而且速度还不慢。但是Transformer-based 实例分割在工业界推进得并不顺利原因跟检测领域一样——算力消耗太大部署门槛太高。你让一个工厂里的质检设备跑 Mask2Former光加载模型就得十几秒推理一张 4K 分辨率的工业相机图显存直接爆掉。所以在工业场景里你看到的大多数实例分割方案还是基于 Mask R-CNN 做轻量化改造——把 ResNet-101 换成 ResNet-50 或者 MobileNetV3把 FPN 的通道数从 256 砍到 128甚至把 mask head 的卷积层从 4 层减到 2 层。精度掉几个点但速度翻倍值。再说说全景分割Panoptic Segmentation。这玩意儿是 2018 年 FAIR 提出来的新任务要求同时做东西两类目标的分割——stuff无定形区域比如天空、草地、道路和 thing可数的物体比如人、车、猫。简单的说就是语义分割 实例分割的结合体。全景分割的挑战在于stuff 和 thing 的性质完全不同用一个统一的框架来处理其实挺拧巴。stuff 没有边界感只有区域感thing 有明确的个体边界。早期的方法都是用两个独立的分支分别处理最后合并结果合并的时候还会有冲突——同一个像素既被语义分支标成了道路又被实例分支标成了汽车这就必须设计合并策略来解决冲突。通常的规则是优先保留实例分支的预测因为它更精细但这种粗暴的合并方式会引入额外的误差。Panoptic FPN是早期最经典的方案在 Mask R-CNN 的 FPN 上同时接一个语义分割头和一个实例分割头最后用规则合并。后来UPSNet引入了一个未确定区域unknown region的概念让网络自己学习哪些像素该归 stuff、哪些该归 thing合并的时候更智能。再后来EfficientPS把骨干网络和解码器做了统一设计在一个共享的 backbone 上分叉出两个分支并且用 NAS 搜索了最优的架构配置在 Cityscapes 上做到了精度和速度的平衡。但真正把全景分割推向新高度的还是Mask2Former因为它直接把 stuff 和 thing 都当成物体来处理——每个 query 对应一个物体或者一块区域输出类别加掩膜。这个统一的表示方式让全景分割变得极其简洁不再需要复杂的合并后处理。你看Transformer 在统一不同任务这件事上确实有天然的优势这也是为什么越来越多的人相信一个 Transformer 框架搞定所有视觉任务是未来方向。但我得说句实话——全景分割在学术界火得不得了但在工业界落地极少。为什么因为大多数真实场景根本就不需要同时分割 stuff 和 thing。自动驾驶需要区分道路、天空和车辆、行人吗需要但人家的传感器融合 pipeline 早就把不同任务拆开做了各司其职没有强行揉到一个模型里的需求。智能安防需要知道人和背包但不需要知道天空和地面。只有少数场景比如机器人导航、室内场景理解才真正需要全景分割提供完整的场景语义信息。很多任务的存在并不是因为它有用而是因为它写论文方便。回过头来看实例分割和全景分割这五六年的发展我最大的感受是实例分割的下一个突破点不在模型架构上而在如何高效处理高分辨率输入上。现在的模型不管是 Mask R-CNN 还是 Mask2Former处理 1024x1024 以上的图像就非常吃力。但真实应用里工业相机的分辨率动辄 2048x2048遥感图更大。你非得把图缩放到小尺寸再推理小目标就全没了。所以我现在最关注的是那些能在不降低输入分辨率的前提下、通过稀疏计算或者动态路由来节省算力的工作。与其刷 0.5 个点的 AP不如把处理 4K 图的速度从 2 FPS 提到 10 FPS。这话我说过很多次了但学术界听不见他们还在卷 COCO。行了实例分割和全景分割就聊到这儿。下篇讲 ReID 和度量学习那又是一个让你怀疑人生的大坑。