☰
医学图像对抗攻防调研:CT肺结节模型的攻击与防御实战
2026/10/20 2:33:11 网站建设 项目流程

医学图像领域这两年最热闹也最容易被低估的方向,其实是安全性问题。我所在的某医疗AI项目组,一直在做肺结节CT分类相关的模型,模型精度做到90%以上之后,大家开始琢磨一个更让人后背发凉的问题:如果输入图像被人动过手脚,模型还能不能给出正确诊断?带着这个疑问,我们做了一轮系统的“医学图像领域攻击与防御调研”,范围覆盖X光、CT、MRI、病理切片等常用模态,也顺手把经典对抗攻击算法、防御策略、评估指标和工程复现的坑都过了一遍。这篇文章就是这次调研的项目总结,适合正在做医学图像深度学习模型、或者对AI安全方向感兴趣的开发者参考,内容以实际复现和实验为主线,尽量把每一步的做法和踩坑细节讲清楚。

1. 医学图像对抗攻防调研的核心思路与目标划定

1.1 为什么医学图像领域的攻击问题值得单独调研

很多人第一反应是:对抗攻击不是计算机视觉通用领域已经研究很久了吗,医学图像有什么特别的?单独拿出来调研,根本原因在于医学图像和自然图像在“攻击后果”和“数据特征”上都有显著差异。

自然图像分类错了,最多是推荐不准、识图失败。医学图像如果被攻击导致误诊,直接关联的是漏诊、错诊甚至错误手术方案。比如一个肺结节分类模型,原始CT图像中有一个边缘模糊的恶性结节,攻击者仅在图像局部加上人眼几乎不可察觉的扰动,模型就可能把“恶性”判成“良性”,这种后果在临床上完全不可接受。所以,调研的第一层目标,就是要把“攻击在医学场景下的真实危害模型”建立起来:攻击者是谁、攻击入口在哪、造成什么后果。

医学图像数据本身的特殊性也决定了通用攻击算法不能直接照搬。CT图像的像素值范围通常在-1024到3071之间,MRI是归一化后的灰度值,病理切片是超高分辨率的大视野WSI,这些数据的统计特性、预处理流程和神经网络输入格式都和ImageNet照片差别很大。比如通用FGSM攻击在自然图像上效果很好,但直接搬到CT图像上,如果不处理好窗宽窗位和归一化方式,扰动可能根本不是落在模型实际使用的数值范围内,攻击失败或者防御评估失真都很常见。

1.2 调研的范围边界与目标设定

这次调研,我们把范围定在三个层面:

第一是攻击面梳理。覆盖数字域白盒攻击、黑盒攻击、物理域攻击以及针对训练流程的数据投毒和后门攻击,重点是搞清楚每类攻击在医学图像上是否可行、代价多大、效果如何。

第二是防御手段验证。对抗训练、输入预处理、对抗样本检测、模型鲁棒性增强等都要在医学数据集上实测,不能光看论文结论。

第三是评估体系搭建。攻防实验如果没有统一的评估指标和协议,结果很难对比。我们参照通用对抗鲁棒性评估方式,结合医学任务重新定义了评估流程,包括扰动大小约束、诊断准确率变化、攻击成功率等指标。

目标设定上,我们不追求做出一个绝对免疫攻击的“金刚模型”,因为这个目标在目前技术条件下不现实。更务实的指标是:在给定扰动强度范围内(比如像素值扰动不超过某个阈值),把攻击成功率压到可接受水平,同时保持正常样本的诊断精度不下跌。这也是临床落地更关心的平衡点。

2. 医学图像攻击威胁全景:四类主要攻击路径拆解

2.1 数字域白盒攻击:FGSM、PGD与C&W在医学图像上的表现

白盒攻击假设攻击者完全掌握模型结构和参数,通过反向传播计算梯度,在输入图像上构造最小扰动。我们在模拟项目X的肺结节分类模型上复现了三种经典白盒方法。

FGSM(Fast Gradient Sign Method)是最基础的单步攻击。实现非常简单:

import torch def fgsm_attack(model, image, label, epsilon, criterion): image.requires_grad = True output = model(image) loss = criterion(output, label) model.zero_grad() loss.backward() # 提取梯度符号并乘以扰动强度 sign_grad = image.grad.sign() perturbed_image = image + epsilon * sign_grad return perturbed_image

