细胞检测
beta-11 release
https://openreview.net/forum?id=YtgRjBw-7GJ
https://bbbc.broadinstitute.org/BBBC039 (CC0)
https://bbbc.broadinstitute.org/BBBC041(CC BY-NC-SA 3.0)
确保您已安装 PyTorch。
pip install -U celldetection
pip install git+https://github.com/FZJ-INM1-BDA/celldetection.git
model = cd . fetch_model ( model_name , check_hash = True )
型号名称 | 训练数据 | 关联 |
---|---|---|
ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c | BBBC039、BBBC038、Omnipose、Cellpose、Sartorius - 细胞实例分割、Livecell、NeurIPS 22 CellSeg 挑战 | ? |
import torch , cv2 , celldetection as cd
from skimage . data import coins
from matplotlib import pyplot as plt
# Load pretrained model
device = 'cuda' if torch . cuda . is_available () else 'cpu'
model = cd . fetch_model ( 'ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c' , check_hash = True ). to ( device )
model . eval ()
# Load input
img = coins ()
img = cv2 . cvtColor ( img , cv2 . COLOR_GRAY2RGB )
print ( img . dtype , img . shape , ( img . min (), img . max ()))
# Run model
with torch . no_grad ():
x = cd . to_tensor ( img , transpose = True , device = device , dtype = torch . float32 )
x = x / 255 # ensure 0..1 range
x = x [ None ] # add batch dimension: Tensor[3, h, w] -> Tensor[1, 3, h, w]
y = model ( x )
# Show results for each batch item
contours = y [ 'contours' ]
for n in range ( len ( x )):
cd . imshow_row ( x [ n ], x [ n ], figsize = ( 16 , 9 ), titles = ( 'input' , 'contours' ))
cd . plot_contours ( contours [ n ])
plt . show ()
import celldetection as cd
cd.models.CPN
cd.models.CpnU22
cd.models.CPNCore
cd.models.CpnResUNet
cd.models.CpnSlimU22
cd.models.CpnWideU22
cd.models.CpnResNet18FPN
cd.models.CpnResNet34FPN
cd.models.CpnResNet50FPN
cd.models.CpnResNeXt50FPN
cd.models.CpnResNet101FPN
cd.models.CpnResNet152FPN
cd.models.CpnResNet18UNet
cd.models.CpnResNet34UNet
cd.models.CpnResNet50UNet
cd.models.CpnResNeXt101FPN
cd.models.CpnResNeXt152FPN
cd.models.CpnResNeXt50UNet
cd.models.CpnResNet101UNet
cd.models.CpnResNet152UNet
cd.models.CpnResNeXt101UNet
cd.models.CpnResNeXt152UNet
cd.models.CpnWideResNet50FPN
cd.models.CpnWideResNet101FPN
cd.models.CpnMobileNetV3LargeFPN
cd.models.CpnMobileNetV3SmallFPN
另请参阅 Timm 文档。
import timm
timm . list_models ( filter = '*' ) # explore available models
cd.models.CpnTimmMaNet
cd.models.CpnTimmUNet
cd.models.TimmEncoder
cd.models.TimmFPN
cd.models.TimmMaNet
cd.models.TimmUNet
import segmentation_models_pytorch as smp
smp . encoders . get_encoder_names () # explore available models
encoder = cd . models . SmpEncoder ( encoder_name = 'mit_b5' , pretrained = 'imagenet' )
在smp
文档中查找 Smp 编码器列表。
cd.models.CpnSmpMaNet
cd.models.CpnSmpUNet
cd.models.SmpEncoder
cd.models.SmpFPN
cd.models.SmpMaNet
cd.models.SmpUNet
# U-Nets are available in 2D and 3D
import celldetection as cd
model = cd . models . ResNeXt50UNet ( in_channels = 3 , out_channels = 1 , nd = 3 )
cd.models.U22
cd.models.U17
cd.models.U12
cd.models.UNet
cd.models.WideU22
cd.models.SlimU22
cd.models.ResUNet
cd.models.UNetEncoder
cd.models.ResNet50UNet
cd.models.ResNet18UNet
cd.models.ResNet34UNet
cd.models.ResNet152UNet
cd.models.ResNet101UNet
cd.models.ResNeXt50UNet
cd.models.ResNeXt152UNet
cd.models.ResNeXt101UNet
cd.models.WideResNet50UNet
cd.models.WideResNet101UNet
cd.models.MobileNetV3SmallUNet
cd.models.MobileNetV3LargeUNet
# Many MA-Nets are available in 2D and 3D
import celldetection as cd
encoder = cd . models . ConvNeXtSmall ( in_channels = 3 , nd = 3 )
model = cd . models . MaNet ( encoder , out_channels = 1 , nd = 3 )
cd.models.MaNet
cd.models.SmpMaNet
cd.models.TimmMaNet
cd.models.FPN
cd.models.ResNet18FPN
cd.models.ResNet34FPN
cd.models.ResNet50FPN
cd.models.ResNeXt50FPN
cd.models.ResNet101FPN
cd.models.ResNet152FPN
cd.models.ResNeXt101FPN
cd.models.ResNeXt152FPN
cd.models.WideResNet50FPN
cd.models.WideResNet101FPN
cd.models.MobileNetV3LargeFPN
cd.models.MobileNetV3SmallFPN
# ConvNeXt Networks are available in 2D and 3D
import celldetection as cd
model = cd . models . ConvNeXtSmall ( in_channels = 3 , nd = 3 )
cd.models.ConvNeXt
cd.models.ConvNeXtTiny
cd.models.ConvNeXtSmall
cd.models.ConvNeXtBase
cd.models.ConvNeXtLarge
# Residual Networks are available in 2D and 3D
import celldetection as cd
model = cd . models . ResNet50 ( in_channels = 3 , nd = 3 )
cd.models.ResNet18
cd.models.ResNet34
cd.models.ResNet50
cd.models.ResNet101
cd.models.ResNet152
cd.models.WideResNet50_2
cd.models.ResNeXt50_32x4d
cd.models.WideResNet101_2
cd.models.ResNeXt101_32x8d
cd.models.ResNeXt152_32x8d
cd.models.MobileNetV3Large
cd.models.MobileNetV3Small
在 Docker Hub 上找到我们:https://hub.docker.com/r/ericup/celldetection
您可以通过以下方式获取最新版本的celldetection
:
docker pull ericup/celldetection:latest
docker run --rm
-v $PWD/docker/outputs:/outputs/
-v $PWD/docker/inputs/:/inputs/
-v $PWD/docker/models/:/models/
--gpus="device=0"
celldetection:latest /bin/bash -c
"python cpn_inference.py --tile_size=1024 --stride=768 --precision=32-true"
docker run --rm
-v $PWD/docker/outputs:/outputs/
-v $PWD/docker/inputs/:/inputs/
-v $PWD/docker/models/:/models/
celldetection:latest /bin/bash -c
"python cpn_inference.py --tile_size=1024 --stride=768 --precision=32-true --accelerator=cpu"
您还可以使用以下命令拉取我们的 Docker 映像以与 Apptainer(以前称为 Singularity)一起使用:
apptainer pull --dir . --disable-cache docker://ericup/celldetection:latest
在 Hugging Face 上找到我们并上传您自己的图像进行分割:https://huggingface.co/spaces/ericup/celldetection
还有一个 API(Python 和 JavaScript),允许您远程使用社区 GPU(当前为 Nvidia A100)!
from gradio_client import Client
# Define inputs (local filename or URL)
inputs = 'https://raw.githubusercontent.com/scikit-image/scikit-image/main/skimage/data/coins.png'
# Set up client
client = Client ( "ericup/celldetection" )
# Predict
overlay_filename , img_filename , h5_filename , csv_filename = client . predict (
inputs , # str: Local filepath or URL of your input image
# Model name
'ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c' ,
# Custom Score Threshold (numeric value between 0 and 1)
False , .9 , # bool: Whether to use custom setting; float: Custom setting
# Custom NMS Threshold
False , .3142 , # bool: Whether to use custom setting; float: Custom setting
# Custom Number of Sample Points
False , 128 , # bool: Whether to use custom setting; int: Custom setting
# Overlapping objects
True , # bool: Whether to allow overlapping objects
# API name (keep as is)
api_name = "/predict"
)
# Example usage: Code below only shows how to use the results
from matplotlib import pyplot as plt
import celldetection as cd
import pandas as pd
# Read results from local temporary files
img = imread ( img_filename )
overlay = imread ( overlay_filename ) # random colors per instance; transparent overlap
properties = pd . read_csv ( csv_filename )
contours , scores , label_image = cd . from_h5 ( h5_filename , 'contours' , 'scores' , 'labels' )
# Optionally display overlay
cd . imshow_row ( img , img , figsize = ( 16 , 9 ))
cd . imshow ( overlay )
plt . show ()
# Optionally display contours with text
cd . imshow_row ( img , img , figsize = ( 16 , 9 ))
cd . plot_contours ( contours , texts = [ 'score: %d%% n area: %d' % s for s in zip (( scores * 100 ). round (), properties . area )])
plt . show ()
import { client } from "@gradio/client" ;
const response_0 = await fetch ( "https://raw.githubusercontent.com/scikit-image/scikit-image/main/skimage/data/coins.png" ) ;
const exampleImage = await response_0 . blob ( ) ;
const app = await client ( "ericup/celldetection" ) ;
const result = await app . predict ( "/predict" , [
exampleImage , // blob: Your input image
// Model name (hosted model or URL)
"ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c" ,
// Custom Score Threshold (numeric value between 0 and 1)
false , .9 , // bool: Whether to use custom setting; float: Custom setting
// Custom NMS Threshold
false , .3142 , // bool: Whether to use custom setting; float: Custom setting
// Custom Number of Sample Points
false , 128 , // bool: Whether to use custom setting; int: Custom setting
// Overlapping objects
true , // bool: Whether to allow overlapping objects
// API name (keep as is)
api_name = "/predict"
] ) ;
在这里找到我们的 Napari 插件:https://github.com/FZJ-INM1-BDA/celldetection-napari
在此处了解有关 Napari 的更多信息:https://napari.org 您可以通过 pip 安装它:
pip install git+https://github.com/FZJ-INM1-BDA/celldetection-napari.git
如果您觉得这项工作有用,请考虑给一个星️并引用:
@article{UPSCHULTE2022102371,
title = {Contour proposal networks for biomedical instance segmentation},
journal = {Medical Image Analysis},
volume = {77},
pages = {102371},
year = {2022},
issn = {1361-8415},
doi = {https://doi.org/10.1016/j.media.2022.102371},
url = {https://www.sciencedirect.com/science/article/pii/S136184152200024X},
author = {Eric Upschulte and Stefan Harmeling and Katrin Amunts and Timo Dickscheid},
keywords = {Cell detection, Cell segmentation, Object detection, CPN},
}