# SAMIHS ICH Segmentation Package 本目录封装当前项目中正在使用的 SAMIHS 出血分割模型,提供一个稳定的单例接口:输入 3D brain CT NIfTI,输出二值化出血 label NIfTI。 ## Contents | Path | Description | |---|---| | `segment_ich.py` | 单个 3D CT NIfTI 到 binary mask NIfTI 的 CLI/API wrapper。 | | `weights/SAMIHS_09170527_2_0.483.pth` | 当前使用的 SAMIHS 权重软链接。 | | `scripts/run_segment_example.sh` | 命令行调用示例。 | | `INPUT_SPEC.md` | 输入格式、灰度值分布、方向和 slice axis 要求。 | 依赖的原始 SAMIHS 工程默认路径: ```text /data/wxh/Medical/to_cfff/metrics/brain_bleed/SAMIHS ``` 当前默认权重源路径: ```text /data/wxh/Medical/to_cfff/metrics/brain_bleed/SAMIHS/ckpts/Extended_add_neg_210/SAMIHS_09170527_2_0.483.pth ``` ## CLI Usage ```bash /data/wxh/miniconda3/envs/flowmatching/bin/python \ /data/wxh/Medical/samihs_ich_segmentation_package/segment_ich.py \ --input /path/to/brain_ct.nii.gz \ --output /path/to/brain_ct_ich_mask.nii.gz \ --device cuda:0 \ --batch-size 8 \ --threshold 0.5 ``` 输出是与输入 shape/affine 一致的 `uint8` NIfTI,取值为 `0/1`。 ## Input Requirements 详细要求见 [INPUT_SPEC.md](INPUT_SPEC.md)。重点如下: - 输入必须是单个 3D CT NIfTI,`.nii` 或 `.nii.gz`。 - 不支持 DICOM 文件夹、4D NIfTI、多通道图像。 - 像素值应是有限数值,不能含 NaN/Inf。 - 推荐输入是与项目数据一致的轴位脑 CT,例如 `/data2/gzk/256_standardized_brain_rescale/**/*.nii`。 - wrapper 会逐 slice 做 `0.5%-99.5%` percentile clipping 和 min-max normalization,因此模型不直接使用绝对 HU 阈值。 - 默认 `--slice-axis auto` 会把最小维度作为 depth/slice 轴;如果输入不是这种排列,需要显式指定 `--slice-axis 0/1/2`。 - wrapper 不会根据 NIfTI affine 自动重排方向;模型使用的是数组切片顺序。输入方向应与项目标准 CT 一致。 ## Python API ```python from pathlib import Path from segment_ich import segment_nii metadata = segment_nii( input_nii=Path("/path/to/brain_ct.nii.gz"), output_nii=Path("/path/to/brain_ct_ich_mask.nii.gz"), device="cuda:0", batch_size=8, threshold=0.5, ) print(metadata) ``` ## Method 1. 读取 3D NIfTI。 2. 自动选择 slice axis:默认选择最小维度作为 depth/slice 维度;也可用 `--slice-axis 0/1/2` 显式指定。 3. 对每个 2D slice 做 percentile clipping,默认 `0.5%` 到 `99.5%`,再 min-max normalize 到 `[0,1]`。 4. resize 到 `1024x1024`,按原 SAMIHS 推理约定做 `rot90` 方向校正。 5. SAMIHS 输出 logits,`sigmoid` 得概率图。 6. 概率图旋回并 resize 回原始 slice 尺寸。 7. `prob >= 0.5` 得 binary mask,堆回原始 3D shape。 ## Important Parameters | Parameter | Default | Meaning | |---|---:|---| | `--threshold` | `0.5` | 概率二值化阈值。 | | `--encoder-input-size` | `1024` | SAMIHS 2D encoder 输入尺寸。 | | `--batch-size` | `8` | slice-level batch size;1024 输入下该值在当前 44GB GPU 上稳定。 | | `--slice-axis` | `auto` | slice/depth 轴;默认取最小维度。 | | `--no-rotate` | off | 关闭原 SAMIHS 推理中的 rot90 方向校正,一般不建议。 | ## Notes - 该模型是 2D slice segmentation,不是 3D UNet;3D mask 是逐 slice 推理后堆叠得到。 - 权重文件在本包中是软链接,避免重复占用 359MB。如需迁移到其他机器,需要同时复制原始 SAMIHS 工程和权重文件。 - 如果出现 CUDA OOM,优先减小 `--batch-size`,例如 `4` 或 `2`。