在CT图像上,epsilon的标定要特别小心。CT图像标准化之后,像素值一般落在0到1之间,epsilon取0.01就已经能产生明显扰动;如果直接在原始HU值空间攻击,epsilon需要动态缩放。我们实验发现,相同epsilon下FGSM在CT上的攻击成功率普遍比在自然图像上低,主要原因在于医学图像的纹理结构复杂、梯度噪声大,单步攻击容易陷入局部无效方向。

PGD(Projected Gradient Descent)是FGSM的迭代加强版,每步都做投影裁剪,保证扰动不越过约束边界。PGD在白盒条件下攻击成功率几乎能打到100%,但是它生成的对抗样本“过于专业”,一旦换一个模型结构,迁移性反而差。这一点在医学图像上体现得比自然图像更明显,因为不同医学模型的特征提取器差异很大,有的基于2D切片,有的直接吃3D体积,迁移攻击路径完全不一样。

C&W攻击是优化类方法的代表,它不是简单做梯度上升,而是把“扰动最小化”和“攻击成功”写成联合优化目标。C&W生成的扰动极小,视觉不可察觉性最好,但计算成本极高。我们在一批三维CT上跑C&W,单样本耗时是PGD的几十倍,所以它更适合做小规模安全性测试,不适合批量生产对抗样本。

2.2 黑盒攻击:查询攻击与迁移攻击在医学诊断场景的可行性

黑盒场景更贴近真实威胁:攻击者拿不到模型参数,只能通过查询接口获取预测结果。我们在调研中重点验证了两条路径。

查询攻击使用类似NES(Natural Evolution Strategies)的零阶优化方法,通过多次查询输入扰动方向来估计梯度。这个方法在概念上可行,但医学AI系统往往有身份验证、接口频率限制、日志审计等机制,且一次诊断API调用的成本很高,实际攻击者很难承受大规模查询。我们实测对一个3D CT分类模型实施简单黑盒查询攻击,大约需要数千次查询才能稳定攻击成功,这个成本在真实业务场景里基本不划算。

迁移攻击则是攻击者在本地训练代理模型,用白盒方法生成对抗样本,再投放到目标模型上。这条路径在医学场景中威胁更大,因为公开的医学预训练模型和开源数据集并不少,攻击者完全可以构建一个结构相近的代理模型。我们实验发现,ResNet系列和DenseNet系列之间的迁移成功率明显高于跨架构迁移,比如用ResNet代理模型生成的PGD样本,攻击DenseNet目标模型的成功率约30%到40%,但攻击同架构ResNet的成功率能到60%以上。这对医学AI厂商是个警示:如果模型架构属于常见公开结构,被迁移攻击的风险会高很多。

2.3 物理域攻击与数据投毒:面向真实医疗流程的安全威胁

物理域攻击听起来很科幻,但在医学场景其实有现实入口。已有多项研究展示过,在X光设备上放置特定形状的物理物体,可以在成像过程中引入干扰,或者直接在DICOM文件层面篡改像素数据再来一次“物理投毒”。这类攻击的隐蔽性更强,因为放射科医生肉眼看到图像可能完全正常,但模型输出已经被操纵。不过物理域攻击的工程门槛很高,需要进入医院物理环境或接触影像归档系统,所以威胁模型上更多是定向攻击而非批量攻击。

数据投毒和后门攻击则针对训练流程。攻击者如果能向训练数据集中混入带特定触发图案的样本,模型就会学会一个后门:正常图像诊断正常,一旦出现触发图案,模型强制输出攻击者指定结果。我们在模拟项目X上做了一个小实验,向训练集中混入1%到3%的带触发图案样本,并重新训练模型。结果显示,即使触发图案肉眼几乎不可见,后门成功率也能达到85%以上,而正常诊断精度几乎不受影响。这说明数据投毒是医学AI供应链中一个非常危险的攻击向量,模型发布方如果不做训练数据审计,很难发现问题。

3. 防御策略实测与选型:哪些在医学场景真正有效

3.1 对抗训练的核心机制与医学数据上的收敛难点

对抗训练是目前最主流、效果最稳定的防御手段之一。它的核心思路很简单:在训练过程中不断生成对抗样本,让模型在对抗样本上学到正确的标签,相当于给模型打疫苗。

PGD对抗训练的常规实现流程是:每个训练batch中,先用PGD生成对抗样本,再把对抗样本和干净样本一起送入模型计算损失。我们在肺结节分类模型上尝试后,最大的感受是训练收敛变慢明显,而且对调参的敏感度很高。医学图像数据集的规模普遍不大,如果对抗训练强度太高,模型容易欠拟合正常分布;强度太低,防御效果又不够。

