说明文档
CxTissueSeg
概述
CxTissueSeg 模型用于对H&E病理切片中的组织块进行二值分割。 该模型专为在资源受限的系统上高效运行而设计,可在典型 CPU 上不到 1 秒内完成一张切片的组织分割。
该模型在我们关联数据集中手动精选的切片上进行训练,在测试集上实现了 0.93 的组织 mIoU。 默认情况下,模型输出 logits,其中正类为预测的组织,负类为预测的背景。 建议将模型与我们开源的分块推理框架配合使用,该框架将通过分块和拼接结果来处理完整图像的推理。
本模型使用 PyTorch 和 Segmentation Models PyTorch 进行训练。
它采用带有 MobileNet-v3 编码器的 UNet 解码器——具体而言,我们使用 timm/mobilenetv3_small_100 作为编码器。
我们以 pickled 格式(model.pth)和 safetensors(model.safetensors)两种格式提供模型权重。
我们还提供了导出为 ONNX 格式的模型(model.onnx),可与 ONNX Runtime 配合使用,从而实现更高效的运行并支持跨编程语言使用。
如需体验通过 ONNX Runtime 在浏览器中运行模型的演示,请访问:http://www.conflux.xyz/demos/tissue-segmentation
我们还提供了一个静态量化模型(int8),可通过 ONNX Runtime 使用(model_qint8.onnx),但其性能不如完整的 float32 模型(mIoU 为 0.85,而非 0.93)。
有关模型背景的更多详情,请参阅博客文章:http://www.conflux.xyz/blog/tissue-segmentation
使用方法
CxTissueSeg 在 512 x 512 像素的图像块上进行训练,这些图像块来自 40 微米/像素(MPP)的全切片缩略图——相比数据集中的图像进行了 4 倍下采样。
因此,在使用模型进行推理时,务必在 40 MPP 的缩略图上运行,并在相同尺寸(512 x 512)的图块上进行推理。
在对图块进行填充时,请使用纯白色填充:rgb(255, 255, 255)。
为了简化操作,我们提供了一个更通用的分割库来辅助执行分块推理:https://github.com/conflux-xyz/conflux-segmentation
创建分割模型
ONNX
# pip install conflux-segmentation[onnx] onnxruntime huggingface_hub
import onnxruntime as ort
from conflux_segmentation import Segmenter
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
\"conflux-xyz/cx-tissue-seg\", filename=\"model.onnx\"
)
session = ort.InferenceSession(model_path)
segmenter = Segmenter.from_onnx(session, activation=\"sigmoid\")
PyTorch
# pip install conflux-segmentation[torch] torch segmentation-models-pytorch huggingface_hub safetensors
import segmentation_models_pytorch as smp
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
model_path = hf_hub_download(
\"conflux-xyz/cx-tissue-seg\", filename=\"model.safetensors\"
)
state_dict = load_file(model_path)
net = smp.Unet(
encoder_name=\"tu-mobilenetv3_small_100\", encoder_weights=None, activation=None
)
net.load_state_dict(state_dict)
net.eval()
# Optionally, trace the model to get a TorchScript ScriptModule
# example = torch.randn(1, 3, 512, 512)
# net = torch.jit.trace(net, example)
# net.eval()
from conflux_segmentation import Segmenter
segmenter = Segmenter.from_torch(net, activation=\"sigmoid\")
执行分割!
import cv2
# A 40 MPP thumbnail: H x W x 3 image array of np.uint8
image = cv2.cvtColor(cv2.imread(\"/path/to/large/image\"), cv2.COLOR_BGR2RGB)
# Alternatively, use `openslide` or `tiffslide` to get a 40 MPP thumbnail
# H x W boolean array
mask = segmenter(image).to_binary().get_mask()
tissue_fraction = mask.sum() / mask.size
print(f\"Fraction of slide with tissue: {tissue_fraction:.3f}\")
致谢
我们感谢 TCGA 研究网络,用于训练的切片最初来源于此。
根据其引用要求:
此处展示的结果全部或部分基于 TCGA 研究网络生成的数据:https://www.cancer.gov/tcga。"
conflux-xyz/cx-tissue-seg
作者 conflux-xyz
创建时间: 2025-02-06 19:23:42+00:00
更新时间: 2025-10-20 16:51:20+00:00
在 Hugging Face 上查看