从FCN到Transformer,这不仅仅是换了个 backbone

📅 2026/7/23 13:28:52
从FCN到Transformer,这不仅仅是换了个 backbone
说句实在话咱们这个领域表面上看起来光鲜亮丽论文发得满天飞但实际上干的事儿跟“高级农民工”也没什么区别——都是像素级的体力活。前几天组里来了个新人开口就问现在做语义分割是不是无脑上Transformer就行了我看着他那张年轻气盛的脸差点把嘴里的咖啡喷到显示器上。这孩子还是太年轻不知道这个领域的水有多深。咱们先不聊那些花里胡哨的 SOTA先聊聊“根儿”上的事儿。语义分割这活儿说白了就是让计算机看到一张图然后回答“这是什么”和“这在哪里”两个问题。这事儿说起来简单做起来可要了老命了。你得让网络明白全局上下文还得抓住局部细节这事儿本身就挺拧巴。在深度学习这波浪潮起来之前那些传统算法什么阈值分割、区域生长、K-means 聚类基本就是玩具玩个灰度图还行一到复杂场景直接抓瞎。真正的转折点是 2014 年左右Long 那帮人搞出了 Fully Convolutional Network也就是大名鼎鼎的 FCN。这玩意儿厉害在哪儿它第一次把端到端的学习引入了像素级预测不管输入多大尺寸的图出来的结果也是对应尺寸的标签图。虽然现在回头看 FCN 糙得不行上采样出来的结果跟狗啃的似的但在当时那就是开天辟地的东西。后来为了把细节抠得更细U-Net 横空出世尤其是在医疗影像这头简直是标配。它那个对称的编码器-解码器结构加上跳层连接直接把位置信息给捞回来了。那时候我们在实验室跑 U-Net看着它把细胞膜分割得清清楚楚确实有种“卧槽这也可以”的震撼。但 U-Net 说白了还是个 FCN 的变种只是在捕捉全局上下文这事儿上CNN 这玩意儿天生就有缺陷——它的感受野是有限的。于是乎DeepLab 系列登场了。DeepLabV3 用了空洞卷积不增加参数量就能指数级扩大感受野这招够聪明。记得有一阵子打比赛的人如果不用 ResNet-101 做 backbone 加 DeepLabV3 的 ASPP 模块你都不好意思跟人打招呼。但即便是这样卷积核的局限性依然存在。它处理的是局部邻域信息就像一个人永远只能看到眼前一亩三分地很难理解整个画面的宏观逻辑。直到 ViTVision Transformer被搬到分割里这个局面才被彻底打破。ViT 的自注意力机制就像开了天眼能直接捕捉全局依赖关系不管你离得多远只要像素相关它都能建立起联系。这就是为什么后来的 Segformer 这类纯 Transformer 架构在 ADE20K 这种复杂场景数据集上能打得 CNN 抬不起头来。但是这里必须有个但是千万别觉得 Transformer 就是万能药。这玩意儿算力消耗惊人在 Cityscapes 这种高分辨率自动驾驶场景下想把 Transformer 跑实时那 heatmap热力图能把显卡烧出个洞来。所以现在学术界分成了两派一派是重武器派抱着大 Transformer 模型用算力硬砸精度另一派是轻量化派琢磨着怎么把 Transformer 瘦身或者搞 CNN 和 Transformer 的混血儿就为了在嵌入式设备上能跑起来。我个人觉得现在争谁比谁强没太大意思。在实际项目中我见过用 MobileNetV2 替换 Xception 做 backbone 的轻量级 DeepLab轻得一批精度也没掉多少照样在工业场景里跑得飞起。也见过参数上亿的大模型换了个数据集直接过拟合泛化能力差得跟没有似的。搞学术的喜欢刷榜但搞工程的人得心里有杆秤——选什么模型取决于你的数据、你的算力和你的 latency延迟要求。别跟我谈什么理想主义做分割这活儿最终落地的时候往往最不起眼的 trick比如数据增强、loss 函数的微调比换一个 backbone 带来的收益更明显。那些开源代码里藏着的细节才是真正的宝贝。