实操中我们摸索出的组合方案是先做一段正常训练,让模型在现有数据上充分收敛,再以较小学习率、较小扰动半径启动对抗训练微调。epsilon从0.01开始,逐步提高到测试扰动上限。这样做的逻辑是:模型先学会提取医学图像的正常特征,再学习抵抗扰动,避免一开始就被对抗噪声带偏。

另一个关键细节是损失函数的选择。标准交叉熵损失在对抗训练中容易出现置信度过高、鲁棒性不足的问题。我们改用TRADES方法,在损失中显式加入“自然误差”和“鲁棒误差”的权衡项,实测下来在保持掉点率(自然精度下降)较少的同时,对抗鲁棒性提升更明显。

3.2 输入变换与预处理防御:医学图像独有的可控空间

输入变换类防御不修改模型,而是在推理前对输入图像做去噪、压缩、随机化等处理。这类方法最大的优势是部署灵活,模型不动,只在前处理管线加一个模块。但它的缺点也很明显:对抗扰动是模型相关的,如果变换不彻底,模型在变换后的图像上仍然可能被攻击。

在医学图像上,有几类变换方法值得单独说明。

第一种是JPEG压缩类方法。CT和MRI的DICOM原始数据往往是16位存储,当图像以有损JPEG格式重新压缩时,高频对抗扰动会被大幅抹掉。但问题在于,医学图像诊断本身对细节保真度要求极高,JPEG压缩如果压过头,正常诊断精度也会下降。实测中我们在保证肺癌分类AUC基本不退步的前提下,只能选择中等压缩质量,对抗样本攻击成功率下降约20%到30%,但清除了很多纹理细节,对微小肺结节这种低对比度目标不友好。

第二种是随机裁剪缩放。这类随机化方法在自然图像上表现尚可,但医学图像中的病灶区域往往很小,而且位置有解剖学规律,医生训练模型时会期望病灶出现在特定解剖位置。随机变换如果破坏这种空间一致性,模型诊断能力会大幅下降。所以我们在医学场景中反而更推荐保守的空间变换,仅仅做小幅度的随机平移和翻转,不做大幅缩放。

第三种是输入去噪和图像增强,比如使用中值滤波、双边滤波或者小波去噪。这类方法对均匀噪声扰动有一定的抑制作用,但对结构化的对抗扰动效果有限,而且容易让病灶边缘模糊。作为第一道防线可以,但不宜作为唯一防御手段。

3.3 对抗样本检测与模型鲁棒性增强:从工程到算法

对抗样本检测的思路是“不防御攻击本身,而是识别输入是否可疑”。常用的检测手段包括:分析模型在中间层特征上的分布偏离度、对输入做多个随机变换后比较预测一致性、训练一个小型二分类器专门判别干净样本和对抗样本。

我们在病理切片模型上试过一个基于特征分布距离的检测方案。具体做法是提取模型在某一中间层的输出向量,统计干净样本的分布范围,然后对输入样本计算马氏距离,距离超过阈值就判定为可疑。这个方法对FGSM和PGD生成的明显扰动很有效,检出率亮眼,但对C&W这种专攻最小扰动的攻击,检出率明显下降。原因在于C&W对抗样本的特征分布和干净样本非常接近,几乎嵌入到了正常流形内部。

整体来看,检测方法只能作为安全体系的辅助环节,不能替代核心防御。工程上我们会在推理接口前同时放置预处理模块和检测模块,形成多层次的防护链路,而不是把希望完全寄托在单一手段上。

3.4 医学场景防御评估的独特问题:错误代价与可解释性

医学场景做防御评估,不能只盯着攻击成功率这一个指标。一个真正可用模型需要同时满足三个条件:正常样本诊断精度基本不掉、对抗样本攻击成功率显著下降、模型对防御行为的可解释性可接受。

攻击成功率下降带来最直接的代价是正常样本精度下降,这是医院临床科室最不能接受的事情。比如某个模型的肺结节识别精度原本是93%,加了对抗训练之后掉到88%,即便鲁棒性提升了,医生大概率也不会愿意在一个更差的诊断工具上冒险。所以我们在评估时采用“双阈值验收”:正常AUC下降不超过1个百分点,扰动强度达到预设上限时攻击成功率低于30%,否则调整参数重来。

