Generative Adversarial Network--based Noncontrast CT Angiography for Aorta and Carotid Arteries
基于生成对抗性网络的主动脉和颈动脉非集中CT血管造影
https://github.com/ying-fu/CTA-GAN
Radiology 2023
背景
碘造影剂(ICAs)广泛用于CT血管造影术(CTA),可能会对人体产生不良影响,而且使用耗时且成本高昂。研究用平扫CT合成造影剂CT 并评价生成的效果很有意义。CTA------Syn-CTA
- 难点:传统的深度学习模型不能充分解决成对未对准图像的映射翻译问题。此外,先前的医学图像翻译研究集中在单个解剖位置,而临床诊断经常在多个位置进行(14,15)。
贡献
- 本文:开发一种基于生成对抗性网络(GAN)的CTA成像模型(16-21),以合成 独立于ICAs的高质量CTA样图像,并评估 使用这些合成CTA(Syn-CTA)图像辅助临床诊断的可行性。使用内部和外部测试数据从定量指标 、视觉质量 和血管疾病诊断准确性方面评估Syn-CTA图像
实验
- 数据集:收集了17-22年颈部和腹部的成对的CT和CTA图像,1749名患者,1137训练,400验证,212测试,外部验证42名。
- 数据处理:每个NCCT和CTA扫描被重采样到0.67x0.67x1.25的体积中,由75-490各切片组成,512x512分辨率,CTA造影剂浓度370mg/ml,注射速率4.5ml/s,将-2000-2095的像素值标准化到-1-1,排除手动检查后图像质量较差的扫描。
- Patient Characteristics(患者特征),在1833名符合条件的患者中,84名图像质量较差的患者被排除在外,1749名患者(中位年龄,60岁[IQR,50-68岁];1057名[60.4%]男性患者和692名[39.6%]女性患者)被纳入分析。1137名患者的CT扫描用于模型训练;来自400名患者的扫描用于模型开发验证;212名患者的扫描用于模型测试(图1)。外部独立验证集包括42名患者(中位年龄67岁[IQR,59--74岁];37名[88.1%]男性患者和5名[11.9%]女性患者)。
- 评估方法:Quantitative Evaluation(定量评价),正态平均绝对误差(NMAE )、峰值信噪比(PSNR )、结构相似性指数测量(SSIM)
- Visual Quality Evaluation(视觉质量评估),具有10年经验的专家,独立评估 了CTA和Syn-CTA图像的图像质量。任何分歧都通过协商一致的方式解决。放射科医生使用主观三点量表(视觉质量评分)(25,26)评估Syn-CTA和真实CTA扫描的图像质量1、质量差;2、质量合格;3、质量好;具体而言,图像质量评估包括血管壁清晰度、管腔边缘清晰度和管腔壁对比度(附录S1,图S1)。
- Diagnostic Evaluation(诊断评估),对每次扫描的Syn-CTA图像和真实CTA图像进行匿名化 ,然后将其随机并按序列号 呈现给进行独立阅读视觉质量评估的同两名放射科医生。基于每次扫描的血管诊断(动脉瘤、夹层、动脉粥样硬化或健康动脉)由两名放射科医生确定。通过一致阅读 解决任何诊断分歧(附录S1)。从真实的CTA图像中读取的血管诊断被视为基本事实。
人工评价:Syn-CTA测试集中的高质量分数(分数=3)的比率均大于90%,高质量分数的总体比率为95%
方法
论文中对方法描述不多,以下是从源代码中简化的训练步骤伪代码
python
# real_A2是CT,real_B2是Syn_CTA,
# NetG_A2B是生成器,R_A是校准器,spatial_transform是进行采样的一个配准场不是模型,
# netD_B是判别器,target_real = Variable(Tensor(1,1).fill_(1.0), requires_grad=False),
# target_fake = Variable(Tensor(1,1).fill_(0.0), requires_grad=False
optimizer_R_A.zero_grad()
optimizer_G.zero_grad() # 只更新生成器和校准器
fake_B = netG_A2B(real_A2) # CT生成的Syn_CTA,fake_B
Trans = R_A(fake_B, real_B2) # fake_B和real_B校准得到Trans
SysRegist_A2B = spatial_transform(fake_B, Trans) # fake_B和Trans,配准得到,SysRegist_A2B
pred_fake0 = netD_B(fake_B) # fake_B输入到判别器得到pred_fake0
SM_loss = smoothing_loss(Trans)
SR_loss = L1_loss(SysRegist_A2B, real_B2) # 配准后的生成图和real_B要长得像
adv_loss = MSE_loss(pred_fake0, target_real) # 对抗,fake_B的pred_fake0和1的MSEloss
loss = SM_loss + SR_loss + adv_loss # 总损失
loss.backward() # 梯度回传
optimizer_R_A.step() # 更新R_A和G
optimizer_G.step()
optimizer_D_B.zero_grad() # 只更新判别器
with torch.no_grad():
fake_B = netG_A2B(real_A2) # 生成器不更新权重
pred_fake0 = netD_B(fake_B) # 再算一次pred_fake0
real_BB2 = copy.deepcopy(real_B2)
pred_real = netD_B(real_BB2) # 判别real_B得到pred_real
loss_D_B = MSE_loss(pred_fake0, target_fake) # 对抗,pred_fake0和0,pred_real和1
+ MSE_loss(pred_real, target_real)
loss_D_B.backward()
optimizer_D_B.step() # 更新判别器
损失函数
配准后的图像和源图像的L1 loss,对抗loss
Thinking
输入是未配准的成对CT-SynCTA影像,先用CT影像生成SynCTA影像,再对SynCTA影像进行配准,再通过判别器,判别生成的影像和原始SynCTA影像。最终合成配准了的SynCTA影像。