DiffVP :让大语言模型学会“对比正常”,通过差分视觉语义提升,让LLM生成更准确的胸部3D CT 报告 (ECCV 2026)

论文:DiffVP: Differential Visual Semantic Prompting for LLM-Based CT Report Generation

关键词: 3D CT Report Generation、Large Language Models、Visual Prompting、Semantic Difference Modeling、Medical Vision-Language Model

CODE:  https://github.com/ArielTYH/DiffVP/

If you find this blog or paper is useful, please consider citing the following paper:

@inproceedings{tian2026diffvp,
  title={DiffVP: Differential Visual Semantic Prompting for LLM-Based CT Report Generation},
  author={Tian, Yuhe and Zhang, Kun and Ma, Haoran and Yan, Rui and Li, Yingtai and Wang, Rongsheng and Zhou, Shaohua Kevin},
  booktitle={European Conference on Computer Vision},
  pages={268--285},
  year={2026},
  organization={Springer}
}

1. 为什么 CT 报告生成还不够好?

近年来,大语言模型(Large Language Models, LLMs)逐渐被应用于医学影像报告生成。对于胸部 CT,主流方法通常先使用视觉编码器将三维 CT 体数据编码为一系列视觉 token,再将这些视觉信息输入 LLM,由模型生成相应的影像学报告。

这一思路虽然简单直接,但存在一个非常关键的问题:

一张胸部 CT 中,真正具有诊断意义的异常区域通常只占很小一部分,而绝大多数内容都是正常解剖结构。

换句话说,CT 是一种典型的“异常稀疏、背景冗余”的三维医学影像。

如果模型直接将整个 CT 的视觉表示统一送入 LLM,就相当于要求语言模型自己从大量正常肺组织、骨骼、肌肉、纵隔等背景信息中主动寻找少量异常。这不仅增加了学习难度,也容易导致真正重要的病灶信息被大量正常结构“淹没”。

而真实的放射科医生通常并不是这样读片的。

医生在观察一张 CT 时,脑海中已经存在对“正常解剖结构应该是什么样”的稳定认知。阅读影像的过程,本质上是在不断进行一种比较:

这个患者的影像,与正常状态相比,有什么不同?

因此,真正值得关注的往往不是“这张 CT 本身包含什么”,而是:

它相对于正常状态发生了什么变化。

基于这一临床直觉,我们提出了 DiffVP(Differential Visual Prompting),即差异视觉提示方法,用于大语言模型驱动的胸部 CT 报告生成。

image


2. 核心思想:不要只看 CT 本身,而要看“它与正常 CT 有什么不同”

DiffVP 的核心思想非常直观。

传统方法通常采用:

输入 CT → 视觉编码 → LLM → 医学报告

而 DiffVP 在此基础上额外引入一张正常参考 CT(normal reference CT):

输入 CT + 正常参考 CT → 建模两者的语义差异 → 生成差异视觉提示 → LLM → 医学报告

这里最关键的一点是:

DiffVP 并不直接对两个 CT 做像素级相减。

不同患者之间存在明显的解剖差异,同时 CT 扫描还会受到体位、呼吸状态、层厚、视野以及空间配准误差等因素影响。因此,如果直接比较两个 CT 的像素值,很容易产生大量与疾病无关的伪差异。

DiffVP 采用的是一种更接近医生认知过程的方式:

在高层语义空间中比较患者 CT 与正常 CT,从而提取真正具有诊断意义的结构和语义差异。

因此,这里的“difference”并不是简单的图像 subtraction,而是视觉语义层面的差异建模。


3. DiffVP 的整体框架

DiffVP 的整体流程可以概括为四个步骤:

  1. 对目标 CT 和正常参考 CT 进行视觉编码;

  2. 将两者映射到统一的视觉 token 空间;

  3. 分别提取全局差异和局部差异;

  4. 将差异表示转换为视觉 Prompt,输入大语言模型生成报告。

其中最核心的部分包括两个模块:

  • Hierarchical Difference Extractor(HDE)

    分层差异提取器,用于建模目标 CT 与正常参考之间的多尺度差异;

  • Difference-to-Prompt Generator(DPG)

    差异到提示生成器,用于将视觉差异转换为 LLM 可以理解的连续视觉 Prompt。 image


