File size: 6,052 Bytes
821844e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | # 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。
如果之后拿到临床标签,再新增分类任务头,而不是推翻当前路线。
|