FCN到U-Net——编码器-解码器架构是怎么统治分割领域的
上篇咱们聊了图像分割的基本概念今天聊聊现代分割模型的祖宗——编码器-解码器架构。你要是翻看2015年到2020年的分割论文会发现90%的模型都长一个样左边一路下采样编码器、右边一路上采样解码器、中间加几条跳层连接。这个架构范式统治了分割领域整整五年直到Transformer杀进来才被打破。今天就把这个架构的来龙去脉、设计逻辑、还有那些你以为懂了其实没懂的细节全给你掰扯清楚。FCN——虽糙但开创了一个时代2014年的FCN是第一个把卷积网络用于像素级分割的模型。它的思路极其直接把分类网络VGG、AlexNet的最后几层全连接层砍掉换成卷积层然后用上采样把缩小的特征图恢复到原图尺寸每个像素就能得到一个分类结果。FCN有三个版本上采样的倍数分别是32倍、16倍、8倍。FCN-32s直接用32倍上采样结果糙得没法看FCN-8s融合了不同层的特征效果好了不少但边缘依然是模糊的。FCN最大的贡献是证明了分类网络可以做分割——在此之前大家觉得分类和分割是两码事分类网络学的是整体语义分割需要像素级精细度两者不兼容。FCN用事实证明把分类网络中间的特征图拿出来做上采样就能得到像素级预测。这个洞察直接点燃了整个分割领域。但FCN的缺陷也极其明显上采样只是简单的双线性插值或者转置卷积不涉及学习所以细节恢复得极差。而且FCN没有考虑像素之间的上下文关系——每个像素独立分类没有机制让相邻像素商量着来。这就导致分割结果里经常出现孤立的噪点区域。U-Net——医学分割的信仰如果说FCN是分割领域的开山祖师那U-Net就是登堂入室的那一位。2015年Olaf Ronneberger发表的这篇论文到现在快10年了在医学图像分割领域依然是被引用最多的模型之一。U-Net的架构有两个核心设计第一对称的编码器-解码器结构。编码器每下采样一次通道数翻倍、分辨率减半解码器每上采样一次通道数减半、分辨率翻倍。整个网络呈完美的U字形这也是U-Net这个名字的由来。第二跳层连接。编码器每一层的特征图直接跳过瓶颈拼接到解码器对应层的特征图上。这个设计让解码器在恢复分辨率的同时能直接获取编码器里保存的高分辨率细粒度信息。跳层连接的意义怎么强调都不过分。编码器一路下采样虽然学到了高层语义但空间信息逐层丢失——到了最底层特征图只有原图的1/32大小每个像素对应原图32x32的区域哪里还分得清细胞边界在哪儿跳层连接就是把编码器沿途保留的高分辨率特征图拿出来拼接到解码器上让解码器在做上采样时既能看到语义来自深层也能看到细节来自浅层。U-Net在医学分割上的成功很大程度上归功于这个设计。医学图像的特点是精度要求极高、数据量极少——你不可能有几百万张标注好的CT图来训练一个大型分割模型。U-Net的对称结构加上数据增强让它能在几十张标注图像的情况下就训出一个可用的模型。这对医学领域是革命性的——以前你要标几百上千张图才能训一个模型现在几十张就够了。而且U-Net的工程实现极其简洁——一个Python文件就能写完没有花哨的attention机制、没有复杂的多尺度模块就是一个纯粹的全卷积网络。你拿去训细胞分割、器官分割、病变分割稍微调调参数就能出不错的结果。这就是为什么它在医学领域至今仍是默认基线——你发医学分割的论文如果不跟U-Net做对比审稿人根本不会看。编码器-解码器的共性逻辑其实不管是FCN还是U-Net背后的逻辑是一致的你要做像素级分类既需要全局视野知道这个像素周围是什么也需要局部精细度知道这个像素的具体边界在哪里。编码器做的事就是把局部精细度逐步压缩、抽象成全局视野。这个过程必然损失空间分辨率但换来了对整体语义的理解。解码器做的事就是把全局视野逐步展开、恢复成局部精细度。这个过程依赖编码器的特征和跳层连接来补回丢失的细节。这个逻辑听着简单但真正做起来全是权衡。编码器下采样多少次通道数翻多少倍解码器用哪种上采样方式跳层连接加在哪些层每个设计选择都会影响模型的精度和速度。分割backbone的演进——从VGG到ResNet到Swin早期分割模型FCN、U-Net、DeepLabv1的编码器用的是VGG。VGG结构规整、简单但不够深参数量大、计算量也不小。后来ResNet成了标配。残差连接让网络能堆到上百层而不会出现梯度消失。用ResNet-101做编码器的DeepLabv3性能比VGG版本高出一大截。再后来EfficientNet用神经架构搜索找出了更高效的缩放方式MobileNet让分割模型能跑在手机上。每一个新的分类backbone出来分割领域就会跟进——换掉编码器、保持解码器不变、重新训一遍精度就能涨一点。这种躺赢式的进步持续了好几年。直到Transformer出现。ViT的全局自注意力在分类上碾压了CNN分割领域自然也跟进了——大家开始琢磨怎么把Transformer塞进编码器。SETR直接用ViT做编码器抛弃了下采样用全局注意力捕捉超长距离依赖。SegFormer更聪明用Transformer做编码器但保留多尺度特征配合一个极轻量级的解码器。这些我在第四篇里详细展开今天先挖个坑。跳层连接的变体——U-Net和Attention U-NetU-Net的跳层连接太成功了自然有人想加料。U-Net把单条跳层连接变成了密集连接。不光是同层之间连还跨层连——编码器的第1层直接连到解码器的第1、2、3层编码器的第2层直接连到解码器的第2、3层。这样解码器的每一层都能看到所有尺度的编码器特征理论上能更好地融合多尺度信息。代价是计算量大了不少。Attention U-Net在跳层连接上加了注意力门控——不是把编码器的所有特征图都拼给解码器而是让网络学习哪些区域的特征更重要只把重要区域的特征传递过去。在医学分割里这个方法能有效抑制背景区域的干扰让模型聚焦在目标器官周围。尤其当病灶很小的时候注意力门控能把模型的目光拽到小病灶上而不是在背景里瞎转悠。一个被严重低估的问题——分辨率到底要不要恢复到最后很多分割模型的输出分辨率比输入低。比如输入512x512输出是512x512吗不一定。很多模型为了节省计算量输出只有256x256甚至128x128然后通过双线性插值强行放大到原图尺寸。这在一般场景下问题不大但在精细分割医学、遥感场景里就是灾难。边界细节全丢了两个紧挨着的物体可能被合并成一个。U-Net之所以在医学领域封神一个很重要的原因是它把分辨率完整地恢复到了输入尺寸而且通过跳层连接保证了高分辨率特征的可用性。代价是计算量增加——最后几层在高分辨率特征图上做卷积FLOPs比在低分辨率上做大了几倍。但医学场景里精度就是生命算力是次要的。总结一下FCN证明了分类网络能做分割U-Net把编码器-解码器跳层连接这个范式做到了极致。这个架构在2015-2020年间统治了整个分割领域影响了无数后来的工作。即便在Transformer大行其道的今天U-Net的变体在医学分割上依然是主流——你可以在U-Net里把VGG换成ResNet、换成Transformer但这U形的骨架谁也舍不得扔。