第6章:如何构建用于影像应用的人工智能算法(How to Build Artificial Intelligence Algorithms for Imaging Applications)
作者
- Lewis Hahn, MD(通讯作者)— Division of Cardiothoracic Imaging, Department of Radiology, UC San Diego School of Medicine. 胸心血管放射学 + AI 临床应用。
- Evan Masutani, CPhil — Department of Bioengineering, UC San Diego. 工程学背景。
- Kyle Hasenstab, PhD — Department of Mathematics and Statistics, San Diego State University. 统计学背景。
本章是 Part I 的"AI 算法工程实践"——Ch 1-5 讲了历史、概念、数据准备、基础设施,本章把它们落到"具体怎么写代码、选架构、调超参"的层面。读者应有 Ch 1-5 基础,并准备 PyTorch/TensorFlow 实践经验。
内容概述
本章给出构建影像 AI 算法的 5 步法:① 确定任务类型(分类 / 定位 / 分割 / 重建 / 后处理)→ ② 选择算法(CNN 基础组件 + 任务专属架构)→ ③ 选择损失函数 → ④ 设置训练参数(学习率、优化器、batch size、增强)→ ⑤ 训练 + 超参数调优 + 高级技巧(集成、级联、多任务、空间变换网络)。核心论点:(1) CNN 是当前几乎所有胸心血管影像 AI 的标准架构——卷积 + 池化 + 全连接 + 跳跃连接的组合可应对几乎所有任务;(2) 没有"最好"的架构——只有"对任务和数据集合适"的架构。LeNet/AlexNet/ResNet/DenseNet/U-Net/YOLO/Faster R-CNN/Mask R-CNN 各有适用场景;(3) 超参数调优比想象的重要——学习率、batch size、增强策略对最终性能的影响常超过模型选择本身;(4) 预训练 + 迁移学习是数据有限时的关键——ImageNet 预训练的特征对医学影像仍有价值(即使颜色通道不同);(5) 高级技巧(集成、级联、多任务、STN)可显著提升性能但有计算与数据代价。本章是 Ch 11(临床工作流)、Ch 14-21(各种任务的具体实现)的工程基础。
核心方程与概念
0. 几个核心数学
- ReLU 激活函数:\(f(x) = \max(0, x)\)。当前 CNN 的默认激活。
- 二元交叉熵(BCE):
\[ L_{\text{BCE}}(y, p) = -y \log p - (1 - y) \log(1 - p) \]
- 多类交叉熵(CCE)(\(N\) 类,真值 one-hot \(c_k\)):
\[ L_{\text{CCE}} = -\sum_{k=1}^{N} c_k \log p_k \]
- L2 损失(MSE):
\[ L_{\text{MSE}} = \frac{1}{N} \sum_{k=1}^{N} (y_k - \hat{y}_k)^2 \]
- L1 损失(MAE):
\[ L_{\text{MAE}} = \frac{1}{N} \sum_{k=1}^{N} |y_k - \hat{y}_k| \]
- Dice 损失(分割):
\[ L_{\text{Dice}} = 1 - \frac{2\,|A \cap B| + \varepsilon}{|A| + |B|} \](\(\varepsilon\) 为防止除零的小常数)
- SSIM(结构相似性)(重建任务):
\[ \mathrm{SSIM}(x, y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)} \]\(C_1, C_2\) 由动态范围决定。SSIM 比 MSE 更接近人眼对图像质量的感知。
- 通用近似定理:一个足够宽的单隐层神经网络可以以任意精度近似任何连续函数——这是 DL 的理论根基。
1. CNN 基础组件
- 节点 / 神经元:计算 \(f(\sum_i w_i x_i + b)\),\(f\) 为激活(ReLU 最常用)。
- 卷积层:多个卷积核(filter/kernels,3×3×1 或 3×3×3)滑过输入,输出激活图(activation map / feature map)。关键性质:权值共享(一个核在不同位置用同一组参数)→ 远少于全连接层的参数量。
- 池化层(Max / Average Pooling):取局部最大值或平均值,降低特征图尺寸,保留最强响应。Max pooling 几乎总是优于 average pooling。
- 全连接层:每个输入连接到每个输出,参数密集——通常只在分类头/输出层使用。
- 转置卷积(Transposed Convolution):上采样层,等价于"补零 + 普通卷积"。在分割/重建中常用。
- Dropout:训练时随机关闭部分神经元(概率 \(p\))→ 强制冗余,抑制过拟合。
- Batch Normalization:在卷积层之间归一化输入 → 缓解梯度消失/爆炸,加速收敛。
2. 5 类影像任务(图 6.1)
- 分类(Classification):图像 → 类标签(如"含/不含肺结节"、"有/无肺水肿")。降维:2D/3D 图像 → 1D 类概率向量。LeNet-5、AlexNet、VGG、GoogLeNet、ResNet、DenseNet、SENet 是经典架构。
- 定位(Localization):图像 → 边界框(bounding box)。回归任务。代表:R-CNN / Fast R-CNN / Faster R-CNN(两阶段,先 region proposal 再分类)、YOLO(单阶段,速度快)。
- 分割(Segmentation):图像 → 逐像素/体素分类。全卷积网络(FCN, Long 2015) 是奠基;U-Net(Ronneberger 2015) 是医学影像的标配——对称的 encoder-decoder + 跳跃连接(counter vanishing gradient)。Mask R-CNN 加分支同时做检测和分割。
- 重建(Reconstruction):原始数据(k-space、sinogram)→ 图像。ADMM-CSNet(Yang 2020)把 ADMM 算法展开为深度网络,应用于压缩感知 MRI。
- 后处理(Postprocessing):图像 → 增强/去噪/超分辨率。常用 U-Net + 残差连接(Chen 2017 低剂量 CT 去噪;Jin 2017 通用 inverse problem 求解器;Masutani 心肌 MRI 超分辨率)。
3. 损失函数选择
- 分类:CCE(多类)/ BCE(二分类)。
- 定位:分类损失 + 回归损失(Faster R-CNN 用 CCE + smooth L1)。
- 分割:BCE 或 Dice 损失(处理类别不平衡);可组合 Dice + BCE。
- 重建:MSE / L1 / SSIM 组合。
- 可微性是底线——backprop 需要损失对参数可微。
4. 训练关键参数
- 学习率 \(\eta\):太小收敛慢、可能局部最优;太大不稳定发散。跨数量级扫描(如 \(10^{-1}, 10^{-2}, \ldots, 10^{-5}\))是经验法则。
- 优化器:SGD(基础)、AdaGrad、RMSProp、Adam(当前默认)。
- Batch size:受 GPU 内存限制;越大越好(更稳定),但有内存上限。
- 数据增强:亮度/对比度、模糊、翻转、平移、旋转、剪切、裁剪、缩放。旋转的肺结节仍是肺结节——增强是免费的正则化。
5. 超参数调优
- 网格搜索(Grid Search):所有组合都试。对小搜索空间合适,搜索空间大时不可行。
- 随机搜索(Randomized Search):从范围随机采样,比网格搜索在大搜索空间更高效(Bergstra 2012 经典结论)。
- 贝叶斯优化(Bayesian Optimization):用 surrogate model(如 Gaussian Process)建模 loss vs. 超参数,acquisition function 选下一组超参数。代表实现:Scikit-Optimize、Optuna、Hyperopt。
- 推荐顺序:先随机搜索→找到大致范围→再贝叶斯优化。
6. 高级技巧
- 集成网络(Ensemble):同时训练多个网络,投票/平均输出。代价:训练时间和算力翻倍。例:Bahrami 2019 STEMI-NET = VGG19 + BiLSTM 集成用于心肌反转时间选择,准确率 92.1%(单一 VGG 83.9%)。
- 级联网络(Cascaded):把复杂任务拆成多阶段——网络 A 检测候选 → 裁剪 → 网络 B 分类。例:肺结节检测(先定位,再分类)、心脏 MRI 平面自动定位(Blansit 2019 拆成 3 个子网络)。
- 多任务网络(Multitask):一个网络同时做多个相关任务 → 共享特征,互相提升。
- 空间变换网络(STN, de Vos 2019):可学习仿射/可变形配准 → 让模型对患者位置/扫描方向鲁棒。
- 统一建议:架构复杂度受算力和数据量限制;过度复杂化反而性能下降。
7. 预训练 vs 从头训练
- 预训练 + 迁移学习:在大型数据集(如 ImageNet 120 万张 1000 类)上预训练的网络,迁移到医学任务。
- 关键洞察:CNN 前几层学的是通用底层特征(边缘、纹理、颜色梯度),对任何视觉任务都有价值。即使 ImageNet 是彩色自然图像,预训练权重对 CT/MRI 的灰度医学图像仍有帮助。
- 首选策略:从相关医学任务的预训练模型开始 → 优于从 ImageNet 通用预训练 → 但当无相关模型时,ImageNet 预训练仍是稳妥起点。
8. 数据准备与切分的"陷阱"
- 同一患者不同切片不能跨训练/测试——否则数据泄露导致性能虚高。
- 训练数据量下限:简单任务几百例,复杂任务几千例,罕见病分割需要外部数据增强。
- 标签成本:心脏腔室分割需要精细手动标注 vs 心脏疾病二分类可能从临床笔记直接提取(成本差几个数量级)。
9. 软件栈与硬件
- PyTorch(Facebook/Fair)→ 动态计算图,研究首选。
- TensorFlow + Keras(Google)→ 静态图,部署生态完整,TPU 支持。
- Caffe → 早期医学影像 AI 主流,已被 Caffe2 → PyTorch 取代。
- Keras → 高级 API,适合新手。TensorFlow 2 已整合。
- MONAI(Medical Open Network for AI)→ 医学影像专用 PyTorch 扩展(专门的数据增强、损失、3D 处理)——本章未明确推荐,但实际是 2022 年医学影像 DL 的事实标准。
- 硬件:2D CNN 浅层 CPU 可行;3D CNN(如 3D U-Net)需要 ≥11 GB GPU(NVIDIA GTX 1080 Ti 起,A100/V100 理想)。
- 云 vs 本地:短期/小规模 → 云(AWS/GCP/Azure)成本更低;长期/大规模 → 自建工作站或数据中心。云有网络风险和成本不确定性。
关键结论
- CNN 是医学影像 AI 的事实标准——5 类任务(分类/定位/分割/重建/后处理)都有成熟的 CNN 架构对应。
- "架构选择"是工程问题,不是研究问题——选择 AlexNet/ResNet/U-Net 之一几乎总是比"发明新架构"更稳健。
- 损失函数 + 数据增强 + 超参数对最终性能的影响通常超过架构选择。同一 U-Net 配不同 Dice loss 性能可差 5-10%。
- 学习率是单一最重要的超参数——跨数量级扫描是必须做的。
- 数据准备是真正的"半边天"——同一个患者的不同切片混到训练/测试集 = 数据泄露 = 性能虚高。
- 预训练 + 迁移学习显著降低数据需求——在 100-1000 例的小数据集上是关键技巧。
- 集成 / 级联 / 多任务 / STN 是性能上限提升的"进阶武器",但代价是工程复杂度 + 算力。
- PyTorch 与 TensorFlow 平分秋色——研究偏向 PyTorch,部署偏向 TensorFlow。MONAI 是 2022 年医学影像 PyTorch 用户的必装。
- 硬件是工程现实——没有 11 GB GPU 做 3D U-Net 几乎不现实;这是项目预算的关键。
- 从 ImageNet 预训练到医学任务——前几层学到的"通用特征"跨域有效——这解释了为何小数据医学影像项目也能成功。
挑战和开放性问题
- 3D CNN 的内存墙——一个 3D U-Net 训练一个 256³ patch 就需要 11 GB GPU 显存;训练完整 CT 体积(512³)需要分布式训练。
- 过拟合与数据稀缺——小数据集(<500 例)即使有强增强也容易过拟合;自监督预训练(SimCLR, MoCo, MAE)正在缓解但仍未成为标准做法。
- 黑箱可解释性的工程化——Grad-CAM 等热图是"伪可解释"——更严谨的 attribution 方法(Integrated Gradients, SHAP)工程复杂度高。
- "新架构" vs "调优旧架构"的边际收益——经验上调优 ResNet50 + 强增强 > 换 Swin Transformer。但 Swin 在多中心、多模态数据上开始反超。
- 超参数优化的算力消耗——贝叶斯优化本身可能消耗模型训练的 10-50%。预算紧张的小团队只能用粗网格。
- 预训练模型的领域迁移——ImageNet(自然图像)→ CT/MR 灰度医学图像 → 跨域 gap 仍有;自监督预训练 + 大量未标注医学图像是新兴方向(Ch 8 会涉及)。
- 数据增强的"破坏性"——某些增强(如垂直翻转)会破坏解剖意义(左右心不会上下颠倒)。领域知识决定哪些增强可用。
- 多任务学习的负迁移——任务相关性弱时,多任务学习可能反而降低主任务性能。任务关系建模(如 GradNorm)仍未成熟。
- 集成网络的部署成本——训练 N 个网络容易,部署 N 个网络困难(延迟、内存、版本管理)。
- "AI 模型市场"的版本兼容——医院买了一个 vendor 的模型,3 年后 vendor 升级新版本 → 性能可能变化 → 临床后果如何归因?监管挑战巨大。
个人反思与批判性分析
本章作为"AI 算法工程实践"非常实用、可操作,但与 Ch 2 一样仍有当代实践的滞后问题:
优势: - 5 步法清晰:任务类型 → 架构 → 损失 → 训练参数 → 调优/高级技巧。 - 损失函数表(BCE, CCE, MSE, MAE, Dice, SSIM)——任务到损失函数的映射明确。 - 数据准备的"陷阱"专门一节(§6.5),强调"同一患者切片不能跨 train/test"——是常见错误的好提醒。 - 软件栈对比(PyTorch vs TensorFlow vs Keras)实用、给具体推荐。 - 高级技巧(集成、级联、多任务、STN)从单点改进到系统级提升——给读者进阶方向。 - 引用充分(40 篇),从经典 LeNet 1998 到 2020 临床应用。
批判与补足:
- 缺 2020 年后的核心架构——Vision Transformer (ViT, 2020)、Swin Transformer (2021)、Segment Anything (2023)、DINOv2 (2023) 完全没提。2022 年以后医学影像 AI 论文中 Transformer 占比快速上升——本章停留在 2018 前的"CNN 一统天下"叙事。
- MONAI 完全没提——这是 2022 年医学影像 PyTorch 用户必备库(专门优化 3D 处理、医学数据 IO、领域特定的损失和增强)。不提是显著的实践脱节。
- 缺自监督预训练的现代实践——SimCLR (2020), MoCo (2020), MAE (2021), DINO (2021) 在医学影像上的应用(如 Chen 2019 的 Models Genesis, Azizi 2021 的 Contrastive 自监督)——对无标注数据极有价值。
- 缺"基础模型"(Foundation Model)思路——2022 年后 Med-PaLM, RadFM, BiomedCLIP 等医学多模态基础模型正在改变游戏规则。本章的"从 ImageNet 预训练"叙述是2020 年前的实践。
- "学习率扫描"的指导不够细——只说"跨数量级扫描",但没给具体调度策略(cosine decay, step decay, warmup, OneCycle)。现代实践几乎都是 SGD/Adam + cosine decay 组合。
- "集成网络"的工程权衡讲得偏少——只说"训练时间翻倍",但没说推理延迟翻倍——这在临床实时场景(<1 秒响应)是不可接受的。
- Dice 损失在类别极不平衡时(罕见病)的表现——Dice 在"小目标"分割上比 BCE 优秀,但梯度的方差大,需要更长训练或更小学习率。本章未提。
- 缺"模型压缩"(model compression)——量化(8-bit, 4-bit)、剪枝(pruning)、知识蒸馏(knowledge distillation)——这些是把 100MB 模型压缩到 5MB 的关键技术,对临床部署至关重要。
- 缺"模型不确定性估计"——MC Dropout、Deep Ensemble、Bayesian NN——对临床 AI 的"知道何时不知道"是关键。预测错误比正确更有价值。
- "GPU 至少 11 GB"的建议在 2022 年偏保守——3D U-Net / 3D Transformer 推荐 24 GB(A5000/A100);预算紧张的初创公司可考虑 NVIDIA L4(24 GB, 70W TDP)。
给作者的问题: - Vision Transformer(ViT / Swin)在医学影像中实际是否优于 CNN?经验上小型数据集上 CNN 更稳,大型数据集上 ViT 更好——你的阈值在哪里? - 自监督预训练(SimCLR, MAE)在医学影像上真的有效吗?ImageNet 上 SSL 的成功能否直接迁移到小数据医学影像? - 你的工程经验:集成 N=3 网络的边际性能提升是多少?值得 3x 训练时间吗? - 模型可解释性在临床落地中是真正关键还是形式要求?如果 FDA 不强制,你还会做可解释性吗? - 持续学习(continual learning)模型在医院环境中实际能工作吗?模型漂移(model drift) 多频繁需要重新训练?
值得复现的实践: - 用 PyTorch 在小型胸部 X 线数据集(如 CheXpert 子集)上实现 ResNet50 分类,对比 BCE vs Focal Loss 的效果。 - 用 MONAI 训练一个 3D U-Net 做心脏 MR 左心室分割,对比 DiceCE、DiceFocal、Tversky 三种损失。 - 实现 Grid Search vs Random Search vs Bayesian Optimization 的超参数搜索,对比收敛速度。 - 用 Grad-CAM 可视化 ResNet 的注意力区域,验证"网络是否学到有意义的特征"。 - 用 8-bit 量化(PyTorch FX quantization)压缩训练好的 ResNet50,测量推理延迟和准确率变化。
重要参考文献
[X1] LeCun Y, Bottou L, Bengio Y, Haffner P. Gradient-based learning applied to document recognition. Proc IEEE. 1998;86(11):2278–324. DOI: 10.1109/5.726791. [X2] Krizhevsky A, Sutskever I, Hinton GE. ImageNet classification with deep convolutional neural networks. NeurIPS. 2012;25:1097–105. [X3] He K, Zhang X, Ren S, Sun J. Deep residual learning for image recognition. CVPR. 2016:770–8. DOI: 10.1109/CVPR.2016.90. [X4] Ronneberger O, Fischer P, Brox T. U-Net: convolutional networks for biomedical image segmentation. MICCAI. 2015. p. 234–41. DOI: 10.1007/978-3-319-24574-4_28. [X5] Long J, Shelhamer E, Darrell T. Fully convolutional networks for semantic segmentation. CVPR. 2015. DOI: 10.1109/CVPR.2015.7298965. [X6] Shelhamer E, Long J, Darrell T. Fully convolutional networks for semantic segmentation. IEEE TPAMI. 2017;39(4):640–51. DOI: 10.1109/TPAMI.2016.2572683. [X7] Redmon J, Divvala S, Girshick R, Farhadi A. You only look once: unified, real-time object detection. CVPR. 2016:779–88. DOI: 10.1109/CVPR.2016.91. [X8] Ren S, He K, Girshick R, Sun J. Faster R-CNN: towards real-time object detection with region proposal networks. NeurIPS. 2015;28:91–9. [X9] He K, Gkioxari G, Dollár P, Girshick R. Mask R-CNN. ICCV. 2017:2980–8. DOI: 10.1109/ICCV.2017.322. [X10] Chen H, Zhang Y, Kalra MK, et al. Low-dose CT with a residual encoder-decoder convolutional neural network. IEEE TMI. 2017;36(12):2524–35. DOI: 10.1109/TMI.2017.2715284. [X11] de Vos BD, Berendsen FF, Viergever MA, Sokooti H, Staring M, Išgum I. A deep learning framework for unsupervised affine and deformable image registration. Med Image Anal. 2019;52:128–43. DOI: 10.1016/j.media.2018.11.010. [X12] Tang Y-X, Tang Y-B, Peng Y, et al. Automated abnormality classification of chest radiographs using deep convolutional neural networks. NPJ Digit Med. 2020;3(1):1–8. DOI: 10.1038/s41746-020-0273-z.