用 PathoWish 完成已定位肺肿瘤 CT 分割
从三例真实肺癌 CT 的显式定位出发,生成分割掩膜、独立真值评价和原创项目。平均 Dice 0.886,保留全部病例与完整复现证据。
这次从三例公开肺癌 CT 出发,把显式病灶定位转为分割掩膜、逐例评价和可继续修改的项目。PathoWish 读取参考文献后生成原创代码,真实执行固定参数的种子随机游走,三例 Dice 分别为 0.852、0.928、0.878,平均为 0.886。

绿色为预测,金色为参考轮廓。三例全部保留;各图下方列出真实 IoU、预测面积和 10 mm 比例尺。
1. 准备影像与定位文件
在 MSD 官方开放数据登记页找到 Task06_Lung,下载公开训练集。复现包中的 DOWNLOAD_DATA.py 可按固定范围读取官方归档中的三个病例,核验文件大小与 SHA256,避免下载整套约 9.16 GB 归档。三例影像和标签合计约 317 MB。
目录按下列结构保存:
data/
imagesTr/lung_001.nii.gz
imagesTr/lung_003.nii.gz
imagesTr/lung_004.nii.gz
labelsTr/lung_001.nii.gz
labelsTr/lung_003.nii.gz
labelsTr/lung_004.nii.gz
locations.json
本例适用于已定位病灶的二维分割。病例在看结果前固定为训练集按编号排序的前三例;每例使用标注面积最大的轴向切面和四舍五入后的标注质心作为预登记定位输入,ROI 统一为 65×65 像素。分割程序只读影像和这些定位信息,完整标注轮廓由评价程序读取;参数在评价前固定。评价覆盖完整切面,ROI 外预测视为背景。
定位文件使用 NIfTI 原始存储网格的 0-based 索引,x 为列、y 为行、z 为切片;ROI 的右端和下端为不包含的边界:
| 病例 | z | 中心 x,y | ROI x0,y0,x1,y1 | 前景种子半径 |
|---|---|---|---|---|
| lung_001 | 238 | 124,267 | 92,235,157,300 | 1.5 mm |
| lung_003 | 142 | 394,245 | 362,213,427,278 | 1.5 mm |
| lung_004 | 221 | 331,327 | 299,295,364,360 | 1.5 mm |
使用自己的已定位病灶时,在阅片工具中确认切面与中心,将它们写入相同格式的 locations.json,并在需求中说明坐标约定。先检查生成的定位图,确认十字和 ROI 指向预期病灶。本项目保存了实际使用的完整 JSON,可直接复现上表。

2. 绑定数据并提交需求
打开 PathoWish,在“数据与范围”使用“+ 增加数据”选择上述目录。影像、标签与定位文件放在同一绑定目录中,分别注明用途。
在环境设置中选择已有 Python 环境。本例使用 NumPy、SciPy、scikit-image、pandas、Matplotlib 和 Pillow,CPU 即可执行,保持现有环境不安装或升级包。
进入“建模项目”,填写:
请对所选 MSD Task06_Lung 三例真实肺肿瘤 CT 建立已定位病灶的二维分割项目。读取 locations.json 中的切面、中心和固定 ROI,所有病例使用相同参数。完整标签轮廓仅用于独立评价,不用于预测或调参。逐例输出 Dice、IoU、精确率、召回率、物理面积、定位图和轮廓叠加图。保留全部病例,生成原创项目代码、方法说明、最小依赖和 PathoWish 品牌报告。
3. 核对参考资料与方案
阶段1“调研文献与资源”读取 *The Medical Segmentation Decathlon*,提炼肺肿瘤数据定义、NIfTI 输入契约和逐例评价方法。阶段2“确认方案与仓库”核对数据、定位、输出及环境选择。
知识库中没有这篇论文时,从 Nature Communications 官方开放文章页下载 PDF,在阶段2“参考文献与自备材料”点击“+ 添加 PDF 文献”,选择文件并核对标题及勾选状态。
本例使用论文作为数据与评价依据,选择基础种子图分割进行原创实现。所需方法不依赖作者仓库或模型权重。核对后,勾选“我已核对方案与所选仓库,确认按以上方案开发”,点击“确认方案并开始定制开发”。
4. 查看模型主导的开发与运行
阶段3“分析源码与定制开发”显示实现进度;阶段4“验证并查看结果”显示真实执行和结果评审。切换阶段可以阅读对应内容。
项目生成五个执行步骤:
| 步骤 | 实际操作 | 主要产物 |
|---|---|---|
| prepare | 核对输入哈希、有界读取指定切面、保留毫米间距与 affine | CT 数组、影像元数据 |
| segment | 固定种子随机游走、保留种子连通区域、填洞 | 三例预测掩膜、种子图、参数记录 |
| evaluate | 读取独立轮廓,核验同网格,在完整切面计算指标 | 逐例 CSV、GT 数组、指标 JSON |
| plots | 使用实际影像、掩膜和指标绘图 | 四张品牌 PNG |
| verify | 独立集合计数复算指标,检查单位、范围和文件 | 28 项核验记录 |
本例将 HU 裁剪为 [-1000,400] 后归一化,使用半径 1.5 mm 的中心前景种子;ROI 边框和低于 −600 HU 的像素作为背景种子。三个病例共享 beta=130,采用直接解算,再保留包含中心的前景连通区域并填洞。

