许可证:apache-2.0
语言:
- 英文
评估指标:
- F1分数
标签:
- 细胞分割
- StarDist
- Hover-Net
库名称:transformers
流水线标签:图像分割
数据集:
- Lewislou/cell_samples
细胞分割模型卡片(cell-seg-sribd)
本仓库提供了Sribd-med团队针对NeurIPS-CellSeg挑战赛的解决方案。我们的方法细节详见论文《多模态图像中基于低级线索的多流细胞分割》。部分代码源自NeurIPS-CellSeg-Baseline仓库的基线代码。
您可通过以下步骤复现我们的方法:
快速开始指南
通过命令安装依赖项:
python -m pip install -r requirements.txt
训练详情
训练数据
竞赛训练与调优数据集可从官网下载:https://neurips22-cellseg.grand-challenge.org/dataset/
另可获取以下三个公开数据集:
Cellpose:https://www.cellpose.org/dataset
Omnipose:http://www.cellpose.org/dataset_omnipose
Sartorius:https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/overview
环境与依赖:
通过以下命令安装依赖:
python -m pip install -r requirements.txt
使用方式
使用方法示例:
from skimage import io, segmentation, morphology, measure, exposure
from sribd_cellseg_models import MultiStreamCellSegModel, ModelConfig
import numpy as np
import tifffile as tif
import requests
import torch
from PIL import Image
from overlay import visualize_instances_map
import cv2
img_name = 'test_images/cell_00551.tiff'
def normalize_channel(img, lower=1, upper=99):
non_zero_vals = img[np.nonzero(img)]
percentiles = np.percentile(non_zero_vals, [lower, upper])
if percentiles[1] - percentiles[0] > 0.001:
img_norm = exposure.rescale_intensity(img, in_range=(percentiles[0], percentiles[1]), out_range='uint8')
else:
img_norm = img
return img_norm.astype(np.uint8)
if img_name.endswith('.tif') or img_name.endswith('.tiff'):
img_data = tif.imread(img_name)
else:
img_data = io.imread(img_name)
if len(img_data.shape) == 2:
img_data = np.repeat(np.expand_dims(img_data, axis=-1), 3, axis=-1)
elif len(img_data.shape) == 3 and img_data.shape[-1] > 3:
img_data = img_data[:, :, :3]
pre_img_data = np.zeros(img_data.shape, dtype=np.uint8)
for i in range(3):
img_channel_i = img_data[:, :, i]
if len(img_channel_i[np.nonzero(img_channel_i)]) > 0:
pre_img_data[:, :, i] = normalize_channel(img_channel_i, lower=1, upper=99)
my_model = MultiStreamCellSegModel.from_pretrained("Lewislou/cellseg_sribd")
checkpoints = torch.load('model.pt')
my_model.__init__(ModelConfig())
my_model.load_checkpoints(checkpoints)
with torch.no_grad():
output = my_model(pre_img_data)
overlay = visualize_instances_map(pre_img_data, star_label)
cv2.imwrite('prediction.png', cv2.cvtColor(overlay, cv2.COLOR_RGB2BGR))
引用
若使用本代码,请引用以下论文:
@misc{
lou2022multistream,
title={多模态图像中基于低级线索的多流细胞分割},
author={娄伟 and 余欣怡 and 刘晨宇 and 万翔 and 李冠斌 and 刘思琪 and 李浩峰},
year={2022},
url={https://openreview.net/forum?id=G24BybwKe9}
}