FaCT-GS: Fast and Scalable CT Reconstruction with Gaussian Splatting¶
会议: ECCV2026
论文: ECCV 原文
项目: https://papieta.github.io/fact-gs/
领域: 医学图像
关键词: 高斯泼溅、稀疏视角CT、CUDA加速、体积先验、体积压缩
一句话总结¶
FaCT-GS 不另造一个重建网络,而是系统改造高斯 CT 重建的初始化和 GPU 计算路径,在表 1 的 75 视角设置下将 R2-Gaussian 的 9 分钟缩短至 1 分 52 秒,同时将 SSIM 从 0.946 提高至 0.950。
研究背景与动机¶
CT 利用不同角度的 X 射线投影恢复物体内部的衰减分布。减少投影数有助于缩短采集时间或降低辐射剂量,但会让直接 FDK 重建出现明显伪影。SIRT、带总变分正则的 FISTA 等传统迭代算法仍有实际竞争力:它们不需要训练数据,而且能以较低计算成本给出可用结果。
神经场和高斯泼溅引入了另一种表示方式。前者需要沿射线反复查询网络;后者可以解析地投影高斯,省掉大量逐点查询,但已有 R2-Gaussian 在标准分辨率下仍需要数分钟。问题在高分辨率时更突出:探测器从标准的 \(512^2\) 像素增大到 \(2048^2\) 像素后,通用渲染代码中的无效覆盖、梯度写冲突及内存访问都会被放大。
作者因此把重点放在计算路径是否真正适配 CT,而非单纯增加模型表达力。X 射线投影累计的是沿途衰减,不需要可见光渲染的遮挡排序;快速体素化还可能使“先把已有体积拟合为高斯,再开始重建”变得划算。核心 idea:利用 CT 的可加性重写高斯计算内核,并把初始化和损失计算一起优化,让高斯表示既能快速重建,也能直接接收体积先验。
方法详解¶
整体框架¶
输入是稀疏角度的投影及扫描几何,可选输入为一个已有体积先验;输出是表示三维衰减场的高斯集合,需要时再体素化成规则网格。每个高斯具有位置、尺度、旋转和密度,空间某处的衰减由所有相关高斯的密度贡献直接相加,因此这里没有视角相关的颜色分支。
先通过“梯度与先验初始化”建立高斯状态,再用“CT 专用光栅化与体素化”生成预测投影和局部体素块,最后用“融合损失内核”计算监督信号。梯度更新高斯参数,已有的自适应控制机制负责剪枝、克隆或分裂;这些步骤循环执行,并不在每一步都生成完整体积。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
input["投影与几何<br/>可选体积先验"] --> init["梯度与先验初始化"]
init --> compute["CT 专用光栅化<br/>与体素化"]
compute --> loss["融合损失内核"]
loss --> update["参数更新与<br/>自适应控制"]
update --> compute
update --> output["高斯表示<br/>最终体积"]
关键设计¶
1. 梯度与先验初始化:先把有限高斯放在结构变化处
冷启动先对当前投影做 FDK 重建,并通过阈值去掉背景。R2-Gaussian 按重建强度采样高斯中心,容易把资源放到强度高但内部变化不大的区域;FaCT-GS 改为按梯度幅值采样,让边界及高频结构获得更多初始高斯。采样位置处的重建强度决定初始密度,再乘缩放因子 \(k=0.15\);初始旋转为零,尺度取最近邻距离。这改变的是初始资源分配,不意味着 FDK 中的伪影已经被消除。
如果已有相似对象或同一对象的历史体积,初始化不必绕道生成合成投影。作者从先验体积的梯度采样高斯,再把当前高斯体素化,与先验体积直接比较,执行短暂的体积拟合。此时监督来自先验本身,而后续正式重建仍由当前采集投影约束,两种监督来源不能混为一谈。
图 5 的快速拟合只执行 50 次迭代,额外耗时约 2 秒。其目标不是完整复制先验的所有细节,而是给重建提供更合理的起点。作者也明确承认:起点的 SSIM 更高,不自动等价于在所有任务中都能更快收敛到更好的最终结果。
2. CT 专用光栅化与体素化:减少无效计算和梯度写冲突
光栅化将每个三维高斯变换到射线/探测器空间,解析地形成二维投影贡献,并保留 R2-Gaussian 的积分因子以匹配 X 射线路径积分。体素化则不经过探测器投影,直接在三维网格位置求高斯贡献之和。二者共享高斯状态,但服务于不同目的:前者与采集投影比较,后者用于局部正则、先验拟合和最终体积输出。
原有内核用方形包围框覆盖椭圆高斯,对细长或低密度高斯会访问大量几乎无贡献的位置。FaCT-GS 改用考虑密度的轴对齐矩形边界,缩小实际计算区域。反向传播也不再简单地让相邻像素争着向同一高斯写梯度,而是转成以高斯为中心的计算组织,减少并发写冲突和 warp 停顿。
另一个关键改动是彻底移除沿射线的排序逻辑。可见光的透明度合成受前后遮挡影响,CT 的衰减积分却是可加的,交换累加顺序不改变信号。作者指出,R2-Gaussian 虽然已认识到这一点,代码仍保留了排序开销。FaCT-GS 同时把位置与半径、投影协方差参数与积分因子打包成紧凑的 float4 结构,减少内存传输。
体素化的收益尤其重要,因为完整三维网格的元素数随边长立方增长。优化过程只体素化随机局部块,把总变分正则使用的块从 \(8^3\) 增至 \(32^3\);完整体积可以在最后才生成。这样,高分辨率输出不会强迫每次更新都遍历整个三维网格。
3. 融合损失内核:避免加速后瓶颈转移到损失计算
当光栅化和体素化变快后,损失函数中大量独立的小算子及其反向传播就成为显著开销。FaCT-GS 使用 fused-ssim 计算二维 SSIM,报告该环节加速 5–8 倍;还为三维 SSIM 和三维总变分实现融合 CUDA 内核,减少启动次数和中间张量的内存读写。
三维 SSIM 不能机械扩展二维版本,否则会占用过多线程块共享内存。作者沿深度方向使用环形缓冲区,让每个线程处理一条 Z 轴行;报告三维 SSIM 环节加速 11 倍,而 \(32^3\) 局部块上的总变分环节加速 3 倍。这些都是组件级加速,不应直接当成端到端重建的加速倍数。
一个完整示例¶
考虑表 1 的 75 视角设置:先从当前投影生成粗糙 FDK 体积,按梯度初始化 50,000 个高斯。进入重建后,用预测投影与实测投影比较,并在随机 \(32^3\) 体素块上约束局部平滑性,随后更新和调整高斯集合。
运行至 150 次迭代时,表 1 报告 43 秒、38.33 dB PSNR 和 0.946 SSIM;继续至 400 次迭代则为 112 秒、39.05 dB 和 0.950。这里展示的是同一报告设置下的停止点选择,不是声称每次迭代只处理一个视角,也没有把可选先验拟合时间混入这组冷启动结果。
损失函数 / 训练策略¶
重建损失由投影的 L1、二维 SSIM 损失和随机局部体积的三维总变分组成。以下用统一符号整理原文式 (5),预测投影为 \(I_r\),采集投影为 \(I_{gt}\):
先验拟合则直接比较体素化输出 \(V_r\) 与先验 \(V_{\mathrm{prior}}\),采用原文式 (6) 的 L1 与三维 SSIM 组合;这里把原文的体积目标符号改写为先验,以免误认为正式重建可访问目标真值:
正文未给出这两个权重的具体数值,不能从加速比或质量表反推出配置。重建是逐扫描自监督优化,不是先用配对 CT 数据训练一个通用网络;独立体积拟合与先验热启动则明确需要输入体积。
实验关键数据¶
主实验¶
原文第 4.1 节使用 15 个真实 CT 体积生成的合成投影,以及 FIPS 的 3 个真实投影案例。输出体积为 \(256^3\),合成投影为 \(512^2\) 像素,真实投影为 \(560^2\) 像素;表 1 标题简称为 \(512^2\) 数据集。硬件为 NVIDIA H100,CUDA 12.8.1。
下表摘录原文表 1,时间统一换算为秒,PSNR 单位为 dB,SSIM 无量纲,均越高越好。R2-Gaussian 与完整 FaCT-GS 均以 50,000 个高斯初始化,执行 400 次迭代;FISTA 执行 100 次全投影迭代,不能把两类算法的迭代数直接等同。
| 视角数 | 方法 | PSNR (dB) | SSIM | 时间 (s) |
|---|---|---|---|---|
| 75 | FISTA | 37.07 | 0.934 | 55 |
| 75 | R2-Gaussian | 39.04 | 0.946 | 540 |
| 75 | FaCT-GS | 39.05 | 0.950 | 112 |
| 75 | FaCT-GS,150 次迭代 | 38.33 | 0.946 | 43 |
| 50 | R2-Gaussian | 38.09 | 0.939 | 346 |
| 50 | FaCT-GS | 37.97 | 0.943 | 75 |
| 25 | R2-Gaussian | 35.23 | 0.912 | 164 |
| 25 | FaCT-GS | 35.33 | 0.920 | 38 |
75 视角下相对 R2-Gaussian 的加速为 \(540/112\approx4.82\) 倍,SSIM 增加 0.004;50 视角下 PSNR 反而低 0.12 dB,因此不能称所有指标都领先。25 视角下为 \(164/38\approx4.32\) 倍,正文“超过 4.5 倍”的概括也不能机械套到每一列。
消融实验¶
下表整理原文图 5 的初始化分析,并非原文表 2,也不是完整模型删模块后的最终重建消融。四对体积为脑部 MRI、胰腺 CT、核桃 CT 和昆虫 CT;每个目标生成 50 个合成投影,指标是初始化输出相对目标体积的三维 SSIM。
| 对象 | FDK 强度采样 | FDK 梯度采样 | 直接使用先验 | FaCT-GS 快速先验拟合 |
|---|---|---|---|---|
| Brain | 0.413 | 0.439 | 0.871 | 0.880 |
| Pancreas | 0.391 | 0.397 | 0.622 | 0.652 |
| Walnut | 0.198 | 0.215 | 0.417 | 0.533 |
| Cricket | 0.488 | 0.521 | 0.809 | 0.830 |
梯度采样的改善小但一致,先验则改变了可用信息量,不能将其大幅提升全部归因于初始化算法本身。快速拟合仅运行 50 次、约 2 秒;这张图验证的是初始状态,并不证明先验一定改善后续收敛时间。
关键发现¶
- 图 4 的扩展性实验使用单个 coral 体积、50 个投影,体积从 \(256^3\) 增至 \(1024^3\),投影从 \(512^2\) 增至 \(2048^2\);每当边长翻倍,高斯初始数量翻倍。固定 100 次迭代时,最大设置对 FISTA 和 R2-Gaussian 分别加速 31.5 倍和 13 倍;它不是固定质量比较。
- 图 4 的另一设置以达到 SSIM 0.9 为终点。最小体积时 FISTA 仍有优势;随着分辨率上升,FaCT-GS 相对 FISTA 的速度从 0.8 倍增至约 16 倍,显示收益主要在大规模任务上。
- 图 3 的合成内核测试使用 RTX 4070 Ti SUPER,而非主实验的 H100;正文报告 2K 图像光栅化由 210 ms 降至 9.3 ms,约 22 倍。该数字不包含完整优化流程。
- 第 5 节独立体积拟合使用 40,000 个高斯、500 次迭代,平均耗时 19 秒。表 2 的高斯结果为 0.84 MB、0.976 SSIM、44.2 dB;JPEG 栈为 0.92 MB、0.981、44.5 dB。这是拟合已知体积的有损压缩,不是稀疏投影重建性能。
亮点与洞察¶
- CT 的成像物理直接指导代码简化。去除遮挡排序不是近似技巧,而是利用衰减可加性删除不属于任务的计算。
- 快速体素化扩大了高斯表示的用途。它既使局部三维正则更可负担,也让已有体积能够通过直接拟合进入重建流程,不必先生成伪投影。
- 端到端加速需要跟踪瓶颈迁移。光栅化变快后继续融合 SSIM 和 TV,避免只报告局部内核很快、实际重建却没有相应收益。
局限与展望¶
- 作者承认初始高斯数量仍需人工选择,自适应控制不能给出适用于任意 CT 的数量规则。可进一步研究由结构复杂度和误差预算驱动的初始化策略。
- 作者对热启动的证据保持克制:初始化更接近目标与最终收敛更快是两件事;正文之外的补充材料未在本缓存中展开,不能补写其结果。
- 本笔记判断,扩展性曲线主要来自一个 coral 体积,初始化比较也只有四对体积。需要更多真实扫描、先验错配及病灶变化条件下的验证,才能支持广泛部署结论。
- 有损体积压缩的 SSIM 接近 JPEG 不代表诊断等效。每个高斯以 float16 保存 11 个参数、共 22 字节,但结构细节损失仍需下游任务和临床标准评价。
相关工作与启发¶
- vs R2-Gaussian:继承高斯衰减场、解析投影与自适应控制,主要改进是初始化和 CT 专用计算实现;应视为高价值系统优化,而非全新重建范式。
- vs FISTA / SIRT:传统方法直接更新体素网格,先验接入自然,但高分辨率计算成本增长较快。FaCT-GS 主要围绕投影及高斯集合更新,不过最小规模的定质量实验仍未全面超过 FISTA。
- vs NAF / IntraTomo:神经场通过沿射线查询获得投影,高斯解析投影避免大量网络求值。可迁移的启发是先检查成像算子的结构,再决定是否需要更复杂的神经表示。
评分¶
- 新颖性: 4/5。创新集中在 CT 适配、初始化与完整系统优化,基础表示延续前作。
- 实验充分度: 4/5。包含质量、运行时间、分辨率扩展、初始化和压缩分析,但真实应用与热启动终点证据有限。
- 写作质量: 4/5。计算瓶颈与工程改动解释清楚,少数正文速度概括需要按表格逐列校正。
- 价值: 4/5。对高分辨率稀疏视角 CT 的实用性有明确提升,诊断安全性仍需独立验证。