# 超声提示多标签分类模型 基于 **TransMIL + Query2Label** 混合架构的甲状腺超声图像多标签分类模型。 ## 模型架构 - **Backbone**: ResNet-50 (预训练) - **特征聚合**: TransMIL (Nystrom Attention) - **多标签分类**: Query2Label (Transformer Decoder) - **损失函数**: Asymmetric Loss (处理类别不平衡) ## 17类标签 | 序号 | 标签 | 序号 | 标签 | |:---:|:---|:---:|:---| | 1 | TI-RADS 1级 | 10 | 囊肿 | | 2 | TI-RADS 2级 | 11 | 淋巴结 | | 3 | TI-RADS 3级 | 12 | 胶质潴留 | | 4 | TI-RADS 4a级 | 13 | 弥漫性病变 | | 5 | TI-RADS 4b级 | 14 | 结节性甲状腺肿 | | 6 | TI-RADS 4c级 | 15 | 桥本氏甲状腺炎 | | 7 | TI-RADS 5级 | 16 | 反应性 | | 8 | 钙化 | 17 | 转移性 | | 9 | 甲亢 | | | ## 目录结构 ``` HintsPrediction/ ├── README.md # 本文件 ├── requirements.txt # 依赖列表 ├── config.yaml # 配置文件(需修改路径) ├── models/ # 模型代码 │ ├── __init__.py │ ├── transmil_q2l.py # 主模型架构 │ ├── transformer.py # Transformer 组件 │ └── aslloss.py # 损失函数 ├── checkpoints/ │ └── checkpoint_best.pth # 最佳模型权重 ├── scripts/ # 懒人脚本 │ ├── train.sh │ ├── evaluate.sh │ └── infer_single.sh ├── train_hybrid.py # 训练代码 ├── evaluate.py # 评估代码 ├── thyroid_dataset.py # 数据集加载 └── infer_single_case.py # 单步推理代码 ``` ## 快速开始 ### 1. 环境配置 ```bash # 安装依赖 pip install -r requirements.txt ``` ### 2. 单步推理 ```bash 用法: # 指定多个图像文件 python infer_single_case.py --images /path/to/img1.png /path/to/img2.png --threshold 0.5 # 指定图像文件夹 python infer_single_case.py --image_dir /path/to/case_folder/ --threshold 0.5 # 或使用脚本 用法1: bash scripts/infer_single.sh /path/to/image1.png /path/to/image2.png ... 用法2: bash scripts/infer_single.sh --image_dir /path/to/case_folder/ ``` ### 3. 评估模型 ```bash # 先修改 config.yaml 中的数据路径 # 然后运行评估 python evaluate.py # 或 bash scripts/evaluate.sh ``` ### 4. 训练模型 ```bash # 先修改 config.yaml 中的数据路径 python train_hybrid.py --config config.yaml # 或 bash scripts/train.sh ``` ## 配置说明 使用前请修改 `config.yaml` 中的数据路径: ```yaml data: data_root: "/path/to/your/ReportData_ROI/" annotation_csv: "/path/to/your/thyroid_multilabel_annotations.csv" val_json: "/path/to/your/classification_val_set_single.json" test_json: "/path/to/your/classification_test_set_single.json" ``` ## 性能指标 在测试集上的性能(请参考 `checkpoints/evaluation_report.csv`) ## 注意事项 1. 推理时需要 GPU(推荐),CPU 也可运行但较慢 2. 单病例可输入多张图像,模型会自动聚合特征 3. 默认阈值为 0.5,可根据需要调整