4. 第一步:将两张 CT 映射到统一的语义空间

首先,输入患者 CT $X$,以及一张正常参考 CT $X_{\mathrm{ref}}$。

两者通过共享的三维视觉编码器进行特征提取。

本文采用预训练的 3D ResNet-18 作为视觉编码器,将三维 CT 转换为高维视觉特征。

但是,直接对所有 voxel-level 特征进行比较并不现实。

一方面,三维 CT 的 voxel 数量非常大;另一方面,大多数 voxel 都对应正常解剖背景,其中包含大量冗余信息。

因此,DiffVP 使用类似 Q-Former 的 Visual Resampler 对视觉特征进行语义压缩。

模型引入一组共享的可学习 query,将目标 CT 和正常 CT 分别压缩为固定数量的 latent token:

$$
I=\mathrm{Resampler}(F,L)
$$

$$
I^{r}=\mathrm{Resampler}(F_{\mathrm{ref}},L)
$$

其中:

  • $I$ 表示目标 CT 的视觉 token;

  • $I^r$ 表示正常参考 CT 的视觉 token;

  • $L$ 是两者共享的可学习 query。

由于两个 CT 使用完全相同的 latent query,因此它们被投影到同一个语义空间,为后续的差异比较提供基础。

这一设计非常重要。

DiffVP 并不是要求两个患者的原始 CT 在空间位置上严格配准,而是希望通过共享的语义 query,让两个扫描在高层视觉语义空间中建立可比较性。


5. 分层差异建模:Global Difference + Local Difference

CT 中的异常可能表现为完全不同的尺度。

有些异常属于较明显的整体结构变化,例如:

  • 心脏增大;

  • 大范围肺气肿;

  • 双侧胸腔积液;

  • 广泛肺间质改变。

而另一些异常可能非常局灶,例如:

  • 小结节;

  • 局灶性肺实变;

  • 局部支气管扩张;

  • 小范围磨玻璃影。

因此,仅使用单一尺度的差异表示并不足以描述复杂的病理变化。

DiffVP 为此设计了一个 Hierarchical Difference Extractor(HDE),分别提取:

  • Global Delta

  • Local Delta


5.1 Global Delta:整体结构发生了什么变化?

首先,DiffVP 使用一个可学习的差异 query $\delta$。

然后将其与目标 CT token 和正常 CT token 一起送入 Transformer:

$$
\Delta_{\mathrm{global}}
=
\operatorname{Transformer}_{\theta}
\left(
[\delta; I; I^r]
\right)_{\delta}
$$

最终得到全局差异表示 $\Delta_{\mathrm{global}}$。

它用于描述两个 CT 在整体层面的视觉语义差异。

可以将它理解为模型在回答这样一个问题:

与正常胸部 CT 相比,这个患者整体上出现了哪些结构或语义上的改变?

Global Delta 更关注整体性的变化,而不是某一个局部 token 的差异。


5.2 Local Delta:哪些局部区域偏离正常最明显?

仅有整体差异仍然不够。

许多真正具有临床价值的病灶非常局灶,因此 DiffVP 又设计了一个 Local Delta Operator。

对于目标 CT 和正常 CT 中对应的 latent token $I_i$ 和 $I_i^r$,首先计算两者之间的平方欧氏距离:

$$
\left|I_i-I_i^r\right|_2^2
$$

距离越大,说明该视觉 token 相对于正常参考偏离越明显。

随后将距离归一化为权重:

$$
w_i
=
\frac{
\left\|I_i-I_i^r\right\|_2^2
}{
\sum_{j=1}^{N}
\left\|I_j-I_j^r\right\|_2^2
+
\epsilon
}
$$

其中,$\epsilon=1\times10^{-5}$ 用于避免分母为零。

之后,模型利用这些权重对 token residual 进行加权聚合:

$$\sum_{i=1}^{N}
w_i\left(I_i-I_i^r\right)
$$

这意味着:

