← 返回 PaperDaily
视觉与图像
U-Net分割血管总断条?UI-VISA让区域生长给血管“接骨”,clDice显著提升还快3~5倍
要说清楚这篇论文在解决什么问题,得先从一张血管造影图说起。
龙哥读论文
阅读 2
查看原文
原论文信息如下:
血管分割为何如此困难?——从U-Net的碎片化问题说起
要说清楚这篇论文在解决什么问题,得先从一张血管造影图说起。
数字减影血管造影,也就是常说的 DSA(Digital Subtraction Angiography),是当前诊断脑血管疾病的"金标准"影像手段。医生通过向血管注入造影剂,再结合 X 射线成像,就能清晰地看到脑部血管的形态、走向以及有没有狭窄、动脉瘤、畸形之类的问题。DSA 图像里,血管往往呈现为又细又长、不断分叉的管状结构,背景则是复杂的脑组织和骨骼影像。要把这些血管从背景中精确地"抠"出来,就是血管图像分割这个任务的核心目标。
图(a):一张典型的 DSA 影像,图像中亮白色的部分即为注入造影剂后显影的脑血管
手动勾画血管有多痛苦?临床医生需要在一张图上沿着每一条蜿蜒曲折的血管边缘慢慢描。对于肉眼可见的粗大血管还好,那些细小的末梢分支,在图像上可能只有几个像素宽,人眼辨认都费劲,更别提用手精准勾勒了。更麻烦的是,不同医生画出来的结果经常不一致——同一个医生在不同时间画的结果也未必一样。这种标注的可变性,正是推动计算机辅助分割技术发展的直接动力。
近些年来,深度学习方法,尤其是卷积神经网络(CNN),已经成为医学图像分割的主流工具。其中名气最大的,当属 U-Net 架构。U-Net 通过编码器逐层提取特征、解码器逐层恢复空间分辨率,再加上跳跃连接把浅层细节传给深层,在医学图像分割领域堪称"万金油"级别的存在。
问题在于,U-Net 说到底是一个像素级的分类器。它对每一个像素独立判断"这是血管还是背景",虽然能借助卷积核捕捉到局部上下文信息,但对血管这种细长、分叉、跨越大范围空间的结构来说,缺乏全局拓扑约束。一个很典型的失败模式是:网络输出的概率图在某些细血管处出现断裂,或者产生一些孤立的假阳性小斑块,看起来就像一张完整的血管网络被切成了好几段。对于诊断来说,这种断裂是致命的——医生需要看到一根血管从头到尾的完整走向,来判断是否存在狭窄或者闭塞,而不是看一堆支离破碎的片段。
等一等,U-Net 分割血管容易断,那如果有一种算法天生就重视"连通性",事情会不会有转机?
UI-VISA核心思想:让U-Net为区域生长算法"指路"
传统的区域生长算法(Region Growing Algorithm, RGA)正是这样一种重视"连通性"的方法。它的思路非常直观:从一些初始种子点出发,逐一向周围扩散,凡是满足相似性条件的相邻像素,就并入当前区域,一路生长直到没有新的像素可以加入为止。因为每一步扩展都发生在已有区域的"边上",所以最终得出来的区域天然是连通的。
既然区域生长算法在原理上就保证了拓扑连续性,让像素的归属显式地依赖于它与已生长区域之间的连通性,那是不是直接拿它来做血管分割就行了?几年前还真有人这么想过。2021 年前后,加州大学梅塞德分校的研究团队提出了 VISA(Vascular Image Segmentation Architecture),一种基于 CNN 的区域生长分割流水线。VISA 的训练阶段会构建一个浅层卷积网络:输入一个以目标像素为中心的 80×80 灰度图像块,网络输出一个 3×3 的小掩膜,用来判断中心像素周围的 8 个邻居里,哪些是血管前景、哪些是背景。等到推理阶段,VISA 随机选取一批初始种子点,让 CNN 不断预测周围的 3×3 区域,凡是预测为前景的邻居就加入区域并继续向外扩散,遍历完整张图像后,就得到了一幅完整的血管分割图。
听起来很自洽?但 VISA 有一个致命的软肋——初始种子的选择。在 512×512 的图像中,VISA 随机挑选 500 个像素作为种子点。血管在整个图像中占据的面积比例很低,多数种子点落到了背景区域,这些种子点周围根本长不出血管来,算法却还是老老实实地处理了它们周围的大量冗余图像块,白白浪费算力。更要命的是,如果某根细小的血管分支运气不好,周围一个种子点都没有,那么算法从别的区域生长过来时,也很难跨越背景"够"到它,最终就会漏掉这根分支。
于是这篇论文就抛出了一句灵魂拷问:为什么不能让 U-Net 先粗粗地分割一遍,把预测出来的前景像素直接当作区域生长的种子点呢?
这就是 UI-VISA(U-Net Initialized Vascular Image Segmentation Architecture)的全部出发点。
UI-VISA 的方法说起来并不复杂:U-Net 先对整个测试图像做一次前向推理,将预测概率大于 0.5 的像素提取出来,作为区域生长阶段的初始种子;然后把这些种子交给 VISA 原本就训练好的 CNN 引导区域生长模块,由 RGA 从这些"内行"种子出发,沿着血管走向逐步向外扩散细化。整个过程不需要再重新训练任何新的网络——U-Net 和 VISA 的 CNN 可以分别独立训练,测试阶段只需要把两个模块串联起来。
这个设计聪明在哪里?种子点质量决定了区域生长的上限。U-Net 虽然会在细血管处断裂,但其预测出的前景像素大多落在真实的血管区域内部——U-Net 或许画不出一条完整的血管,但指出"哪些像素大概率是血管"还是做得不错的。让这些靠谱的像素去当种子,区域生长就能顺着 U-Net 给出的"草稿"继续把血管补全,而不是在整张图上漫无目的地碰运气。
这种"深度模型给先验 + 传统方法做精修"的组合拳,在医学图像分析中并不算新潮,但 UI-VISA 把"U-Net 给区域生长当种子生成器"这件事做得非常直接、干净,几乎没有引入任何花哨的额外结构——这正是它令人舒服的地方。全文的工作重点不在发明新网络结构,而在重新思考两个成熟部件之间的接口应该怎么设计。
"两个不完美的部件,通过巧妙的接口设计,组合成一个比各自都更靠谱的整体。"——这也是系统工程里最让人舒坦的一种胜利方式。
方法详解:从U-Net预测到CNN引导的迭代细化
UI-VISA 的整体流程分两大部分:种子生成与迭代细化。下面拆开来看每一步到底做了什么。
U-Net 大家都很熟悉了,它由编码器和解码器构成。编码器部分通过一次次下采样把图像逐步压缩,每一步都提取更抽象的语义特征;解码器部分再一步步上采样恢复原始分辨率;中间通过跳跃连接把编码器中不同尺度的特征直接传给解码器对应的层,从而保留血管边缘之类的高频细节信息。
本论文使用了一个"改良版"的 U-Net:编码器由四个双卷积块组成,每块包含两次 3×3 卷积,并配合 ReLU 激活与 0.2 的 dropout 概率;通道数从 64 起步,逐层翻倍直到 512;最底部是一个 1024 通道的瓶颈层;解码器则与编码器镜像对称,最终通过一个 1×1 卷积输出单通道的血管概率图。
整个网络使用 SGD 优化器训练(momentum 0.9,初始学习率 0.01,批大小 32),损失函数采用二值交叉熵;训练过程使用早停机制(patience 25 个 epoch),并保留验证损失最低的模型作为每一折的最终模型。由于原始数据集只有 26 张图、每张 512×512 像素,为了让 U-Net 学得充分,训练时从每张图像中随机裁剪 200 个 128×128 大小的图像块,并配合随机旋转、翻转、缩放等数据增强手段。
VISA 的训练是一个独立的过程。数据集准备阶段,图像先按照四周各 40 像素进行零填充,图像尺寸从 512×512 变成 592×592。然后遍历原始图像中的每一个像素位置,以其为中心取一个 80×80 图像块作为 CNN 输入,同时在掩膜上取对应的 3×3 区域作为标签。一张图能产生 26 万个这样的训练样本对。
由于血管前景像素远少于背景像素,训练前需要做类别平衡。具体做法是:统计每个 3×3 掩膜斑块中前景像素的个数(0 到 9),把样本按此数值分成十个类别,然后计算每个图像中样本数最少的那一类,对其余类别进行有放回采样,使得各类别数量一致。这种方式保证了 CNN 不会因为背景像素过多而产生严重的类别偏置。
VISA 的 CNN 主体结构看起来像一个没有解码器分支的 U-Net 编码器,25 层深:五组双卷积加最大池化逐层降采样,最后通过 1×1 卷积输出 3×3×1 的前景/背景概率图。之所以输入 80×80 而只输出 3×3,是因为网络只关心"中心像素周围的邻域该怎么生长",不直接对整个图像块做密集预测。决策虽小,但每一步都被周围的丰富上下文影响着。
图为 VISA 第二阶段的示意图。图(a)中,一个初始前景种子像素被标记为黄色;图(b)中,红色像素是 CNN 下一步要评估的候选邻居像素;图(c)中,网络将候选像素分类为前景(黄色)和背景(紫色);图(d)中,被判定为前景的像素加入区域,它们各自的邻居又成了新一轮需要评估的候选像素。区域就这样像水波扩散一样,沿着血管逐层向外生长。
值得注意的是,VISA 的 CNN 在训练过程中,每个 epoch 都会重新运行一次"平衡采样"操作,这保证了网络在每个 epoch 看到的是不完全相同的训练子集,变相起到了数据增强的作用。论文中,该模型的概率阈值通过在验证集上实验确定,取值介于 0.4 到 0.6 之间。
测试阶段,UI-VISA 的流程非常清晰。论文用了一段伪代码进行描述,逻辑上就是经典的"队列式"遍历:首先,U-Net 对测试图像进行前向推理,将输出概率大于等于 0.5 的像素集合作为初始种子 C0;然后进入 while 循环,只要当前候选种子集 Ct 非空,就对每个种子像素提取其对应的 80×80 邻域图像块,送入训练好的 VISA CNN,得到该中心像素周围 3×3 邻域的前景/背景预测;新预测为前景的像素如果此前没有被访问过,就加入下一轮候选集合 Ct+1。这个循环不断执行,直到再也找不到新的前景像素为止。由于同一个像素可能被多个相邻种子的 3×3 预测窗口重复覆盖,UI-VISA 还做了一个细节处理:每个像素的多次预测概率先做平均,再与阈值比较,降低了单次预测的不确定性。
输入:训练好的U-Net分类器g,训练好的VISA CNN分类器f,测试图像I,阈值τ
输出:预测分割掩膜Ŷ
1. 将I按最大值归一化
2. 在I四周各填充40个零像素,得到I_pad
3. 初始化Ŷ所有像素为0
4. 初始化像素分数记录字典P为空
5. 初始化已访问集合S为空
6. 获取U-Net前景预测集合 C0 = {(i,j) | g(I)(i,j) >= 0.5}
7. t ← 0
8. while Ct非空 do
9. 对Ct中每个像素(i,j),从I_pad中提取以(i,j)为中心的80×80图像块S(i,j)
10. 将S(i,j)输入f,得到3×3预测掩膜P
11. 将P中每个位置的预测值记录到字典P[(i+row-1, j+col-1)]中(追加)
12. 将(i,j)加入已访问集合S
13. 计算 Ct+1 = {(i,j)∉S | P[(i,j)]的均值 >= τ}
14. t ← t+1
15. end while
16. 重建掩膜:对P中每个像素,若其均值概率 >= τ,则置Ŷ(i,j)=1
17. 裁剪掉四周各40像素的填充,恢复512×512原始尺寸
18. 返回最终分割掩膜Ŷ
UI-VISA 与 VISA 在结构上的差异其实只有一句话:VISA 在 512×512 图像中随机选 500 个像素作为种子,UI-VISA 则把 U-Net 预测为前景的像素全部作为种子。由于 U-Net 的种子点全部集中在真实的血管区域附近,算法不需要在空旷的背景区域浪费迭代;而血管又是连通的管状结构,从不同的血管片段出发的生长结果最终能够汇合,弥补 U-Net 输出中断裂的部分。
这里有一个很容易被忽略但极其重要的细节:UI-VISA 的最终分割结果完全由区域生长算法产生,而不是由 U-Net 产生。U-Net 只负责给出初始种子点,之后血管最终长成什么样子,全看 RGA 在 CNN 的引导下如何向外扩散。换句话说,U-Net 的定位从"分割器"降级成了"定位器",而真正的精修器是区域生长算法。这也解释了为什么 UI-VISA 能够修复 U-Net 输出中的碎片化问题——它把"逐点分类"换成了"从血管内部向外生长",后者天然就是连通的。
评估指标方面,论文使用了经典的 Dice 系数和专门针对管状结构设计的 clDice 指标(centerline Dice)。Dice 衡量预测结果与金标准之间的像素级重叠程度,图像分割的通用指标;但血管分割的成败不应只由像素重叠来判定——如果一根完整的血管被切成了三段,每段跟金标准都略有重叠,Dice 分数可能仍然高得好看,可这种断裂的血管网络对临床诊断没有意义。clDice 正是为了补上这个缺陷而生的:它取分割结果的骨架(即血管的中心线)与金标准的骨架,计算两条中心线之间的 Dice 系数。如果预测结果中血管出现断裂,那么预测骨架与真实骨架的重合度就会下降,clDice 也就相应降低。clDice 的定义式如下:
实验结果:clDice显著提升,连通性得到保障
实验设计部分,论文采用 26 张来自不同病人的 DSA 图像及其手动标注掩膜,使用 5 折交叉验证,保证每张图像恰好出现在一次测试集中。测试时,论文从三个不同维度对 UI-VISA 进行了评估:定量指标对比(Dice 和 clDice)、推理时间开销、统计显著性检验。
定性结果方面,图 6 展示了三种方法在代表性图像上的分割效果。颜色编码上,白色表示真阳性(正确识别的血管像素),黑色表示真阴性(正确识别的背景),红色表示假阳性(背景被错误分为血管),黄色表示假阴性(血管被漏检)。第一行选取了一张 U-Net 表现较差的图像。纯粹由 U-Net 输出的分割结构破碎不堪,大片血管区域遗失。对比之下,VISA 与 UI-VISA 的分割则好得多,其中 UI-VISA 的 Dice 达到了 0.7694。这说明即使 U-Net 给出的分割并不完美,只要它把大概的血管位置指出来,RGA 后续的修正就能在很大程度上"力挽狂澜"。
第二行展示了一张相反的案例:U-Net 在这张图上 Dice 最高(0.7920),但 VISA(0.5102)和 UI-VISA(0.5963)的表现都不太理想。从可视化结果看,UI-VISA 的错误主要表现为将颅骨区域也纳入了血管范围,产生了假阳性。这个案例提示了 UI-VISA 的一个已知弱点:U-Net 种子的质量直接影响后续生长结果。如果 U-Net 把颅骨边缘误判为血管,那么对应的种子点也会分布在颅骨上,RGA 沿着这些区域生长后,就很难把这部分错误纠正回来——毕竟,RGA 只会"锦上添花",而不会主动识别并清除那些从一开始就错了的种子。
第三行的案例中,三种方法的表现接近,说明图像本身对谁都一样难。整体来看,图 6 给出的信息量大且直观:UI-VISA 不是在所有图像上都能稳压对手,它的优势主要体现在"U-Net 碎得厉害但大致位置没跑偏"的那些图像上。
定量结果方面,表 1 汇总了三种方法在五折交叉验证中的完整表现。观察这些数据,可以读出不少有意思的细节。
首先看最后一行"All images"的平均表现:UI-VISA 的平均 Dice 为 0.7958,平均 clDice 为 0.7843,均高于 VISA(Dice 0.7810,clDice 0.7610)和 U-Net(Dice 0.7788,clDice 0.7550)。UI-VISA 对比 U-Net,clDice 提升了约 0.03;UI-VISA 对比 VISA,Dice 和 clDice 都有大约 0.015 到 0.023 的提升。另一个值得注意的点是 UI-VISA 的标准差普遍更低,说明它的表现在不同图像之间更稳定,没那么"看运气"。
但是整体平均归整体平均,如果只看 fold 4,局面就有些微妙了。在 fold 4 上,U-Net 的 Dice(0.7942)和 clDice(0.7634)都高于 UI-VISA(Dice 0.7759,clDice 0.7587)。为什么会出现这种"开倒车"?最可能的原因是 fold 4 的测试图像中,U-Net 本身的分割质量已经很不错,甚至处于五种情况中的最佳状态,此时 U-Net 给出的种子点覆盖了大量真前景同时引入了少量假阳性。而 RGA 的迭代细化在修复断裂的同时,也可能把 U-Net 原本正确的预测区域向外多扩了一圈,令假阳性增加。不过,即便在这个对 UI-VISA 不利的 fold 中,它依然赢过了随机初始化种子的 VISA(Dice 0.7585,clDice 0.7358)。换句话说:U-Net 种子再怎么说也比随机撒点强。
推理效率方面(表 2),U-Net 以绝对优势胜出,每折推理只需要三四十秒。VISA 则慢得令人抓狂,单折推理时间从 2223 秒到 9341 秒不等,最慢的 fold 4 超过了两个半小时。UI-VISA 处在两者之间:每折耗时 592 到 1812 秒。相比 VISA 那动辄几千秒的耗时,UI-VISA 实现了 3 到 5 倍的加速。原因并不复杂:VISA 随机选的 500 个种子大多落进背景区域,算法花大量时间处理那些完全没有血管的图像块;UI-VISA 的种子全部来自 U-Net 的前景预测,算法从一开始就在血管附近工作,省去了大量无畏的空转。当然,UI-VISA 相比 U-Net 仍然慢了一个数量级,这也是区域生长类方法目前绕不开的代价。
光是报告平均分还不够,论文还做了严格的统计显著性检验。由于每幅图像只在一个测试折中出现,所以可以自然地获得 26 个独立的逐图 Dice 与 clDice 差值。Shapiro-Wilk 检验显示这些差值并不服从正态分布(Dice: p=3×10⁻⁶;clDice: p=7×10⁻⁶),于是研究者使用配对 Wilcoxon 符号秩检验、采用单侧假设(UI-VISA 优于 U-Net),显著性水平 α=0.05。最终结果:UI-VISA 在 26 张图像中有 18 张 clDice 高于 U-Net,clDice 的提升达到统计显著(p=0.023);Dice 有 17 张更高,但差异未达到显著水平(p=0.104)。
这个结果非常有意思。它恰好说明:UI-VISA 的核心贡献不是把每个像素都分得更准,而是把血管网络的"骨架结构"恢复得更好。Dice 差异不显著、clDice 差异显著,说明 UI-VISA 并没有简单地改变所有像素的分类结果,而是有针对性地修复了那些位于血管中心线附近的拓扑断裂。这正是论文开头提出的设计目标——用区域生长的连通性约束,弥补逐像素分类方法在拓扑连续性上的天然缺陷。如果只看 Dice 可能会觉得提升不痛不痒,但对临床诊断至关重要的连通性指标 clDice 的提升给出了统计上确实的信号。
局限与展望:速度与精度的平衡之道
聊完了 UI-VISA 的优点,也该冷静看看它的短板和后续可能的方向。第一,也是最明显的,是推理速度。虽然 UI-VISA 比 VISA 快了 3 到 5 倍,但是最理想情况下单张图像仍然需要大约 10 分钟级别的推理耗时(单折约 592 秒,一折测试含 5 张图,平均单张约 118 秒)。在介入手术的实时引导场景里,医生显然不可能等上几分钟才看到分割结果。未来可以考虑用并行化策略优化 RGA 的逐点扩散过程,或者限制 RGA 只对 U-Net 输出中置信度较低的区域做局部修复,从而提高效率。
第二个限制是灾难性的小数据集。整个实验只有 26 张 DSA 图像,虽然五折交叉验证做了统计检验,但这种规模的数据集在多中心、多设备、多种成像参数的现实场景中,泛化能力依然存疑。模型对于不同厂家设备、不同造影剂浓度、甚至不同医院成像协议下的图像表现如何,都没有得到验证。
第三个方面是静态图像的处理框架没有用上时序信息。DSA 本质上是血管造影的动态序列,多帧之间血管位置在时间上高度相关。目前的 UI-VISA 只对单帧图像操作,如果能结合多帧之间的运动信息做联合分割,很可能进一步提升准确率。论文作者在 Future Work 里也提到了类似的思考方向。
最后一点值得反思,也最有意思:U-Net 种子在"带偏"RGA 方向上的风险。在 fold 4 的案例中已经能看到,当 U-Net 分割结果中含有较多假阳性时,这些错误的种子会把 RGA 引向颅骨等背景结构,最终产生比 U-Net 本身更差的结果。或许可以引入置信度加权或种子筛选机制,结合形态学后处理过滤掉那些明显孤立的种子区域,让 UI-VISA 在保持连通性的同时不至于被 U-Net 的"幻觉"带偏。
龙迷三问
这篇论文到底在解决什么问题?面向数字减影血管造影的血管分割,本文提出UI-VISA混合管线:用U-Net预测结果替代随机种子,为CNN引导的区域生长“指路”。
这篇工作最值得看的点是什么?UI-VISA在5折交叉验证中4/5折取得最高Dice和clDice分数,平均Dice 0.7958±0.0702,clDice 0.7843±0.0756。Wilcoxon符号秩检验显示clDice改进显著(p=0.023),Dice改进不显著(p=0.104)。
这篇工作的边界或风险在哪里?优点:(1) 创新性地将U-Net预测作为区域生长的种子点,消除随机种子偏差;(2) 有效结合全局分割与局部连通性约束;(3) 相比VISA显著降低计算成本;(4) 在clDice上取得统计显著的改进。缺点:(1) 推理时间仍远慢于纯U-Net;(2) 在Fold 4中性能略低于U-Net;(3) 数据集规模较小(仅26张图像);(4) 依赖U-Net初始预测质量,若U-Net预测严重错误可能影响整体性能。
如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~
龙哥点评
论文创新性分数:★★★★☆
提出UI-VISA混合分割架构,利用U-Net的前景预测作为CNN引导的区域生长算法的初始种子点,通过迭代细化分割过程来增强血管连通性并恢复U-Net遗漏的精细血管细节。
实验合理度:★★★★☆
Dice分数和clDice分数(中心线Dice),后者专门用于评估血管结构的连通性和拓扑保持。
学术研究价值:★★★★☆
提出UI-VISA混合分割架构,利用U-Net的前景预测作为CNN引导的区域生长算法的初始种子点,通过迭代细化分割过程来增强血管连通性并恢复U-Net遗漏的精细血管细节;更关键的是问题定义是否可复用到同类任务。
稳定性:★★★☆☆
现有材料未提供充分的极端条件、重复运行或扰动测试,稳定性暂按中性评价。
适应性以及泛化能力:★★★☆☆
现有材料未完整展示跨数据集、跨场景或分布外实验,泛化能力仍需进一步验证。
硬件需求及成本:★★★☆☆
UI-VISA推理时间每折约592-1812秒,比VISA(2223-9341秒)快3-5倍,但比U-Net(约33-40秒)慢得多。
复现难度:★★★☆☆
现有材料未确认完整代码、配置、数据处理脚本和权重是否齐备,复现难度暂按中性评价。
产品化成熟度:★★★☆☆
论文验证以研究实验为主,真实部署中的时延、成本、维护和异常场景仍需补充验证。
可能的问题:(1) 推理时间仍远慢于纯U-Net;(2) 在Fold 4中性能略低于U-Net;(3) 数据集规模较小(仅26张图像);
*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!