可解释性问题更隐蔽。常规的对抗训练会让模型对局部细节的敏感度降低,这本来是好事,但在医学图像上常常意味着模型对微小病灶边缘的注意力变弱了。我们用Grad-CAM做了可视化对比,发现对抗训练后的模型在肺部纹理区域的热力图确实更模糊。这提示我们,医学图像的防御不能盲目追求鲁棒性最大化,需要医生参与评估防御带来的诊断行为变化是否符合临床直觉。

4. 实操复现:从数据集准备到攻防实验全流程

4.1 模拟项目X的数据准备与基线模型搭建

整个复现基于一个公开可获取的肺结节CT数据集,命名模拟项目X,为了不引入版权和隐私问题,处理流程作了脱敏。数据准备阶段有四个关键步骤。

第一步,读取DICOM系列文件,重采样到统一体素间距(例如1mm×1mm×1mm)。不同CT设备的层间距差异很大,如果不做重采样,模型会学到设备相关的伪特征,攻击评估也会失真。

第二步,做窗宽窗位处理并归一化。肺结节观察常用窗宽1500HU、窗位-600HU,我们把CT值截断到窗宽范围内,再线性映射到0到1区间。这一步非常关键,因为我们后续的对抗扰动都是以这个归一化空间的数值为基准计算的。

第三步,分割出结节区域并裁剪成固定大小的3D patch,并对正负样本做平衡处理。原始数据中良恶性结节比例往往不均衡,直接训练容易导致模型偏向多数类,攻击评估时阳性样本的误判率会虚高。

第四步,划分训练集、验证集和测试集。注意按患者维度划分,不能按图像切片划分,否则同一个病人的多张切片会同时出现在训练和测试集中,造成数据泄露,攻防指标也会严重虚高。

基线模型方面,我们选择了3D DenseNet作为主干模型,输入patch尺寸是32×32×32,输出为二分类(恶性/良性)。基线模型在干净测试集上AUC约为0.94,作为攻防对比的基准。

4.2 攻击实验的设计与参数调优实录

攻击实验按扰动精度、攻击方法、模型可见性三个维度做了矩阵式设计。

扰动精度方面,我们设定了三个档位:epsilon等于0.01、0.03、0.05。0.01属于“极其隐蔽”档位,人眼完全看不出图像变化;0.03是中等强度;0.05已经能在负片背景上隐约看到纹理异常,属于容易被有经验的医生察觉的边界。

针对每个模型、每个攻击方法、每个epsilon档位,我们在测试集上的全部阳性样本上运行攻击,并计算攻击成功率和扰动后的模型AUC。以PGD攻击为例,迭代次数我们固定为40次,步长为epsilon除以迭代次数,同时每次迭代做投影裁剪。实际跑下来,PGD在epsilon等于0.03时就能把模型AUC从0.94拉到0.61,攻击成功率达到75%。这说明如果攻击者拿到模型白盒权限,防御压力非常大。

我们也对比了迁移攻击在医学数据上的表现。代理模型选择2D ResNet结构,输入是CT的三轴切片,目标模型是3D DenseNet。迁移攻击的成功率明显低于白盒攻击,大约在34%左右,但这个数字在临床场景已经不低了,因为攻击者只需要让一部分恶性结节被判成良性,就可以造成严重后果。

4.3 防御实验的设计与结果判读

防御实验围绕三项主要策略展开:对抗训练微调、输入预处理链路、检测模块。

对抗训练微调的具体配置:在基线模型已经收敛的基础上,以学习率0.0001、epsilon 0.03、PGD迭代7次的方式继续训练10个epoch。训练过程中同时混入干净样本和对抗样本,损失函数采用TRADES权衡项。结果是对抗训练后的模型在面对PGD攻击时,攻击成功率从75%降到22%,代价是干净样本AUC从0.94降到0.92,属于可接受范围。

输入预处理链路方面,我们在推理入口加入中值滤波和轻度随机平移。单独使用这个方案,对FGSM有一定抑制效果,攻击成功率下降约15个百分点,但对PGD基本无效。这里的原因也很清楚,PGD迭代优化时已经考虑了预处理对扰动的削弱效应,预处理的固定模式在对抗优化中可以被绕过。

检测模块我们使用中间层特征马氏距离方案。在特征的选取上做了对比,使用倒数第二层全连接特征比使用倒数第一层效果更好,因为最后的概率输出层信息压缩过度,干净和对抗样本的区分度已经消失。检测模块对FGSM的检出率约90%,对PGD约74%,对C&W约45%,作为辅助防线有一定价值。

5. 攻防调研避坑指南:常见问题与工程排查实录

5.1 像素范围与归一化不匹配造成的攻击失效

