← 返回资讯
苏晴
资深编辑
已审核

深度学习在医学图像处理中的应用

上个月,一个研究生火急火燎给我发微信:“师兄,我们刚买了台新的显微成像仪,想做细胞分割,该从哪开始?”

深度学习在医学图像处理中的应用

深度学习在医学图像处理中的应用


五年血泪教训:90%的人搞错了第一件事!

上个月,一个研究生火急火燎给我发微信:“师兄,我们刚买了台新的显微成像仪,想做细胞分割,该从哪开始?”

我盯着屏幕,笑了。这问题我听了不下五十遍!每次我都得先泼一盆冷水——

别急着跑模型!先把你那个验证集搞清楚!

你说气不气人?好多人一上来就盯着U-Net、Mask R-CNN的架构图看,好像模型选对了,数据就自动洗干净了。天真!太天真了!

我就栽过!

五年前我刚开始做肺癌病理图像分类,用的还是那个Kaggle上的经典数据集——25000张肺部组织病理学图像。当时我那个兴奋啊,觉得公开数据集嘛,预处理肯定没毛病吧?

结果呢?

跑了整整两周的模型,最后发现一批鳞癌和腺癌的图,文件名标注和文件夹标注完全对不上号!数据白跑了!你想想,那种感觉——就像你追了三个月的女神最后告诉你认错人了?不对,比那还崩溃!

所以今天,我就把五年里踩过的坑、摔过的跤,一个一个讲给你听。

不是客气,是真有用!每个字都是拿GPU死活换来的。


第一章:别碰模型!先问问你的数据能信吗?

很多人一上来就想跑U-Net、Mask R-CNN,我求求你,先想清楚一个问题:你凭什么相信你的输出是有意义的?

医学图像处理和自动驾驶不一样啊!

自动驾驶把行人识别成路牌,一眼就能看出不对。可医学图像呢?你让模型分割出一个肿瘤边缘,外行人根本看不出对错。甚至内行人也要反复确认——万一模型在自嗨呢?

所以,我现在开始任何项目前,强迫自己先干三件事。不做完,绝不碰模型!

1. 搞清楚你手里的数据是什么格式。

别笑!我见过有人把NIfTI格式当普通PNG读,出来一堆乱码,还坚持分析了一周。你说这是不是跟自己过不去?

2. 用一个固定的随机种子锁住一切!

我习惯用SEED=42。这不是玄学!没有它,你后面做消融实验、调参数时,连性能波动是模型问题还是随机性导致的都分不清。那时候你哭都找不到地方!

3. 先手算Dice和IoU。

找10张图的小样本,自己标注,自己算一遍。确保你代码里的指标计算逻辑是对的!

说到这儿,我再说个坑,想起来都牙痒痒——

当时我用Python写Hausdorff Distance的计算,库函数返回值看起来很正常。后来一个审稿人突然问我“你的AVD是啥?”,我才发现——我的距离函数少算了一个维度!

别全信第三方库! 医学图像的评价指标不像分类任务那么成熟。你最好每个指标都自己手搓一遍验证逻辑。

你看,医学图像分析可以“从坏死中分割肿瘤组织”,也可以“测量血管中的氧饱和度”。这俩差了十万八千里!前者要像素级定位,后者要保持数值的定量一致性。你用同一个框架,不改评价指标,铁定翻车!


第二章:选网络?U-Net不是万能的!

U-Net是好东西,这我不否认。

我最早做细胞分割就是从它开始的。那时候审稿还没现在这么严,U-Net加个注意力机制就能发文章。但现在?不行了,真的不行了。

具体问题,你必须具体选型!

去年我接了个活细胞显微成像分割的项目,数据特别恶心:低信噪比、光照不均匀、细胞挤成一团、时间序列还超级长。

我一开始不上U-Net了吗?Dice勉强到0.6。惨不忍睹!

后来试了StarDist,好了很多。StarDist用星凸多边形表达细胞形状,对拥挤场景特别管用。你看,这就叫对症下药!

但StarDist也不是神。遇到细胞形态特别不规则的——比如某些神经元细胞——它的假设就崩了。又笨重,又跑不动,动不动就给你卡住。

