NeuroInsight 是一个本地医学数据分析项目,用 Flask dashboard 串联临床表格建模和海马体 MRI 分割。仓库内的 3 类 2D U-Net 由随仓库提供的 MSD Hippocampus 训练集实际训练;Dashboard 对所选切片执行真实前向推理,并将 Model Prediction 与 Ground Truth 标注并排展示,不把数据集标签冒充为模型输出。
| 模块 | 功能 |
|---|---|
| 临床建模 | 训练 Dementia biomarker 和 Parkinson structural MRI 二分类模型 |
| MRI 浏览 | 读取 NIfTI 图像与标签,选择 validation scan 和 slice |
| 分割训练 | 用 100 个训练体积训练 3 类 2D U-Net,用 10 个 validation 体积选择最佳权重 |
| 真实推理 | 对当前 MRI slice 实时前向推理,并排显示 Ground Truth / Model Prediction 及 slice Dice |
| 可追溯性 | 检查 checkpoint 架构与类别数,保留原 9 通道不匹配权重和原因说明 |
| Dashboard | 提供 Flask 页面和 /api/summary JSON 接口 |
| 结果生成 | 输出 README 可引用的 JSON、Markdown、CSV 和 PNG 结果文件 |
| 项目 | 当前结果 |
|---|---|
| Dementia ROC AUC | 0.983 |
| Dementia accuracy | 94.4% |
| PD ROC AUC | 0.636 |
| PD accuracy | 61.5% |
| U-Net validation macro Dice | 0.7715 |
| U-Net validation macro IoU | 0.6280 |
| Label 1 Dice / IoU | 0.7714 / 0.6279 |
| Label 2 Dice / IoU | 0.7716 / 0.6282 |
| Foreground Dice / IoU | 0.8169 / 0.6905 |
| Hippocampus cases | 100 train / 10 validation / 10 test |
| 示例前景体积 | 3435.0 mm3 |
| 分割 checkpoint | 3 类 UNet,116,787 参数,best epoch 35 |
分割数字来自本仓库内实际训练的 checkpoint,可通过 scripts/train_segmentation.py 复现。指标在 10 个 validation 体积的全部 348 张轴向切片上按全局体素聚合计算;test split 未用于选模或本页指标报告。这是为可复现 Dashboard 设计的轻量 2D 基线,不声称 SOTA。
结果文件:
docs/results/project_summary.mddocs/results/project_summary.jsondocs/results/clinical_metrics.csvdocs/results/segmentation_metrics.jsondocs/results/hippocampus_overlay.png
临床指标示例:
model,positive_label,feature_count,accuracy,roc_auc,sensitivity,specificity
dementia,Dementia,3,0.943750,0.983298,0.939394,0.944882
pd,PD-positive class,84,0.615385,0.635621,0.676471,0.500000复用已有 conda 环境运行检查:
conda run -n codex_python bash scripts/check_project.sh
conda run -n codex_python bash scripts/test.sh
conda run -n codex_python bash scripts/report.sh配置环境并启动 dashboard:
bash scripts/setup_env.sh
bash scripts/run_app.sh重新训练分割模型、生成对比图与报告:
python scripts/train_segmentation.py --device auto
python scripts/generate_project_report.py
python -m pytest -q--device auto 会优先使用 Apple Silicon MPS,其次是 CUDA,否则回退到 CPU。默认训练包含全部切片,固定 seed,并把最佳验证权重和完整指标分别写入 models/best_unet.pth 和 docs/results/segmentation_metrics.json。
Flask 请求内的单张切片推理默认使用 CPU,避免 MPS 在多线程 WSGI 请求中的兼容性问题;对这个约 40×55 像素的轻量 2D 模型,权重仅加载一次并被缓存。如果部署服务器的加速后端已经过 WSGI 工作模式验证,可设置 NEUROINSIGHT_INFERENCE_DEVICE=cuda 或 mps。
常用 Makefile 入口:
make check
make results
make test
make runDashboard 默认地址为 http://127.0.0.1:5055,可通过 HOST 和 PORT 覆盖。自定义数据和 checkpoint 路径:
export NEUROINSIGHT_DATA_DIR=/path/to/data
export NEUROINSIGHT_CHECKPOINT=/path/to/best_unet.pth- Python 3.10+
- Flask、NumPy、Pandas、scikit-learn、Nibabel、Matplotlib
- PyTorch 用于 U-Net 训练和 Dashboard 实时推理,是完整 Dashboard 流程的必需依赖
- 依赖见
requirements.txt和pyproject.toml
data/clinical/包含随仓库提供的演示临床表格:Dementia_train.csv、Dementia_test.csv、PD_data.csv和sim_data.csv。- Dementia 表格使用
DX、ADAS13、amyloid_PET、tau_PET字段;PD 表格使用 84 个结构 MRI 区域特征和DX标签。 data/imaging/使用 MSD Hippocampus 风格目录:imagesTr/、imagesVali/、imagesTest/、labelsTr/、labelsVali/、labelsTest/。- 当前仓库内置 MRI 子集包含 100 个 train、10 个 validation 和 10 个 test case。
- 海马体标签包含 background、anterior 和 posterior。Dashboard 左侧是数据集 Ground Truth,右侧是 3 类 U-Net 的实时 Model Prediction;体积表明确属于 Ground Truth 标注。
- 临床 CSV 是本地演示/处理后表格;仓库没有声明其为某个公开临床数据集的原始再分发。替换真实临床数据时需保持字段或修改
src/neuroinsight/clinical.py。
- Medical Segmentation Decathlon:Hippocampus 数据集的官方说明,包含 MRI 模态、海马体 head/body 目标和数据规模。
- MSD AWS download page:Hippocampus 数据集下载入口。
- Antonelli et al., The Medical Segmentation Decathlon:MSD 数据集论文。
app.py Flask dashboard 入口
src/neuroinsight/ 临床建模、MRI 处理、checkpoint 工具和路径解析
data/clinical/ Demo clinical CSV
data/imaging/ Hippocampus NIfTI image/label 子集
models/ 当前 3 类 U-Net checkpoint 与旧权重归档
docs/results/ 可复现项目摘要、分割/临床指标和对比图
templates/ Dashboard HTML
static/ Dashboard CSS
tests/ 轻量测试
scripts/ 环境配置、运行、测试和报告脚本
bash scripts/test.sh
make test推理测试包括 checkpoint 架构/输出类别回归检查、预测 shape/取值范围和 Dice 完全匹配用例。