偏离正常程度越大的视觉区域,对最终的差异表示贡献越大。

因此,Local Delta 可以看作一种无需显式病灶标注的异常增强机制。

模型不需要事先知道:

  • 肿瘤在哪里;

  • 结节在哪里;

  • 哪个区域是病灶。

它只需要判断:

哪些语义 token 相对于正常状态最异常。

这些 token 就会自动获得更高的权重。


6. 从“视觉差异”变成 LLM 能理解的 Prompt

得到 $\Delta_{\mathrm{global}}$ 和 $\Delta_{\mathrm{local}}$ 之后,DiffVP 并没有简单地将它们与视觉特征相加。

作者进一步设计了 Difference-to-Prompt Generator(DPG)。

首先将两种差异表示拼接,并通过 projector 映射到 LLM 的 embedding space:

$$\mathrm{Projector}
\left(
[\Delta_{\mathrm{global}};\Delta_{\mathrm{local}}]
\right)
$$

最终得到一组长度为 $p=16$ 的连续视觉 Prompt token。

这些 token 会被放在 LLM 输入序列的前部。

最终输入形式为:

$$[
\Delta_{\mathrm{prompt}};
I;
E;
T
]
$$

其中:

  • $\Delta_{\mathrm{prompt}}$:目标 CT 相对于正常 CT 的视觉差异提示;

  • $I$:患者 CT 的原始视觉 token;

  • $E$:辅助诊断语义提示;

  • $T$:文本指令。

因此,DiffVP 并没有丢弃患者本身的 CT 信息。

原始视觉 token 仍然保留。

不同之处在于,模型在处理这些视觉信息时,同时获得了一组明确的先验提示:

这些是当前扫描相对于正常状态最值得关注的差异。

可以将它理解为给 LLM 加入一个视觉层面的“阅读重点”。


7. Diagnostic Anchor:额外的诊断语义提示

除了视觉差异 Prompt,论文还引入了一个辅助的 Diagnostic Semantic Anchor $E$。

作者训练了一个独立的 3D ResNet-18 多标签分类器,用于预测 18 类影像学异常,包括:

  • 心脏增大;

  • 心包积液;

  • 肺气肿;

  • 肺不张;

  • 肺结节;

  • 肺部阴影;

  • 胸腔积液;

  • 实变;

  • 支气管扩张;

  • 小叶间隔增厚等。

需要强调的是:

这些标签来自数据集提供的结构化标注,而不是从目标报告中反向提取,因此不会引入报告信息泄漏。

该分类器独立训练完成后被冻结。

在报告生成阶段,其预测结果会被转换成简短文本提示,与视觉信息共同输入 LLM。

作者同时指出,这一模块本身并不是本文的核心创新。

DiffVP 的核心贡献仍然是:

normal-reference-driven visual difference modeling。

补充实验也专门验证了:即使完全去掉 Diagnostic Anchor,差异建模仍然能够独立提升报告生成质量。


8. 训练方式

模型的主要训练目标仍然是标准的 autoregressive report generation。

对于真实报告:

$$
Y=\{y_1,\ldots,y_L\}
$$

模型采用负对数似然损失:

$$
\mathcal{L}_{\mathrm{gen}}=-\sum_{t=1}^{L}\log P\left(y_t\mid y_{<t},\mathcal{X}_{\mathrm{in}};\theta\right)
$$

同时加入一个多标签疾病分类损失 $\mathcal{L}_{\mathrm{cls}}$。

最终训练目标为:

$$\mathcal{L}_{\mathrm{total}}=\mathcal{L}_{\mathrm{gen}}+\mathcal{L}_{\mathrm{cls}}$$

语言模型采用 LLaMA-2-7B,并通过 LoRA 进行参数高效微调。


9. 正常参考 CT 是如何选择的?

这是 DiffVP 中一个很自然的问题:

正常参考 CT 从哪里来?是否需要为每个患者找到一个严格匹配的正常人?

答案是否定的。

作者首先根据影像报告筛选没有明显异常发现的正常 CT,构建正常参考池。

在 RadGenome-ChestCT 中:

  • 训练集正常参考:1,787 例;

  • 测试集正常参考:124 例。

