# Image-Segmentation-COBRA **Repository Path**: kaiserkatze/image-segmentation-cobra ## Basic Information - **Project Name**: Image-Segmentation-COBRA - **Description**: 基于 COBRA 对医学图像进行分割 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-21 - **Last Updated**: 2026-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # COBRA 模型在 BTCV 数据集上的肾脏分割 ## 项目概述 本项目使用 **COBRA**(Coarse-to-fine Organ Bounding-box Registration Architecture)模型, 基于 BTCV(Beyond the Cranial Vault)腹部 CT 数据集,完成**右肾(Kidney_right)** 和**左肾(Kidney_left)**的目标检测与分割任务。 --- ## COBRA 模型方法、算法与原理 ### 核心思想 COBRA 是由 University of Manchester (UoM) RRR 团队为 MICCAI 2021 FLARE 挑战赛开发的 **两阶段粗到精(Coarse-to-Fine)腹部多器官分割框架**: ``` 输入 CT 图像 │ ▼ ┌─────────────────────────────────────┐ │ Stage 1: Locator(粗定位网络) │ │ • 全图低分辨率下采样输入 │ │ • 3D U-Net 架构 │ │ • 输出粗分割图 + 器官 Bounding Box │ └─────────────────────────────────────┘ │ │ 检测到的 ROI Bounding Box ▼ ┌─────────────────────────────────────┐ │ Stage 2: Segmentor(精细分割网络) │ │ • ROI 区域高分辨率裁剪 │ │ • 3D U-Net 架构(更深层) │ │ • 输出精细语义分割图 │ └─────────────────────────────────────┘ │ ▼ 将 ROI 预测结果映射回原图空间 ``` ### 网络架构 **3D U-Net(编码器-解码器 + 跳跃连接)** - **编码器**:4 级下采样,每级包含双卷积块(Conv3D + InstanceNorm + LeakyReLU) - **瓶颈层**:最深特征提取层 - **解码器**:转置卷积上采样,与编码器对应级别的特征图跳跃连接后再卷积 - **输出层**:1×1×1 卷积,输出类别概率图 **关键设计**: - **Instance Normalization**:对小 batch 医学图像更稳定(相比 BatchNorm) - **Leaky ReLU**:防止神经元死亡(负值梯度不为零) - **跳跃连接**:保留多尺度细节信息,改善分割边界精度 ### 预处理流水线 | 步骤 | 操作 | 参数 | |------|------|------| | HU 裁剪 | 窗宽窗位限制 | [-175, 250] HU(腹部软组织窗) | | 归一化 | 线性缩放 | [0, 1] | | 重采样 | 体素间距统一 | [1.5, 1.5, 2.0] mm | | 尺寸调整 | Stage1 全图 | [192, 192, 64] | | 尺寸调整 | Stage2 ROI | [192, 192, 64] | ### BTCV 数据集标签映射 | 标签值 | 器官 | |--------|------| | 2 | Right Kidney(右肾)✓ 目标 | | 3 | Left Kidney(左肾)✓ 目标 | | 1,4-13 | 其他腹部器官(不参与评估) | ### 损失函数 FLARE21 框架使用**Dice Loss + Cross-Entropy Loss 的组合损失**: ``` L = α · L_Dice + β · L_CE L_Dice = 1 - (2·|P∩G| + ε) / (|P| + |G| + ε) L_CE = -Σ G·log(P) ``` ### 后处理 1. **Softmax 概率化**:将 logits 转为类别概率 2. **Argmax 预测**:取最大概率类别作为分割结果 3. **最大连通域保留**:去除散点噪声,每类保留最大连通分量 --- ## 图像分割程序流程图 ```mermaid flowchart TD A([开始]) --> B["加载 BTCV 数据集\nBTCV imagesTr / labelsTr"] B --> C["数据预处理\nHU裁剪 / 归一化 / 重采样"] C --> D["训练集/验证集划分\n80% / 20%"] D --> E{"推理阶段"} E --> F["Stage 1: Locator\n全图低分辨率输入\n192×192×64"] F --> G["3D U-Net 编码器\n提取多尺度特征"] G --> H["3D U-Net 解码器\n跳跃连接 + 上采样"] H --> I["粗分割输出\n检测肾脏 Bounding Box"] I --> J{"是否检测到肾脏?"} J -- 是 --> K["裁剪 ROI 区域\n并添加扩展边距"] J -- 否 --> L["使用全图作为 ROI"] K --> M L --> M M["Stage 2: Segmentor\nROI 高分辨率输入\n192×192×64"] --> N["3D U-Net 精细分割"] N --> O["Softmax 概率图\n3类: 背景/右肾/左肾"] O --> P["Argmax 预测标签"] P --> Q["后处理\n保留最大连通域"] Q --> R["将 ROI 预测\n映射回原图空间"] R --> S["标签映射\n右肾→BTCV标签2\n左肾→BTCV标签3"] S --> T["保存 NIfTI 预测文件\npred_{case_id}.nii.gz"] T --> U["评估阶段"] U --> V["加载预测与真值标签"] V --> W["计算评估指标\nDice / IoU / HD95 / ASD"] W --> X["生成统计报告\n均值 / 标准差 / 中位数"] X --> Y["生成可视化图表\n箱线图 / 条形图 / 切片图"] Y --> Z["保存 CSV / JSON 结果"] Z --> AA([结束]) style A fill:#4CAF50,color:#fff style AA fill:#4CAF50,color:#fff style F fill:#2196F3,color:#fff style M fill:#9C27B0,color:#fff style U fill:#FF9800,color:#fff style J fill:#FF5722,color:#fff ``` --- ## 执行顺序 ### 0. 前置条件 确认 BTCV 数据集已存放于 `~/abdomen/`: ```bash ls ~/abdomen/imagesTr ~/abdomen/labelsTr ``` ### 1. 创建并激活虚拟环境,安装依赖 ```bash cd ~/kidney_segmentation bash setup_environment.sh source venv/bin/activate ``` ### 2. 下载 COBRA 预训练模型权重 ```bash bash download_model.sh ``` ### 3. 检查环境版本信息 ```bash source venv/bin/activate python check_versions.py ``` ### 4. 运行图像分割推理 ```bash # 对验证集(全部训练数据的20%)进行推理 python run_segmentation.py --use_val_split # 或对单个文件推理 python run_segmentation.py --single_case ~/abdomen/imagesTr/img0001.nii.gz ``` ### 5. 评估分割结果 ```bash python evaluate_results.py ``` ### 6. 查看结果 ```bash # 查看预测文件 ls outputs/predictions/ # 查看可视化图表 ls outputs/visualizations/ # 查看 CSV 统计结果 cat outputs/per_case_metrics.csv cat outputs/summary_statistics.csv # 查看推理日志 cat logs/segmentation.log ``` --- ## 完整目录结构 ``` kidney_segmentation/ ├── README.md # 本文件 ├── requirements.txt # Python 依赖列表 ├── setup_environment.sh # 环境搭建脚本(venv+依赖安装) ├── download_model.sh # 模型权重下载脚本 ├── run_segmentation.py # 主推理脚本 ├── check_versions.py # 版本检查脚本 ├── evaluate_results.py # 结果评估脚本 ├── configs/ │ └── cobra_config.py # 模型配置文件 ├── utils/ │ ├── __init__.py │ ├── data_utils.py # 数据处理工具函数 │ └── metrics.py # 评估指标函数 ├── FLARE21/ # COBRA 官方仓库(克隆后生成) ├── data/ │ └── abdomen -> ~/abdomen # 数据集软链接 ├── models/ │ ├── locator_weights.pth # 定位网络权重 │ └── segmentor_weights.pth # 分割网络权重 ├── outputs/ │ ├── predictions/ # 分割预测结果 (NIfTI) │ │ └── pred_0001.nii.gz │ ├── visualizations/ # 可视化图表 (PNG) │ │ ├── metrics_boxplot.png │ │ ├── per_case_dice.png │ │ ├── volume_correlation.png │ │ └── visualization_*.png │ ├── per_case_metrics.csv # 逐案例指标 CSV │ ├── summary_statistics.csv # 统计摘要 CSV │ └── evaluation_results.json # 完整评估结果 JSON └── logs/ ├── segmentation.log # 推理运行日志 └── inference_log.json # 推理统计日志 ``` --- ## 评估指标说明 | 指标 | 全称 | 理想值 | 说明 | |------|------|--------|------| | **Dice** | Dice Similarity Coefficient | →1.0 | 分割重叠度,最常用指标 | | **IoU** | Intersection over Union | →1.0 | 交并比,Jaccard 指数 | | **Precision** | 精确率 | →1.0 | TP/(TP+FP),假阳性率 | | **Recall** | 召回率 | →1.0 | TP/(TP+FN),漏检率 | | **VS** | Volume Similarity | →1.0 | 体积相似度 | | **HD95** | 95th Hausdorff Distance | →0 mm | 95%百分位表面距离 | | **ASD** | Average Surface Distance | →0 mm | 平均对称表面距离 | --- ## 参考文献 - FLARE21 官方仓库: https://github.com/rrr-uom-projects/FLARE21 - BTCV 数据集: https://www.synapse.org/#!Synapse:syn3193805/wiki/89480 - Ronneberger et al., "U-Net: Convolutional Networks for Biomedical Image Segmentation", MICCAI 2015 - MICCAI 2021 FLARE 挑战赛: https://flare.grand-challenge.org/