Skip to content

Repository files navigation

NeuroInsight

English

NeuroInsight 是一个本地医学数据分析项目,用 Flask dashboard 串联临床表格建模和海马体 MRI 分割。仓库内的 3 类 2D U-Net 由随仓库提供的 MSD Hippocampus 训练集实际训练;Dashboard 对所选切片执行真实前向推理,并将 Model Prediction 与 Ground Truth 标注并排展示,不把数据集标签冒充为模型输出。

Ground Truth 与 U-Net Model Prediction 海马体分割对比

功能说明

模块 功能
临床建模 训练 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.md
  • docs/results/project_summary.json
  • docs/results/clinical_metrics.csv
  • docs/results/segmentation_metrics.json
  • docs/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.pthdocs/results/segmentation_metrics.json

Flask 请求内的单张切片推理默认使用 CPU,避免 MPS 在多线程 WSGI 请求中的兼容性问题;对这个约 40×55 像素的轻量 2D 模型,权重仅加载一次并被缓存。如果部署服务器的加速后端已经过 WSGI 工作模式验证,可设置 NEUROINSIGHT_INFERENCE_DEVICE=cudamps

常用 Makefile 入口:

make check
make results
make test
make run

Dashboard 默认地址为 http://127.0.0.1:5055,可通过 HOSTPORT 覆盖。自定义数据和 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.txtpyproject.toml

数据说明

  • data/clinical/ 包含随仓库提供的演示临床表格:Dementia_train.csvDementia_test.csvPD_data.csvsim_data.csv
  • Dementia 表格使用 DXADAS13amyloid_PETtau_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

数据来源

目录结构

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 完全匹配用例。

About

临床生物标志物与海马体 MRI 分析 dashboard

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages