# FDG-PET 区域代谢多模态项目定义 ## 1. 当前数据状态 当前目录已经清理为一一配对的数据集: - FDG-PET 体数据:`fdgpet_M00_112/fdgpet_M00_112/*.nii.gz`,共 1015 个。 - 区域 SUVR 表:`petfdg_suvr_csv/petfdg_suvr_csv/*.csv`,共 1015 个。 - 成功配对:1015 对。 - 未配对文件:0 个。 - PET 尺寸:全部为 `112 x 128 x 112`。 - 体素间距:全部为 `1.5 x 1.5 x 1.5 mm`。 - 每个 CSV:121 行,其中 `Background` 1 行,真实脑区 120 行。 已经固定的数据划分: | split | samples | subjects | |---|---:|---:| | train | 710 | 710 | | val | 152 | 152 | | test | 153 | 153 | 划分文件保存在: - `metadata/pet_fdg_manifest.csv` - `metadata/splits/train.csv` - `metadata/splits/val.csv` - `metadata/splits/test.csv` - `metadata/splits/split_summary.csv` - `metadata/splits/pet_fdg_manifest_with_split.csv` 划分按 `subject_id` 完成,避免同一受试者泄漏到不同 split。 ## 2. 任务目标判断 当前阶段的主任务不是分割,也不应该直接定义为临床分类。 ### 不是分割 分割任务需要 voxel-level mask 或 ROI label map 作为监督信号。当前目录没有脑区 mask、病灶 mask、配准标签或分割真值,只有 PET 图像和由 PET 派生出来的区域 SUVR CSV。因此不能把当前项目定义为分割。 ### 目前也不是临床分类 分类任务需要类别标签,例如 CN/MCI/AD、pMCI/sMCI、阳性/阴性、疾病分期等。当前目录没有诊断标签、年龄、性别、MMSE、ADAS-Cog 或转化状态。因此现在不能严肃地训练“AD 分类器”,也不能声称模型能做诊断分类。 ### 当前最合理目标 当前最合理、数据支撑最充分的目标是: > 训练一个 FDG-PET 区域代谢理解 encoder,使模型能够从 3D PET 图像中学习区域代谢模式,并与 120 脑区 SUVR 数值表示对齐。这个 encoder 后续可作为 VLM 的视觉/医学影像前端,用于分类、检索、问答或报告生成。 换句话说,当前阶段应该做的是 **PET-SUVR 表征学习和区域代谢理解**,不是最终临床任务。 ## 3. 当前可训练任务 在没有临床标签的条件下,可以做以下任务: 1. **PET -> SUVR 回归** - 输入:3D FDG-PET。 - 输出:120 个脑区 SUVR。 - 目的:验证 image encoder 是否真正学到区域代谢分布。 2. **PET-SUVR 对比学习** - 同一扫描的 PET embedding 和 SUVR embedding 作为正样本。 - 不同扫描作为负样本。 - 目的:把 3D 图像表示和区域结构化表示对齐。 3. **高低代谢脑区预测** - 预测 top-k 高 SUVR 脑区和 top-k 低 SUVR 脑区。 - 目的:形成可解释的区域级输出。 4. **相似病例检索** - 用 PET embedding 或 PET-SUVR fused embedding 检索相似代谢模式病例。 - 目的:验证表示空间是否有实际用途。 5. **规则报告生成** - 基于真实或预测 SUVR 生成结构化文本摘要。 - 目的:为后续 VLM/LLM 接入准备可控文本接口。 ## 4. 后续可扩展任务 补充临床标签后,才建议做: - CN / MCI / AD 三分类。 - AD vs CN 二分类。 - pMCI vs sMCI 转化预测。 - MMSE / ADAS-Cog 回归。 - 脑龄或疾病风险评分。 - PET 图像问答。 - 自动报告生成。 这些是下游任务,不是当前数据本身直接支持的第一任务。 ## 5. Backbone 与 VLM 路线 不建议从头训练完整 VLM。1015 个 3D 样本太少,直接训练大模型会过拟合。推荐路线是: ```text 3D FDG-PET -> pretrained 3D medical image encoder -> projection layer / Q-Former / Perceiver resampler -> visual tokens -> fusion with SUVR region tokens -> downstream head or LLM adapter ``` 推荐阶段: 1. **流程基线** - 使用当前 `scripts/train_pet_vlm_baseline.py` 里的小型 3D CNN。 - 目的只是验证数据读取、预处理、loss、训练循环。 2. **正式第一版 encoder** - 推荐 MedicalNet 3D ResNet-50。 - 原因:轻量、稳定、3D 医学影像预训练,适合作为 PET encoder 起点。 3. **架构对照** - SwinUNETR 或 SAM-Med3D image encoder。 - 目的:验证 Transformer-style encoder 是否比 ResNet 更适合区域代谢建模。 4. **VLM 接入** - 不让 LLM 直接读 NIfTI。 - 先由 3D encoder 把 PET 压成 embedding/token。 - 再通过 projector 或 Q-Former 接到语言模型。 ## 6. 当前保留文件 项目根目录保留: ```text fdgpet_M00_112/ # 原始 PET NIfTI petfdg_suvr_csv/ # 原始 SUVR CSV,已清理为 1015 个 metadata/ pet_fdg_manifest.csv # 全量 1015 对配对清单 splits/ train.csv val.csv test.csv split_summary.csv pet_fdg_manifest_with_split.csv docs/ PET_VLM_PROJECT_PLAN.md scripts/ pet_vlm_dataset.py # 可复用 Dataset 和预处理 train_pet_vlm_baseline.py # 可复用训练基线 requirements.txt 预训练3D脑MRI编码器验证报告.pdf ``` 已经删除的一次性或临时文件: - manifest 生成脚本。 - split 生成脚本。 - smoke test checkpoint。 - `__pycache__`。 ## 7. 当前代码入口 安装依赖: ```bash pip install -r requirements.txt ``` 运行最小 PET-SUVR 对齐训练: ```bash python scripts/train_pet_vlm_baseline.py --epochs 2 --batch-size 2 ``` 显存不够时: ```bash python scripts/train_pet_vlm_baseline.py --epochs 2 --batch-size 1 --output-size 80 80 80 ``` 当前训练脚本默认读取: - train:`metadata/splits/train.csv` - val:`metadata/splits/val.csv` test 集不参与调参,只用于最终评估。 ## 8. 下一步决策 下一步应该做两件事: 1. 把当前小 3D CNN baseline 跑通完整 train/val,看 PET->SUVR 回归和对齐 loss 是否稳定下降。 2. 引入 MedicalNet 3D ResNet-50 作为正式 PET encoder,替换当前小 CNN。 如果之后拿到临床标签,再新增分类任务头,而不是推翻当前路线。