在 CTRG-Chest-548K 中:

  • 训练集正常参考:105 例;

  • 测试集正常参考:43 例。

训练和测试过程中,目标 CT 都是从相应 split 的正常参考池中随机抽取一张正常 CT 进行配对。

训练集参考不会进入测试过程,因此不存在 train-test leakage。

这一点非常重要。

DiffVP 并不依赖患者级严格匹配的正常模板,也不要求年龄、性别、扫描姿势等完全一致。

它真正学习的是一种:

异常扫描与正常扫描之间具有统计稳定性的语义差异。

而不是记忆某一张特定正常 CT。


10. 实验数据集

论文在两个胸部 CT 数据集上进行了验证。

RadGenome-ChestCT

该数据集来源于 CT-RATE,共包含:

  • 25,692 个 CT-report pair;

  • 21,304 名患者;

  • 24,128 个训练样本;

  • 1,564 个测试样本。

CT 被标准化到:

$$
1\times1\times3~\mathrm{mm}
$$

数据集覆盖多个解剖区域,包括:

  • 腹部;

  • 骨骼;

  • 乳腺;

  • 食管;

  • 心脏;

  • 肺;

  • 气管与支气管;

  • 纵隔;

  • 胸膜;

  • 甲状腺。

CTRG-Chest-548K

该数据集包含:

  • 1,804 个 CT-report pair。

按照 $8:2$ 划分为训练集和测试集。


11. DiffVP 是否真的有效?

实验结果显示,DiffVP 在两个数据集上均取得了明显提升。

在 RadGenome-ChestCT 上:

方法BLEU-1BLEU-4METEOR
Reg2RG 47.25 24.87 44.07
DiffVP 58.16 34.28 47.40

尤其是 BLEU-1 和 BLEU-4 均出现明显提升。

在 CTRG-Chest-548K 上:

方法BLEU-1BLEU-4METEOR
Reg2RG 49.63 32.04 49.71
DiffVP 50.37 37.57 50.44

总体来看,DiffVP 在两个数据集上的平均 BLEU-1–4 分别提高约:

  • +10.98

  • +4.36

说明显式建模“患者 CT 与正常 CT 的语义差异”能够显著提高报告文本与真实报告之间的一致性。


12. 更重要的是:临床异常识别能力明显提升

单纯的 BLEU 或 ROUGE 并不足以判断一份医学报告是否真正正确。

例如:

“存在胸腔积液”

和

“未见胸腔积液”

在语言结构上非常相似,但临床意义完全相反。

因此,作者进一步使用 RadBERT 从生成报告和真实报告中抽取异常标签,计算 Precision、Recall 和 F1。

在完整模型中,DiffVP 在 RadGenome-ChestCT 上取得:

$$
\mathrm{F1}=0.421
$$

$$
\mathrm{Recall}=0.496
$$

这说明模型不仅在语言层面更接近真实报告,对异常信息的覆盖能力也得到明显改善。


13. 消融实验:Global Difference 和 Local Difference 都有作用

为了验证差异建模本身是否真正有效,作者进一步去掉 Diagnostic Anchor $E$。

结果如下:

模型BLEU-1CE-F1
Baseline 55.29 0.159
+ Global Difference 56.83 0.188
+ Global + Local Difference 57.23 0.238
完整模型 58.16 0.421

这一实验说明:

Global Difference

更偏向提升整体语言生成能力。

它帮助模型理解:

当前患者整体上与正常状态有哪些系统性的结构变化。

Local Difference

更明显地提高异常发现能力。

CE-F1 从 $0.188$ 进一步提升至 $0.238$。

说明局部差异建模能够进一步增强模型对异常相关信息的敏感性。

因此,Global Delta 与 Local Delta 不是重复设计,而是提供了互补的视觉信息。


14. 随机选择正常 CT,会不会导致结果不稳定?

这是 DiffVP 最容易产生疑问的地方之一。

既然测试时正常 CT 是随机抽取的,那么换一张正常参考,报告结果是否会发生很大变化?

补充实验专门验证了这一问题。

