第3章:生物医学影像人工智能算法开发(Artificial Intelligence Algorithm Development for Biomedical Imaging)
生成网络与合成数据
章首承接上一章末尾已经讲到的生成对抗网络(GAN),把生成网络在心血管影像中的几种用途摆开。GAN 的基本机制是:一个判别网络(discriminative network)试图区分真实数据与生成网络产出的"假"样本,而生成网络(generative network)的目标恰好相反——它的损失是判别网络损失的相反数;判别网络损失越高,生成网络损失越低,因此得名"对抗网络"(adversarial network)。一旦判别网络无法再把生成的样本与真实样本区分开,就得到了一组成功的合成图像。作者随后把这条思路映射到心血管影像:合成数据可有几种不同的使用方向。
第一类用途是数据扩增:在已有数据库基础上合成新样本,从而扩充训练集。Diller 等人[47] 以 303 例法洛四联症患者的心脏 MRI 为基础,用生成网络合成了 10 万张新图像作为训练集,再以此训练一个 U-net 做分割。视觉检查显示所有合成样本都被人类观察者判定为解剖学上合理(anatomically plausible),而用合成数据训练出的 U-net 与用真实患者数据训练出的同一架构表现相当。这表明在可用数据有限时,用合成数据扩充训练集是一条可行的路径。
第二类用途是跨模态合成:把一种模态下采集到的数据"翻译"为看起来像来自另一种模态的数据。当前的研究方向包括由 MRI 合成 CT、由锥形束 CT(CBCT)合成 CT 等;潜在应用场景有 MR-only 的放射治疗规划,以及在放射治疗过程中获取 CBCT 后合成 CT 以支持自适应治疗规划[48]。作者明确指出,心血管影像中目前还看不到这种跨模态数据转换的直接应用案例。
第三类用途是合成对比增强:在非增强扫描上由网络"加"出对比剂增强效果。当前文献不多,但作者认为这条方向对临床应用有前景——对造影剂过敏的患者、或者希望进一步降低造影剂剂量/浓度的患者都可以受益。Santini 等人[49] 在心脏 CT 上展示了一条可行的合成对比增强路径:对合成的左心室做分割时,Dice 分数达到 0.88 ± 0.03,体积百分比误差为 9.1 ± 6.2%。不过作者也提醒了局限:该研究只用了小数据集,且只用了心脏腔室长轴视图的二维表示,没有给出真正的三维信息。
预测
作者把"预测"作为生成之外的另一类典型 AI 任务:算法可以用于疾病的早期预测,以便尽早启动预防性治疗;也可以用于估计未来对某种治疗的反应,从而支持针对单个患者的治疗选择。一个具体例子是基于临床变量、负荷试验变量和影像变量组合,预测主要不良心脏事件(MACE);这类预测依赖在一个多层模型中"发现"特征[6]。
Motwani 等人[50] 把 ML(具体是 boosted ensemble 算法)用于心脏 CT 上疑似冠心病患者的全因死亡预测,AUC 达到 0.79。van Rosendael 等人[51] 在 CT 数据上用同样的 boosted ensemble 思路(XGBoost)预测 >3 年随访期间的全因死亡和非致死性心梗风险,AUC 0.771。基于 MRI,Dawes 等人[52] 用主成分分析对肺动脉高压患者做生存预测建模,AUC 0.73。同样基于 MRI,Samad 等人[53] 用 SVM 分类器预测法洛四联症修复术后患者左室功能的恶化,对"任意恶化"的预测 AUC 达到 0.82。
作者指出,使用临床或影像衍生变量的 ML 方法通常会先做变量数目的缩减——输入变量越多,ML 越难训练、也越难达到高精度。降维技术有两类基本路线:特征消除(feature elimination)与特征提取(feature extraction)。前面提到的 XGBoost 即属特征消除方法,它会逐个测试输入变量对算法精度的影响并丢弃影响小的变量,使算法更高效、更易训练。特征提取则把多个旧变量组合成新变量,再丢掉对预测精度贡献低的旧变量和新变量。
AI 开发过程概览
对前文描述的所有 AI 应用来说,无论最终目标是给影像技师做一个辅助采集的工具,还是给放射科/心脏科医生做一个结果预测工具,AI 开发的流程都相当相似(Fig. 3.2)。但因为数据科学家和 AI 工程师可用的方法学不同,某些步骤在具体做法上仍有差异。
机器学习与深度学习的方法学大致可以分为三组:监督学习(supervised learning)、无监督学习(unsupervised learning)、以及强化学习(reinforcement learning)。
在监督学习中,系统在训练阶段知道"真值"(truth),并以预测值与真值之差(通过所谓的"损失函数" loss function 来量化)作为信号,迭代地改进预测。与数据相连的已知"真值"既可以是图像上的标注(annotation),也可以是与图像关联的标签(label)。标注指直接在图像上选择感兴趣区域(region of interest, ROI),常用于分割任务;选择方式可以从一个粗略的包围盒到对 ROI 的完整(人工)轮廓勾勒。标签则是把一段文字或一个数字与图像挂钩,标签本身不必落到图像上;它可以是一个诊断(例如图像中是否出现某种疾病),也可以是一个数字(例如图中异常的数量)。标签的强度又有两种区分:简单的二元(是/否)标签,和描述多种结局的多类(multi-class)标签。标注同理,可以是单个 ROI 对应单一属性,也可以是多个 ROI 各自具有不同的属性。在监督学习下,模型任务分为两类:分类(classification)预测离散类别,回归(regression)预测数值。
在无监督学习中,系统尝试去发现数据中隐藏的结构或变量之间的关联。此时训练数据由不带任何标签或标注的样本组成,变量之间的关联以"聚类"(cluster)的形式出现。聚类是把整个数据集分成若干组,使同一组内的样本尽可能相似、不同组之间的样本尽可能不同——这些聚类本身携带有信息量的模式。
"强化学习"(reinforcement learning)一词则是一个通称,指这样一类技术:系统通过直接与环境互动来尝试学习,以最大化某种"累积奖励"。作者强调,强化学习系统对环境行为没有任何先验知识,唯一的学习方式是试错。强化学习主要被用在自主系统上,因为它对环境的独立性高;在医学影像中也有角色——可以构建"边干边学"的系统。这种系统对数据没有预先定义的标签或标注,而是由用户在使用过程中提供;当模型积累了足够输入并达到一定置信度后,模型就开始向用户输出预测,用户则通过纠正错误来继续训练和改进模型。强化学习用于临床的主要挑战在于:模型持续学习、行为随时间变化,这妨碍了法律层面的接受度和质量保证。训练过程依赖于用户的经验——如果经验不足的用户输入了错误答案,系统会把这个错误输入当作正确学到,最终模型就会把自己的输出调整得迎合这种错误输入。
由于整个 AI 流程每一步的复杂性,作者强调几乎在每一步都应由医疗专业人员、数据科学家和深度学习专家组成的多学科小组协同合作,才能得到最优结果。
临床问题
作者把"临床问题"作为 AI 项目的起点。这个问题可能源于人类观察者无法从影像中提取所需信息,可能源于手工处理影像的过程耗时,也可能源于人类观察者无法对未来的事件或疾病进展给出预测——原因是数据量太大,一个人无法看完所有数据。所有这些都引向了用 AI 来支持决策的探索。在明确了所面对的临床问题之后,才能进一步进入 AI 开发流程中的多个后续步骤。
数据采集
AI 算法开发的第二步是采集一个足够大、质量足够高、能代表目标人群且尽量少偏倚(bias)的数据集。数据集的质量是 AI 开发中最重要的因素之一,也是最常见的限制因素。和传统图像处理一样,"垃圾进、垃圾出"(garbage in is garbage out)的格言在 AI 场景下同样成立;数据的一致性质量与标准化都至关重要。
采集数据时,要基于临床问题来采集:数据要能代表最终工具的目标人群,按不同终点划分的子集要各自占有足够大的比例,并且要尽量少偏倚。偏倚的挑战不仅来自明显的人群特征(性别、年龄、种族),还来自数据来源本身。医学影像尤其困难,因为患者的解剖变异大。为了训练,数据集需要包含尽量多的样本。当数据量受限时,常用的折中方式是从三维体数据中抽取"块"(patch)或二维切片(这些切片常常彼此非常相似),或在训练阶段做数据增广(data augmentation)。
作者指出,本章引用的许多出版物只报告了在单一机构数据集上训练、测试和验证的 AI 系统结果。但放射学图像的外观对成像设备依赖很强——在本地设备和采集/重建参数上训练出来的模型,引入了与该设备相关的偏倚,因此当数据来自另一家机构、设备和参数都不同时,性能就难以保证。Biondetti 等人[54] 证明 CNN 可以学会区分扫描器厂商,并且这种偏倚对分类与分割两类任务的模型性能都有显著影响。
数据标注或打标签
数据本身之外,与数据相连的标注或标签(label)的质量也极端重要。监督学习方法的训练、测试与验证阶段都重度依赖这些数据标注与标签的质量。由此引出关于标注与标签的一系列问题。
第一个问题是:之前是否已经积累了可用的标签?以前的标签可能来自临床数据库,或者来自临床试验/研究项目的报告;但这样又会引出下一个问题——这些标签能否以一种可用、可读的格式从临床或研究系统中提取出来。因此常常需要专门地(重新)给数据打标签:要么以前根本没有标签,要么标签因为技术或实践原因不可用。标注或打标签——在很多情况下——是由一位或多位人类专家完成的,并以这些专家的共识或多数投票的形式给出。这又引出了下一个问题:之前积累的标签是否适合当前任务?这个问题不仅关系到标签的强度(strength),还关系到多个标注者以不同方法学或经验给出的标签之间的一致性。ML 算法需要学到"一种"统一的标注方法;标签不一致带来的偏倚会让网络精度变差。类似地,在验证和测试阶段,标签也需要保持一致——网络会按某种方法去给数据标注,如果验证数据的标签不一致,错配就会反过来拉低精度。一旦有了带标签/标注的数据集,还需要考虑不同标签之间的类别平衡(class balance)。
在某些情况下,除了人类观察者的标签之外,还能从其它途径获得关于"真值"的额外信息——例如对恶性预测而言的病理结果——这些信息可以用来强化人所给的标签。
训练与测试
采集到的数据集通常会被划分成训练集(train set)和测试集(test set),常见比例为 80% 和 20%。划分方式有多种。第一种是随机划分(random split);但只有当数据集足够大、足以避免训练集或测试集出现不希望的偏倚时,随机划分才够用。因此也可以采用"平衡划分"(balanced split)——让某些因素在训练集与测试集之间保持平衡,例如人群因素(年龄/性别)或结局因素(训练集和测试集中结局的分布相同)。
由于医疗数据本身的性质,数据集中的类别(class)常常严重不平衡——通常偏向健康预测、或者反过来偏向疾病预测。这会让算法预测向多数类倾斜,从而在少数类(通常是患病类)上精度很差。作者提醒:即便如此,一些常用的量化指标在这种算法上仍会显示高精度,因为如果少数类在测试集中也是少数,预测少数类出错所带来的误差仍然很小。常见的应对是在训练阶段对少数类做"过采样"(oversampling)、对多数类做"欠采样"(undersampling),以缓解类别不平衡问题。
训练本身是一个迭代过程:把训练数据集送给 AI 模型,模型给出预测;在监督学习情形下,预测结果与真值标签按小批量(small batches)比较,所得到的差(损失)被用来调整模型权重,使每个批量过后的损失下降。每完成一次对全部训练数据的迭代(称为一个 epoch),都用一部分未参与训练的数据做一次单独的验证(validation)。在完整数据集上跑过 n 次迭代(即 n 个 epoch)之后,训练完成,得到一个训练好的模型。
由此,作者强调:在监督学习下,AI 模型"学习"的方式,就是通过所提供的输入/输出对去计算预测错的程度。
许多深度学习网络在训练时非常"数据饥渴"(data hungry),需要大量数据。训练阶段可用的样本数可以通过所谓的数据增广(data augmentation)来扩展。在影像数据的情形下,这意味着除了原始图像外,还要向网络喂入做了微小调整后的图像,让网络接触到更高多样性的、不同呈现形式的图像。常用的增广调整有图像翻转、旋转、缩放与拉伸等。这种数据增广通常在训练过程中实时进行(on the fly)。
外部验证
有时会做"内部验证"(internal validation)——把同一数据集中模型从未见过的一部分(例如按 60%/20%/20% 划分出的那 20%)拿出来给模型。但更好的做法是引入一个真正独立的验证集,即从一家或多家不同机构获得的外部验证集(external validation set)。这种外部验证集可以是为此专门收集的,但更常见的做法是使用公开数据集——它们被放在开放的代码仓库上,或曾是某次数据科学挑战赛发布的数据集。使用这种数据集还有一个好处:可以让不同算法在同一个数据集上的表现直接互比。
多阶段流水线
当前 AI 软件的能力还常常不足以让单个神经网络解决医学影像与临床工作流中那些复杂的问题。因此,实际系统使用的是多个神经网络串联组成的多阶段流水线(multistage pipeline),每个网络负责一个特定任务。一个例子就是本章"预测"小节里已经讨论过的变量约简。更复杂的任务——例如定位气胸——会先用神经网络识别并分割出肺,再训练另一个神经网络对已分割的图像做气胸分类。开发这类流水线时,流水线通常按临床工作流来组织:当读者看一张胸片时,直觉上会先识别肺、再去检查异常;AI 没有"直觉",所以必须由人替它安排好这些步骤。
结论
作者指出:从文献中越来越多的成功实现来看,AI 在心血管影像的多个目标上都展现了巨大的潜力[55]。然而,已发表的研究大多仍属于描述性质,其广泛落地仍受制于数据的低可得性和低可复现性。因此,在 AI 开发过程中,对各步骤都应给予细致关注,以避免网络的次优训练。开发 AI 工具仍然面临许多挑战,例如训练数据存在偏倚或标签错误、训练与验证不充分等等。
与此同时,AI 在过去十年也取得了显著进展,已经在心血管影像的采集与诊断两端都产生了影响。这表明 AI 有潜力提升医疗质量、减轻医疗专业人员与患者的负担。
本章个人批注
本章作为开篇第二章"揭开心胸影像人工智能技术的神秘面纱"的延续,把话题从"AI 是什么、怎么训练"推进到"具体怎么开发一个医学影像 AI 项目"。结构上承接上一章对 GAN 的介绍,把 GAN 在心血管影像里的三类用途(数据扩增、跨模态合成、合成对比增强)逐一展开;这三条路径都还比较早期——尤其是跨模态合成在心血管影像中目前还没有直接应用——这提醒读者,GAN 在心血管场景里的潜力还远未释放。但作者也用一个 2D 长轴视图、Dice 0.88 的具体数字告诉我们:要谨慎对待单点结果,毕竟样本量与方法学都很受限。预测那一节列举的 Motwani、van Rosendael、Dawes、Samad 等多项 AUC 集中在 0.73–0.82 区间,是一个值得记住的经验范围:当前心血管影像预测模型的判别力大致就在这个水平。再后面的开发流程部分把"临床问题 → 数据采集 → 标注 → 训练测试 → 外部验证 → 多阶段流水线"作为标准流程呈现,其中 Biondetti 关于 CNN 能学会"分辨扫描器厂商"的结论让我重新意识到:模型的可迁移性并不仅是数据量的问题,更是设备/协议层面的系统性问题。这一点在第 4 章"数据准备"中会进一步展开,作者已经在这一章末尾埋好了伏笔。
与上下章的衔接(一段话)
本章在全书结构中处于"原理"与"实践"之间的过渡位:第 1 章从历史与全景角度引入 AI,第 2 章交代了机器学习与深度学习的基本概念(学习范式、损失函数、CNN 等),本章则把读者从"理解算法"带到"开发一个医学影像 AI 项目",给出标准的端到端流程图(Fig. 3.2:临床问题 → 数据采集 → 数据标注 → 训练 → 测试 → 外部验证),并对其中几个关键难点——数据偏倚、标签一致性、外部验证、多阶段流水线——做了专门展开。下一章(第 4 章"数据准备")将沿着本章末尾的伏笔,把焦点从"开发流程"再下沉一层,专门讨论如何为 AI 准备高质量的数据:伦理审批、访问、查询、去标识化、传输、质量控制、结构化与打标签——也就是本章中"Data Collection"与"Data Annotation or Labeling"两节所承诺但尚未展开的全部细节。这一承接关系是清楚的:第 3 章告诉读者"流程应该长什么样",第 4 章则给出"流程里数据这一步究竟怎么走"。