Skip to main content

Cell Detection with PyTorch.

Project description

Cell Detection

Downloads Test PyPI Documentation Status DOI

⭐ Showcase

NeurIPS 22 Cell Segmentation Competition

neurips22 https://openreview.net/forum?id=YtgRjBw-7GJ

Nuclei of U2OS cells in a chemical screen

bbbc039 https://bbbc.broadinstitute.org/BBBC039 (CC0)

P. vivax (malaria) infected human blood

bbbc041 https://bbbc.broadinstitute.org/BBBC041 (CC BY-NC-SA 3.0)

🛠 Install

Make sure you have PyTorch installed.

PyPI

pip install -U celldetection

GitHub

pip install git+https://github.com/FZJ-INM1-BDA/celldetection.git

💾 Trained models

model = cd.fetch_model(model_name, check_hash=True)
model name training data link
ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c BBBC039, BBBC038, Omnipose, Cellpose, Sartorius - Cell Instance Segmentation, Livecell, NeurIPS 22 CellSeg Challenge 🔗
Run a demo with a pretrained model
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()

🔬 Architectures

import celldetection as cd
Contour Proposal Networks
PyTorch Image Models (timm)

Also have a look at Timm Documentation.

import timm

timm.list_models(filter='*')  # explore available models
Segmentation Models PyTorch (smp)
import segmentation_models_pytorch as smp

smp.encoders.get_encoder_names()  # explore available models
encoder = cd.models.SmpEncoder(encoder_name='mit_b5', pretrained='imagenet')

Find a list of Smp Encoders in the smp documentation.

U-Nets
# U-Nets are available in 2D and 3D
import celldetection as cd

model = cd.models.ResNeXt50UNet(in_channels=3, out_channels=1, nd=3)
MA-Nets
# 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)
Feature Pyramid Networks
ConvNeXt Networks
# ConvNeXt Networks are available in 2D and 3D
import celldetection as cd

model = cd.models.ConvNeXtSmall(in_channels=3, nd=3)
Residual Networks
# Residual Networks are available in 2D and 3D
import celldetection as cd

model = cd.models.ResNet50(in_channels=3, nd=3)
Mobile Networks

🐳 Docker

Find us on Docker Hub: https://hub.docker.com/r/ericup/celldetection

You can pull the latest version of celldetection via:

docker pull ericup/celldetection:latest
CPN inference via Docker with GPU
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"
CPN inference via Docker with CPU
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"

Apptainer

You can also pull our Docker images for the use with Apptainer (formerly Singularity) with this command:

apptainer pull --dir . --disable-cache docker://ericup/celldetection:latest

🤗 Hugging Face Spaces

Find us on Hugging Face and upload your own images for segmentation: https://huggingface.co/spaces/ericup/celldetection

Hugging Face API

Python

import requests

response = requests.post("https://ericup-celldetection.hf.space/run/predict", json={
    "data": [
        "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==",
        "ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c",
    ]
}).json()

data = response["data"]

Javascript

const response = await fetch("https://ericup-celldetection.hf.space/run/predict", {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.stringify({
        data: [
            "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==",
            "ginoro_CpnResNeXt101UNet-fbe875f1a3e5ce2c",
        ]
    })
});

const data = await response.json();

🧑‍💻 Napari Plugin

Find our Napari Plugin here: https://github.com/FZJ-INM1-BDA/celldetection-napari
Find out more about Napari here: https://napari.org bbbc039 You can install it via pip:

pip install git+https://github.com/FZJ-INM1-BDA/celldetection-napari.git

🏆 Awards

📝 Citing

If you find this work useful, please consider giving a star ⭐️ and citation:

@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},
}

🔗 Links

🧑‍🔬 Thanks!

Stargazers repo roster for @FZJ-INM1-BDA/celldetection Forkers repo roster for @FZJ-INM1-BDA/celldetection

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

CellDetection-0.4.3.tar.gz (111.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

CellDetection-0.4.3-py3-none-any.whl (124.7 kB view details)

Uploaded Python 3

File details

Details for the file CellDetection-0.4.3.tar.gz.

File metadata

  • Download URL: CellDetection-0.4.3.tar.gz
  • Upload date:
  • Size: 111.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for CellDetection-0.4.3.tar.gz
Algorithm Hash digest
SHA256 4b8be28a85c9098db518a833390709e9fecb1ad5aa2838d4b7dfbfa516af971c
MD5 5225316bc36478df263d3a79990b4cfe
BLAKE2b-256 09f3806656ad1435ca9198fd7ec066e1176eb27cbe5e80eae6197c480557eb42

See more details on using hashes here.

File details

Details for the file CellDetection-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: CellDetection-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 124.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for CellDetection-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 bc91e237c2d97ee7063fe30dc9e8d6ca9ff13a9ce6a3661f454e4a8f1486299e
MD5 9f1874d8ea8606e5485db094da33aeb5
BLAKE2b-256 a88dac109eb3f970dcca561f5fbde3e6fe03ec2c47f771be0fa79b30a0c87928

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page