作者使用 5 个不同随机种子,分别进行独立的正常参考随机配对。

结果显示,DiffVP 的波动较小。

例如:

$$
\mathrm{BLEU\text{-}1}=57.88\pm0.19
$$

$$
\mathrm{CE\text{-}F1}=0.399\pm0.003
$$

这说明模型并不是依赖某一张“恰好合适”的正常 CT。

相反,它学习到的是一种相对稳定的:

normal-versus-abnormal semantic contrast。

对于 BLEU-1、BLEU-4、METEOR 以及 Clinical Efficacy 指标,五次随机实验中方法相对于 baseline 的提升均具有统计显著性,而 ROUGE-L 的差异没有达到显著水平。


15. 需要多少张正常 CT?

另一个实际问题是:

是否需要建立一个非常大的正常 CT 数据库?

作者分别测试正常参考池大小:

  • 1;

  • 10;

  • 40;

  • 60;

  • 124。

结果发现,即使正常参考池较小,模型的整体性能仍较为稳定。

BLEU-1 大致保持在:

$$
58.08\sim58.40
$$

之间。

CE-F1 大致保持在:

$$
0.398\sim0.414
$$

之间。

因此,从实验结果来看,DiffVP 并不依赖一个非常大的正常病例库。

模型更像是在随机配对过程中学习一种正常分布与异常分布之间的语义对比,而不是记忆某些具体参考病例。


16. 正常参考来自不同医院会怎样?

作者进一步进行了 domain shift 实验。

测试患者仍来自 RadGenome-ChestCT,但正常参考 CT 改为来自 CTRG 数据集。

两个数据集在扫描协议、预处理流程、图像统计分布、重建方向、对比剂使用、设备类型、医院来源以及采集时期等方面均存在系统性差异。

结果显示,跨域后 BLEU-1 从:

$$
58.16
$$

下降到:

$$
56.53
$$

但仍高于不使用差异建模的 baseline:

$$
55.29
$$

说明在语言生成指标上,差异机制对一定程度的 domain shift 具有一定鲁棒性。

但是值得注意的是:

Clinical Efficacy 对域偏移更加敏感。

CE-F1 从:

$$
0.421
$$

下降到约:

$$
0.128
$$

这意味着,虽然整体文本生成质量仍然相对稳定,但如果正常参考的分布与目标患者差异过大,那么“异常—正常”对比的临床有效性会明显下降。

因此,在真实部署中,更合理的选择仍然是使用:

少量、同域且质量较高的正常参考 CT。


17. 如果正常参考池中混入异常病例会怎样?

作者还进行了一个非常实际的实验:

故意向正常参考池中加入异常病例。

当异常污染比例达到 10% 时:

$$
\mathrm{CE\text{-}F1}:~0.421\rightarrow0.166
$$

当污染比例达到 50% 时:

$$
\mathrm{CE\text{-}F1}:~0.421\rightarrow0.121
$$

与此同时,BLEU、ROUGE 和 METEOR 等文本生成指标整体仍然相对稳定。

这一结果揭示了一个很重要的现象:

语言质量稳定,并不等于医学异常识别能力稳定。

如果所谓的“正常参考”中本身包含较多异常,那么正常—异常之间的对比信号会被削弱,从而显著影响临床异常相关指标。

因此,DiffVP 对参考池的要求并不是“越大越好”,而更强调:

参考病例应该尽可能保持正常,并最好来自与目标数据相近的分布。


18. 如何理解 DiffVP 的真正创新?

DiffVP 的价值并不仅仅是“多输入了一张 CT”。

它真正改变的是 CT 报告生成模型的信息组织方式。

传统方法主要学习:

$$
\mathrm{CT}
\rightarrow
\mathrm{Report}
$$

而 DiffVP 更接近于:

$$
\mathrm{SemanticDeviation}
(\mathrm{CT},\mathrm{Normal~Reference})
\rightarrow
\mathrm{Report}
$$

或者直观地表示为:

\mathrm{Normal~Prior}
\rightarrow
\mathrm{Report}
$$

需要强调的是,这里的减号并不是 pixel-level subtraction,而是:

