【代码已开源】从QuPath标注到WSI组织分割,支持QuPath导出ROI区域Patch,实施Patch级别的组织/肿瘤区域分割
WSI Segmenter 是一个基于轻量化分割网络 DeepLab v3 架构的病理切片肿瘤区域分割工具,可实现切片中 ROI(感兴趣区域)的分割,支持 QuPath 软件(版本 >= 0.4.2);该工具使用预训练的 ResNet 作为骨干网络,通过深度学习算法实现肿瘤区域分割。
仓库地址
https://github.com/HaoyuCui/WSI_Segmenter
功能介绍
- 病理切片的肿瘤区域分割(Patch-level的像素分割,低计算成本)
- 配合 QuPath 生成切片块与标注掩码
- 提供训练、可视化、预测的完整流程支持,可搭配Patch导出流程使用
安装
- 克隆本项目
- 运行
pip install -r requirements.txt
运行
-
QuPath中标注,并指定类别为
Tumor
-
在 QuPath 中运行
make_tile_mask_pairs.groovy
生成Patch-Mask样本对。详情请参阅 image.sc请确保已在 QuPath 中添加注释,并在脚本中指定参数
QuPath如何运行脚本文件? - 参照这篇博客:link
-
运行该步骤后,你将看到以下文件夹结构:
├── /PATH/TO/DATA │ ├── slide_1 │ │ ├── patch_1.jpeg # tile │ │ ├── patch_1.png # mask │ │ ├── ... │ ├── slide_2 │ │ ├── patch_1.jpeg # tile │ │ ├── patch_1.png # mask │ │ ├── ... │ ├── ... │ └── slide_n │ ├── ... │ └── patch_n.png
示例结构可在
eg
文件夹中找到。后缀:
- 原图为
jpeg
- 掩膜为
png
- 原图为
-
运行以下命令进行训练,并将训练过程可视化:
python -m visdom.server
python train.py --data_dir /PATH/TO/DATA --epochs 20
预测结果(上图)和Ground-truth(下图)将在 visdom 服务器中显示和刷新。
-
同样,也可以在导出Patch时使用,确保保存的Patch都位于ROI区域
import torch from torchvision import transforms def tile_contains_tumor(tile, seg_model, device, threshold_tumor=0.5): tile = tile.convert("RGB") tile = tile.resize((256, 256)) tile = transforms.ToTensor()(tile).unsqueeze(0).to(device) with torch.no_grad(): seg_model.eval() output = torch.sigmoid(seg_model(tile)['out']).mean() if output < threshold_tumor: return True else: return False def TileExporter(): # Tile/Patch导出代码 pass if __name__ == "__main__": # 载入模型 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 载入前面训练得到的权重文件 model = torch.load(r'best.pt').to(device) tiles = TileExporter() for tile in tiles: if tile_contains_tumor(tile, model, device): # 逻辑1 else: # 逻辑2 # 保存结果
如果有问题,欢迎联系我。
欢迎Star、点赞和收藏,转载请注明出处,谢谢!