EchoDVT 是一个基于超声视频的深静脉血栓辅助诊断项目,主线流程为: 深静脉血栓(Deep Vein Thrombosis,DVT)是一种常见的血管疾病,其最严重的并发症肺栓塞可导致患者猴死。 加压超声检查是当前诊断DVT的首选影像学方法,但其诊断过程高度依赖操作者经验、单例检查耗时较长且不同医生之间的诊断一致性难以保证。 为解决这些问题,本文设计并实现了EchoDVT——一个基于超声视频的深静脉血栓自动检测系统。
超声视频
→ YOLO 首帧血管检测
→ SAM2 + LoRA 视频分割
→ 21 维时序特征提取
→ RF unified 二分类
→ Web 可视化与 PDF 报告
项目当前的目标不是做通用实验平台,而是收敛成一条稳定、可复现、可展示的主线诊断链路。
当前离线评估与 Web 主线统一使用以下配置:
| 模块 | 当前默认配置 |
|---|---|
| YOLO | yolo/runs/detect/runs/detect/dvt_runs/aug_step5_speckle_translate_scale/weights/best.pt |
| YOLO 阈值 | conf = 0.1 |
| SAM2 主干 | sam2_hiera_large.pt |
| SAM2 微调 | LoRA r8 |
| 多帧提示 | MFP |
| 分类器 | RF unified |
| 分类阈值 | prob >= 0.05 |
| 特征维度 | 21 |
统一模型元信息位于:
results/unified_model/rf_unified.json
当前记录的关键指标为:
train_accuracy = 94.33%val_accuracy = 94.74%
EchoDVT/
├── README.md
├── classify_dvt.py
├── results/
│ └── unified_model/
├── web/
│ ├── app.py
│ ├── services/
│ ├── tabs/
│ ├── utils/
│ └── assets/
├── yolo/
│ ├── inference.py
│ ├── compute_prior_stats.py
│ ├── train_*.py
│ ├── prior_stats.json
│ └── README.md
└── sam2/
├── inference_box_prompt_large.py
├── inference_lora.py
├── train_lora.py
├── checkpoints/
├── sam2/
├── README_EchoDVT.md
└── README.md
当前主线使用的分割数据位于:
sam2/dataset/
├── train/ # 300 例,全部正常
└── val/ # 76 例,38 正常 + 38 患者
每个 case 通常包含:
images/masks/
其中 mask 的语义约定为:
0 = 背景1 = 动脉2 = 静脉
Web 的数据输入页还支持浏览:
test/
├── normal/
└── patient/
这部分主要用于病例浏览和推理,不等同于带稀疏标注的 train / val 分割集。
负责首帧动脉/静脉检测,并在漏检时利用位置先验补全缺失框。
重点:
- 渐进式增强训练
- Speckle 噪声增强
- 先验补全与重叠修正
详见 yolo/README.md。
负责视频分割与训练。
当前主线是:
- SAM2 Large
- LoRA 微调
- 多帧提示 MFP
- 相对位置约束 RPA
V1 的 adaptive-memory 支线已经移除,不属于当前支持实现。
详见:
负责从语义 mask 序列中提取 21 维时序特征,并使用统一 RF 分类器完成 DVT 判断。
输出核心包括:
probabilitythresholdis_dvtvcr- 全量特征字典
负责将整条主线串成可交互界面。
当前 Web 设计原则:
- 固定最优权重
- 固定稳定参数
- 支持单案例完整分析
- 不对外暴露实验性变体切换
详见 web/README.md。
conda activate echodvt
cd /data1/ouyangxinglong/EchoDVT/web
python app.py --server-name 0.0.0.0 --port 18081浏览器访问:
http://<server-ip>:18081
如果通过 SSH 使用,建议本地转发:
ssh -N -L 7860:127.0.0.1:18081 <user>@<server>cd yolo
python inference.py \
--weights runs/detect/runs/detect/dvt_runs/aug_step5_speckle_translate_scale/weights/best.pt \
--split val \
--conf 0.1cd sam2
python inference_lora.py \
--lora-weights checkpoints/lora_runs/lora_r8_lr0.0003_e25_20260314_153210/lora_best.pt \
--lora-r 8 \
--split val \
--multi-frame-prompt Truepython classify_dvt.py --split val推荐直接使用项目环境:
conda activate echodvt核心依赖包括:
torchtorchvisionultralyticsgradio >= 6.0opencv-pythonmatplotlibscikit-learnpandasscipy
为了减少重复维护,当前文档分工如下:
- 本文件:项目总览、主线配置、目录与入口
- web/README.md:当前 Web 结构、状态流和使用方式
- yolo/README.md:YOLO 训练与检测设计
- sam2/README_EchoDVT.md:SAM2 定制点与分割主线
如果代码与 README 不一致,应优先以当前代码实现为准,再回补文档。