$$
\mathrm{Semantic~Deviation}
$$

也就是说,模型不再仅仅学习:

“这张 CT 中有什么?”

而是进一步学习:

“这张 CT 中有哪些视觉语义偏离了正常状态?”

这与放射科医生基于正常解剖先验识别异常的读片逻辑更加接近。


19. 与显式病灶检测相比,DiffVP 的优势是什么?

另一类解决 CT 背景冗余问题的方法,是先进行:

  • 器官分割;

  • 病灶检测;

  • ROI 提取;

  • 局部区域建模。

这类方法虽然可以提高细粒度信息利用效率,但通常依赖额外标注,例如:

  • lesion mask;

  • bounding box;

  • anatomical segmentation;

  • region annotation。

DiffVP 不需要显式定位异常区域。

它通过正常参考在语义空间中自动增强偏离正常状态较大的视觉模式。

因此,它提供了一种介于:

whole-volume representation

与

explicit lesion localization

之间的解决方案:

不要求精确标出病灶,但仍然能够为模型提供显式的差异感知信息。


20. 这项工作的局限性

虽然 DiffVP 的实验结果显示出明显优势,但仍然存在几个值得关注的问题。

1. 对参考域存在一定依赖

跨域实验表明,如果正常参考 CT 与目标数据分布差异较大,尤其是 Clinical Efficacy 指标会明显下降。

因此,DiffVP 并不是完全 domain-invariant。

2. 正常参考质量非常重要

正常池中混入异常病例后,Clinical Efficacy 明显下降。

因此,建立相对可靠的正常参考池仍然是实际部署中的重要条件。

3. Local Delta 并不等价于真实病灶定位

Local Delta 根据 latent token 与正常参考之间的距离进行加权。

偏离正常较大的 token 可能包含更重要的异常信息,但这种机制并不能保证其与真实 lesion mask 一一对应。

因此,更准确的表述是:

deviation-aware semantic evidence

而不是显式病灶定位。

4. ROUGE-L 并非所有实验中都同步提升

补充实验显示,ROUGE-L 的提升并没有达到统计显著性。

作者分析认为,这主要与不同报告在解剖描述顺序和文本组织方式上的差异有关。

例如,即使两个报告包含相似的临床发现,只要不同器官和异常的描述顺序不同,Longest Common Subsequence 就可能明显缩短。

这一结果也再次说明:

医学报告生成不能仅依赖传统 NLG 指标评价。


21. 总结

DiffVP 提出了一种非常直观但有效的新思路:

让大语言模型生成 CT 报告之前,显式建模患者 CT 相对于正常状态究竟发生了什么变化。

方法通过正常参考 CT 建立视觉先验,并在统一语义空间中分别提取:

  • Global Difference;

  • Local Difference。

随后将这些差异转换为连续视觉 Prompt,引导 LLM 更关注异常相关视觉信息。

这一机制具有几个明显特点。

第一,不依赖精确病灶标注。

不需要 lesion mask 或 bounding box,也能够增强异常相关信息。

第二,避免直接像素级比较。

通过高层语义空间建模差异,降低不同患者之间空间错位和个体解剖差异带来的影响。

第三,显式改变 LLM 的视觉条件。

差异信息不是仅作为一个辅助 loss,而是直接转化为视觉 prefix,参与语言模型的自回归生成。

第四,与临床读片逻辑更加一致。

放射科医生的重要能力之一,本身就是基于正常解剖先验发现异常。

从这个角度看,DiffVP 提供的不只是一种新的 CT 报告生成模块,更重要的是提出了一种值得进一步探索的视觉语言建模思路:

在医学影像中,有价值的信息不仅来自影像的绝对视觉内容,也来自其相对于正常生理状态的语义偏离。

这种 reference-based semantic difference modeling 不仅可以用于 CT 报告生成,也为疾病筛查、医学视觉问答、影像检索、多模态诊断以及纵向疾病变化建模等任务提供了一种值得进一步研究的方向。


 

posted @ 2026-09-30 20:37  kkzhang  阅读(7)  评论(0)    收藏  举报