Cellpose我也试过。它牛在流场表示,跨细胞类型、跨成像模态的泛化能力确实强。但有个毛病:对分辨率依赖太重,图像尺寸一变就出问题。

你看,没有完美的网络,只有合适的网络。

我现在选型的逻辑:

这还没完。Mask R-CNN跑一轮训练要多久?我用Tesla V100,512x512的图像,一个epoch要40分钟!训练200个epoch得一周!你掐指算算,够你追多少集剧?

所以我后来改装MobileNetV2做分类任务——轻量级的典范,倒残差结构加线性瓶颈设计,推理速度上去了,精度也没掉太多。

但别指望MobileNetV2能搞定分割!分割任务的细节需求和分类不是一个量级!

说到这儿,我忍不住插一句——我见过太多人拿MobileNetV2做分割,然后跑来抱怨效果不好。

大哥!你那螺丝刀去切牛排,切得动才怪!


第三章:损失函数不是数学题,是心理学!

刚开始做低计数PET图像去噪时,我用的MSE Loss。训练出来的图像平滑得像个球——纹理全没了!病灶边缘全糊了!

你说这模型有毛用?

后来读到一篇文章叫LeqMod,核心思想:去噪的同时要保持病灶的定量一致性。也就是说,不仅要让图像看着干净,还要保证去噪后的SUV值和原始高计数图像一致。

这个思路一下子点醒了我。

从那以后,我再也不只用单一Loss了。

我现在怎么做的?

1. 主Loss:Dice Loss或Focal Loss(处理类不平衡)

2. 辅助Loss:L1 Loss(正样本区域权重高,背景区域权重低)

3. 偶尔加一个感知Loss:用预训练网络提取特征层,算特征层面的距离

这几个Loss不是简单丢在一起就算完的,是带权重的!权重怎么调?用Tuning,别信玄学!

你别嫌我啰嗦,这事儿真的很重要!

我上次做MRI脑肿瘤分割,只用了Dice Loss当主Loss,模型卡在Dice 0.78怎么都上不去。后来加了一个边缘距离约束,直接跳到0.83!

你看,就多一步,结果差了整整5个百分点!

说白了,你的Loss决定了模型关注什么。 只关注像素重叠,模型就忽略边界;只关注边界,又忽略内部语义一致性。

最近有一个比较新的方向我觉得特别有意思:CheXPO-v2把对齐从结果监督转向过程监督,通过知识图谱一致性奖励来惩罚幻觉生成。虽然这是VLM领域的思路,但放到医学图像分割里也有可能——我们能不能在训练过程中,对中间层的特征一致性也施加约束?

我还没试透,但直觉告诉我:值得搞!


第四章:不给代码的论文,我恨透了!

这些年最痛苦的不是做不出模型,而是复现别人的论文。

有一次我想复现一篇基于TransUNet的医学图像分割论文,里面轻描淡写一句:“用交叉熵和Dice Loss结合训练”。

我写了封邮件问具体的损失权重,人家三天后回了一句:“sorry I forgot。”

忘?你实验日志呢?你随机种子呢?你代码呢?

你说气不气人!

从那以后,我坚持做两件事,雷打不动:

1. 所有实验用Jupyter Notebook跑。

你可以嘲笑这不够工程化,但Notebook的容错率让我少死了十几次!所有中间结果都打印出来,每一步都看得见。出错了?回头看!哪一步错了?马上定位!

2. 写完整的README。

我连坏掉的实验都会记录:为什么会坏?改了哪里?这组参数有没有再验证?

你猜怎么着?

靠这个习惯,我去年帮一个师弟复现了一篇论文——数据预处理到模型推理只花了两天!因为我自己写过的类似框架,直接拿来改参数就行。

他说“师兄你太牛了”,我说别,你只是没吃过苦头。

高内涵成像那种自动化流程的论文尤其坑!

很多作者说“自动化显微镜+人工智能分析流程”,写得天花乱坠。但你写信问具体参数,十个有八个说不清。不是故意瞒你——是真的没记录!