金色为前景种子,蓝色为背景种子。原始 HU 与定位决定这些种子,完整 GT 轮廓不参与分割。
选定环境中的 SimpleITK 原生扩展无法导入,模型改用项目内有界 NIfTI-1 读取器。独立验收使用 nibabel 5.3.2 校对六个影像/标签文件的选定切面,像素、shape、spacing 和 affine 全部一致。替换及适用格式写入执行选择记录,既有项目环境保持不变。
5. 读懂这次结果
| 病例 | Dice | IoU | 精确率 | 召回率 | 预测面积 mm² | GT 面积 mm² |
|---|---|---|---|---|---|---|
| lung_001 | 0.852018 | 0.742188 | 1.000000 | 0.742188 | 91.341972 | 123.071289 |
| lung_003 | 0.928395 | 0.866359 | 1.000000 | 0.866359 | 165.234375 | 190.722656 |
| lung_004 | 0.877805 | 0.782222 | 0.988764 | 0.789238 | 122.070801 | 152.931396 |

三个预测面积均小于 GT 面积;第一例漏分最明显,第三例还包含少量外溢。平均 Dice 为 0.886073,平均 IoU 为 0.796923。通过逐例表和轮廓叠加,可以定位误差发生的位置,而不只看一个平均分。
物理面积由预测像素数乘以毫米网格面积计算。原文挑战指标使用三维体积,本例指标对应表中三个已定位二维切面。
6. 查看报告、打开代码并复现
执行完成后进入“结果与图表”,查看四张图、逐例 CSV 和汇总报告。点击“打开结果文件夹”读取完整产物;使用项目代码仓库入口打开源码,继续修改分割规则、接口或绘图。汇总报告带有 PathoWish 品牌、真实运行状态及技术选择,可打印为 PDF。
首轮运行已完成分割、评价和出图,核验结果写入 JSON 时遇到 NumPy 布尔类型序列化错误。模型根据日志创建子版本,只将核验值转换为 Python bool,随后五步全部成功、28 项检查通过。修正前后 21 项科学产物逐字节相同,旧版结果保留。
复现包包含原创源码、参考结果、定位输入、固定文件哈希及官方数据下载脚本。在装有列出依赖的环境中执行:
python DOWNLOAD_DATA.py
python REPRODUCE.py
第二条命令重新登记包内输入并运行五步,将新输出写入 artifacts/versions/。reference-results/ 保存本次真实结果,便于逐项比对。
执行与来源记录
最终版本 version-faae9bcf6dd6,最终运行 run-ff1d12bb72;五个步骤全部完成,28 项数值与产物检查通过。方法代码和数据通过真实 Projects / NativeAPI / HostAssistant 链运行,由当前会话模型逐轮阅读、编写、执行评审并修复。上述 UI 步骤是复现操作指南;本次开放全文预置于隔离驱动,验收层级为源码后端执行链。
- Antonelli et al. The Medical Segmentation Decathlon, Nature Communications, 2022。
- MSD 官方数据登记与许可。Task06_Lung 原始临床数据来自 TCIA;影像和标签采用 CC BY-SA 4.0,本教程的 CT 派生图沿用该许可并标注来源。
- scikit-image 随机游走 API。
- NIfTI-1 字段定义。