这是我们在调研初期碰到的最典型问题。第一次复现FGSM攻击时,我们在原始CT的HU值空间直接计算梯度符号,epsilon设定为1,结果显示攻击几乎无效。排查发现,模型输入层其实期望0到1的归一化值,当我们把HU值空间的梯度符号叠加到归一化图像上时,扰动数值尺度完全对不上,相当于epsilon被缩小了上千倍。

正确的做法是统一在模型输入空间做攻击,且要穿透整个预处理流程。攻击时应该对经过窗宽窗位处理、归一化之后的图像张量计算梯度,而不是对原始DICOM数组计算梯度。很多论文复现时对这个问题讲得含糊,实操中一定要把预处理函数和攻击函数串联做端到端测试。

5.2 白盒攻击成功率虚高与黑盒评估不足

在调研报告评审阶段,我们发现一个问题:如果只用白盒PGD攻击率来评价防御效果,模型看起来脆弱得不堪一击;但如果只报告防御后的攻击成功率,又容易给人“防御无敌”的错误印象。真实威胁评估必须同时给出白盒和黑盒两个视角。

白盒攻击代表“模型参数已泄露”的最坏情况,是防御上限的参照;黑盒迁移攻击代表实际攻击者更可能走的路径,是现实风险的参照。正确的汇报姿势是画清楚攻击成功率矩阵,行是不同的攻击方法,列是白盒/黑盒条件,并且明确标注扰动强度。我们最终输出的报告中,核心结论全部来自二维矩阵数据,而不是单个数字,这样后续做安全决策时才有据可查。

5.3 对抗训练导致的正常精度下降与调参策略

对抗训练在医学数据上最让人头疼的是正常精度掉点。我们在第一个版本实验中,直接用epsilon 0.05从头训练对抗模型,干净AUC直接掉了4个百分点,这在临床上完全无法接受。后来改成两阶段策略,先在干净数据上充分收敛,再用较小epsilon做微调,反复试了epsilon 0.01、0.02、0.03几个档位,最终确定0.03作为鲁棒性和精度的平衡点。

另外,对抗训练的学习率如果开得太大,模型会把对抗样本当成一种强噪声,学到过于平滑的决策边界,导致正常样本的边界区分度下降。建议对抗训练阶段的学习率保持在正常训练峰值学习率的三分之一以下,并且配合早停策略监控干净验证集AUC。

5.4 跨设备跨中心泛化:鲁棒性在真实部署中的折扣

实验室里验证有效的防御,上了真实临床环境可能效果打折扣。一个重要的原因是设备域差异。不同CT厂商的扫描设备、不同医院的成像协议、重建算法差异,都会让输入数据的分布产生偏移。对抗扰动是在训练数据分布上构造的,如果部署时输入数据已经发生了域偏移,扰动可能不再命中模型的关键决策区域,防御效果自然也会变化。

我们在实际测试中遇到过这样的情况:一个在A医院数据上验证有效的对抗训练模型,迁移到另一家医院的CT数据上,对抗鲁棒性下降明显。考虑到医学AI产品本质上要跨医院部署,防御策略的评估必须加入跨域验证环节。建议在防御测试集中至少引入两组外部数据,一组来自相似设备,一组来自不同品牌设备,看防御手段能否保持稳定。这个环节在常规攻防论文里很少被真正执行,但在实战中极其重要。

6. 安全调研后的落地建议与个人思考

调研做到最后,我个人的核心体会是:医学图像攻防不是”完美防御“的问题,而是”风险可控“的问题。完全抵御所有攻击在目前技术条件下不现实,但通过多层次防御体系和严格的风险评估,可以让攻击成本远高于攻击收益,让大多数黑客和恶意攻击者放弃这条路。

从工程落地的角度,我的建议是先搭一套完整的攻防评估流水线,再考虑具体防御策略。流水线至少应包括:数据版本管理、预处理代码库、攻击算法库、防御算法库、评估指标计算和报告生成模块。有了这套流水线,每次模型迭代都可以自动跑一遍安全性回归,而不是等项目上线后被安全团队临时发现漏洞。

最后分享一个细节技巧。无论用什么防御方法,保存模型时都建议同时保存一份未加固版本的模型和加固版本的模型。这样在遇到新的攻击方法时,可以快速对比两个模型在新型攻击下的表现,判断是算法层面的漏洞还是防御参数配置的问题。这个小习惯在我们调研期间帮了大忙,排查问题的时间至少省了一半。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询