第五章:数据越多越好?你被坑得还少吗?

我见过一个团队,为了做肺结节检测,收集了十万张CT图像。结果呢?标注质量参差不齐,模型训练震荡到飞起,最后效果还不如用一个公开的LIDC数据集跑出来的结果!

数据的质量,永远大于数量!

我现在的建议是:如果你从头开始做一个医学图像项目,前两周应该花在——看数据!

对,就是把所有图看一遍。好的医生为什么厉害?人家看了二十年片子,知道什么是“典型的腺癌结构”,什么是“需误报的良性结节”。

让机器做这件事,你得先替机器看。至少,你得告诉它“看什么”。

我做肺癌分类时,先花了一整周去看那些良性和恶性的细胞纹理差异——核浆比、腺体结构、间质浸润。然后我才设计数据增强。

如果你不知道“细胞拥挤”是常见pattern,你怎么会特意设计针对拥挤场景的增强策略?

挺有意思的是,这些原则在传统图像处理时代就存在了。

从阈值分割、分水岭算法到U-Net,核心解决的都是同一个问题——怎么从影像里提取出你想要的生物学意义。

Technology changes, the question is the same.


进阶建议:如果你真想做点有用的……

如果你已经看到这里,说明你大概率是真的在做这个方向,不是玩玩就算了。那我说几句实在话,句句扎心,但句句保命。

1. 别只刷精度指标。

Dice涨了0.01,对临床诊断有意义吗?没意义!

我建议你汇报结果时附带两个案例分析:一个模型做得好的,一个做崩的。崩的那个你能解释清楚为什么崩,比刷一个超高分重要一百倍!

2. 3D比2D难一个数量级!

如果刚开始做,从2D切片开始。3D分割、配准、三维重建需要的东西太多——内存、标注量、数据预处理复杂度。我上一次做三维MRI重建,内存跑到60G还不够!后来发现人家论文里的方法做了切片级处理。你看,自己瞎搞多浪费时间?

3. 关注大模型在医学图像上的应用。

SAM和它的变体(比如SAM-Med2D、SAM-Med3D)最近很火,但我持审慎乐观态度——谨慎的乐观。泛化能力确实强,但面对低信噪比、小病灶的医学场景,还差得很远。

不过,可以把它当作一个极好的预训练起点!

我最近在尝试用SAM作为特征提取器,把提取的特征作为下游任务的输入——效果比从ImageNet初始化好。你想想,多好的想法?

4. 数据标注永远是你最大的瓶颈!

如果你有能力,请一个专业病理医生或放射科医生来复核标注。这笔钱花得绝对值得!

舍不得花这个钱?最后花在训练GPU上的钱全打水漂!你自己选!

5. 工具链不是越全越好。

Python 3.9 + TensorFlow 2.x / PyTorch 1.13 + SimpleITK + MONAI + scikit-learn,够了。

别上来就上什么牛逼的分布式框架,连小批量数据都调不通,上了分布式只会让报错更复杂。你信我!


最后一句

这些年我最大的感触是:医学图像深度学习不应该是ML竞赛,它应该是工程实践。

你需要的不是发一篇Paper,不是刷一个SOTA,而是——真的能用你的模型去帮医生做决策。

做到这一点,比任何SOTA都性感。

(说完了,我去调试一个新项目了。这次是用3D U-Net做脑肿瘤分割。如果你们有兴趣,下次聊聊怎么处理各向异性的三维数据——又是一堆坑等着踩呢!)

147
2462 阅读
4 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 14:53

苏晴

资深编辑

科技媒体从业 8 年,曾就职于多家科技媒体。关注 AI 创业和投资赛道,采访过 50+ 位行业从业者。

读者评论 4

老李 昨天
有个小问题想请教,文中提到的那个方案在大规模场景下性能怎么样?
回复 点赞 (5)
运营小陈 4天前
转发到团队群了,大家都觉得有参考价值。
回复 点赞 (4)
数据分析师 1周前
数据引用很扎实,建议补充一下近三个月的最新数据。
回复 点赞 (9)
产品经理阿杰 1周前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)