Skip to main content

Automated 3D cell detection in large microscopy images

Project description

Python Version PyPI Downloads Wheel Development Status Tests Coverage Status Code style: black Contributions Twitter

cellfinder-core

Standalone cellfinder cell detection algorithm

This package implements the cell detection algorithm from Tyson, Rousseau & Niedworok et al. (2021) without any dependency on data type (i.e. it can be used outside of whole-brain microscopy).

cellfinder-core supports the cellfinder software for whole-brain microscopy analysis, and the algorithm can also be implemented in napari using the cellfinder napari plugin.


Instructions

Installation

cellfinder-core supports Python >=3.7, and works across Linux, Windows, and should work on most versions of macOS (although this is not tested).

Assuming you have a Python environment set up (e.g. using conda), you can install cellfinder-core with:

pip install cellfinder-core

Once you have installed napari. You can install napari either through the napari plugin installation tool, or directly from PyPI with:

pip install cellfinder-napari

N.B. To speed up cellfinder, you need CUDA & cuDNN installed. Instructions here.

Usage

Before using cellfinder-core, it may be useful to take a look at the preprint which outlines the algorithm.

The API is not yet fully documented. For an idea of what the parameters do, see the documentation for the cellfinder whole-brain microscopy image analysis command-line tool (cell candidate detection, cell candidate classification). It may also be useful to try the cellfinder napari plugin so you can adjust the parameters in a GUI.

To run the full pipeline (cell candidate detection and classification)

from cellfinder_core.main import main as cellfinder_run
import tifffile

signal_array = tifffile.imread("/path/to/signal_image.tif")
background_array = tifffile.imread("/path/to/background_image.tif")

voxel_sizes = [5, 2, 2] # in microns
detected_cells = cellfinder_run(signal_array,background_array,voxel_sizes)

The output is a list of imlib Cell objects. Each Cell has a centroid coordinate, and a type:

print(detected_cells[0])
# Cell: x: 132, y: 308, z: 10, type: 2

Cell type 2 is a "real" cell, and Cell type 1 is a "rejected" object (i.e. not classified as a cell):

from imlib.cells.cells import Cell
print(Cell.CELL)
# 2

print(Cell.NO_CELL)
# 1

Saving the results

If you want to save the detected cells for use in other BrainGlobe software (e.g. the cellfinder napari plugin), you can save in the cellfinder XML standard:

from imlib.IO.cells import save_cells
save_cells(detected_cells, "/path/to/cells.xml")

You can load these back with:

from imlib.IO.cells import get_cells
cells = get_cells("/path/to/cells.xml")

Using dask for lazy loading

cellfinder-core supports most array-like objects. Using Dask arrays allows for lazy loading of data, allowing large (e.g. TB) datasets to be processed. cellfinder-core comes with a function (based on napari-ndtiffs) to load a series of image files (e.g. a directory of 2D tiff files) as a Dask array. cellfinder-core can then be used in the same way as with a numpy array.

from cellfinder_core.main import main as cellfinder_run
from cellfinder_core.tools.IO import read_with_dask

signal_array = read_with_dask("/path/to/signal_image_directory")
background_array = read_with_dask("/path/to/background_image_directory")

voxel_sizes = [5, 2, 2] # in microns
detected_cells = cellfinder_run(signal_array,background_array,voxel_sizes)

Running the cell candidate detection and classification separately.

import tifffile
from pathlib import Path

from cellfinder_core.detect import detect
from cellfinder_core.classify import classify
from cellfinder_core.tools.prep import prep_classification

signal_array = tifffile.imread("/path/to/signal_image.tif")
background_array = tifffile.imread("/path/to/background_image.tif")
voxel_sizes = [5, 2, 2] # in microns

home = Path.home()
install_path = home / ".cellfinder" # default

start_plane=0
end_plane=-1
trained_model=None
model_weights=None
model="resnet50_tv"
batch_size=32
n_free_cpus=2
network_voxel_sizes=[5, 1, 1]
soma_diameter=16
ball_xy_size=6
ball_z_size=15
ball_overlap_fraction=0.6
log_sigma_size=0.2
n_sds_above_mean_thresh=10
soma_spread_factor=1.4
max_cluster_size=100000
cube_width=50
cube_height=50
cube_depth=20
network_depth="50"

model_weights = prep_classification(
    trained_model, model_weights, install_path, model, n_free_cpus
)
    
cell_candidates = detect.main(
    signal_array,
    start_plane,
    end_plane,
    voxel_sizes,
    soma_diameter,
    max_cluster_size,
    ball_xy_size,
    ball_z_size,
    ball_overlap_fraction,
    soma_spread_factor,
    n_free_cpus,
    log_sigma_size,
    n_sds_above_mean_thresh,
)

if len(cell_candidates) > 0: # Don't run if there's nothing to classify
    classified_cells = classify.main(
        cell_candidates,
        signal_array,
        background_array,
        n_free_cpus,
        voxel_sizes,
        network_voxel_sizes,
        batch_size,
        cube_height,
        cube_width,
        cube_depth,
        trained_model,
        model_weights,
        network_depth,
    )

Training the network

The training data needed are matched pairs (signal & background) of small (usually 50 x 50 x 100um) images centered on the coordinate of candidate cells. These can be generated however you like, but I recommend using the Napari plugin.

cellfinder-core comes with a 50-layer ResNet trained on ~100,000 data points from serial two-photon microscopy images of mouse brains (available here).

Training the network is likely simpler using the command-line interface or the Napari plugin, but it is possible through the Python API.

from pathlib import Path
from cellfinder_core.train.train_yml import run as run_training

# list of training yml files
yaml_files = [Path("/path/to/training_yml.yml)]

# where to save the output
output_directory = Path("/path/to/saved_training_data")

home = Path.home()
install_path = home / ".cellfinder"  # default

run_training(
    output_directory,
    yaml_files,
    install_path=install_path,
    learning_rate=0.0001,
    continue_training=True, # by default use supplied model
    test_fraction=0.1,
    batch_size=32,
    save_progress=True,
    epochs=10,
)

More info

More documentation about cellfinder and other BrainGlobe tools can be found here.

This software is at a very early stage, and was written with our data in mind. Over time we hope to support other data types/formats. If you have any questions or issues, please get in touch by email, on the forum or by raising an issue.


Illustration

Introduction

cellfinder takes a stitched, but otherwise raw dataset with at least two channels:

  • Background channel (i.e. autofluorescence)
  • Signal channel, the one with the cells to be detected:

raw Raw coronal serial two-photon mouse brain image showing labelled cells

Cell candidate detection

Classical image analysis (e.g. filters, thresholding) is used to find cell-like objects (with false positives):

raw Candidate cells (including many artefacts)

Cell candidate classification

A deep-learning network (ResNet) is used to classify cell candidates as true cells or artefacts:

raw Cassified cell candidates. Yellow - cells, Blue - artefacts


Citing cellfinder

If you find this plugin useful, and use it in your research, please cite the preprint outlining the cell detection algorithm:

Tyson, A. L., Rousseau, C. V., Niedworok, C. J., Keshavarzi, S., Tsitoura, C., Cossell, L., Strom, M. and Margrie, T. W. (2021) “A deep learning algorithm for 3D cell detection in whole mouse brain image datasets’ PLOS Computational Biology, 17(5), e1009074 https://doi.org/10.1371/journal.pcbi.1009074

If you use this, or any other tools in the brainglobe suite, please let us know, and we'd be happy to promote your paper/talk etc.

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

cellfinder-core-0.2.8.tar.gz (140.4 kB view details)

Uploaded Source

Built Distributions

cellfinder_core-0.2.8-cp39-cp39-win_amd64.whl (327.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

cellfinder_core-0.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cellfinder_core-0.2.8-cp39-cp39-macosx_10_14_x86_64.whl (343.6 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

cellfinder_core-0.2.8-cp38-cp38-win_amd64.whl (328.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

cellfinder_core-0.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

cellfinder_core-0.2.8-cp38-cp38-macosx_10_14_x86_64.whl (336.4 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

cellfinder_core-0.2.8-cp37-cp37m-win_amd64.whl (321.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

cellfinder_core-0.2.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

cellfinder_core-0.2.8-cp37-cp37m-macosx_10_14_x86_64.whl (336.0 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

File details

Details for the file cellfinder-core-0.2.8.tar.gz.

File metadata

  • Download URL: cellfinder-core-0.2.8.tar.gz
  • Upload date:
  • Size: 140.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7

File hashes

Hashes for cellfinder-core-0.2.8.tar.gz
Algorithm Hash digest
SHA256 ab4fa595325f62952a77a82365ce065be5ca6e0a88ba99b43cef3a3c998f1642
MD5 763e05633d42400c7c4c8626dee425e5
BLAKE2b-256 a7bcdcef137ba71a530aeb5299202ebdb2057284f5c673c5d20ffeb00dd18004

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 327.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.7

File hashes

Hashes for cellfinder_core-0.2.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 25bf319171d3174b353dc5ac2a186c65bbf2a87e50ec419401699f99c223f9b5
MD5 37a730678692c344730233b463b396a9
BLAKE2b-256 fbf0a4b8cf8e7f92190866cb35fe34558138736eee2c72c69419242eb0eda9be

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 73b37df2374c545182413c6b8f1c6d670d8eb75bdad494353e931134198bda68
MD5 020773f9eb62c1e848c55690f1f4ec50
BLAKE2b-256 b897edc9c7218bf85fb9a2385fbddb348d373b1da604c2e26592d2d7c68d0fd8

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp39-cp39-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 343.6 kB
  • Tags: CPython 3.9, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for cellfinder_core-0.2.8-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 a71fa4240e35d17fb25a34f1bf74f6640d404be1bd9d470e735df578dc8df47e
MD5 778677e6b750c70b787d9c19d0c60460
BLAKE2b-256 83281de160ddd18e288eef1891d397cdc50420c4cda5947d071e0d6bfd418c0d

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 328.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.10

File hashes

Hashes for cellfinder_core-0.2.8-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ffafb97f7c013abd2381136feb90641972af78094e72246e1bae44fc8943d2ae
MD5 da985f5b0c93390ebb5a259d484176df
BLAKE2b-256 ba5e797d3ee0cd0efcc077bf07ae6aa0b07595a1ead2c958025f8639d3a39a0c

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9faaa1c4b58319ee9c23f2a95de4c49b2b5ba8b9b325b1023f29865d980451e0
MD5 f5e18e8355f08ba0967472a301fc1d2a
BLAKE2b-256 1a29d8a3b9b8afb6183b5d5e5cd768683be41563e3731518d437187d36554d28

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 336.4 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.11

File hashes

Hashes for cellfinder_core-0.2.8-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 87d6f1d49b093e6a0cd0f3ba63c974f7ade8fae34dd377eb168904c46f1c6c27
MD5 f5b679cb08b1cb8580e7b2eeb07bcc36
BLAKE2b-256 4917d2b81d15c7a94d815a7d6dc98c9f8312d7e713bda25fd67b7ff504877afd

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 321.7 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.9

File hashes

Hashes for cellfinder_core-0.2.8-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c965033e6dca0e32596ef60748b96a1fb75b7fe22d5dd0c21d32bf5db142fbd6
MD5 c55d4032e3c0f770a0425286993f2212
BLAKE2b-256 9f4daaff5fd31c6ed1982c63aeb6559c11e59eac1688df5e28b37225af2da5ec

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa9d7edbca7b025aa3c616cc49eacf3052e15f6e690490a67022d1c80094996d
MD5 747eaecfce1624ad4ccd203c4865cae9
BLAKE2b-256 536514271ef8d27548bb9c896752add11bfa4b90f10bb5cad407d590e6c5dc4f

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.8-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.8-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 336.0 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.11

File hashes

Hashes for cellfinder_core-0.2.8-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 d912f248b487ba4cdcd2bda7ee739570584992cee7c0c9a8c057a18bf7146161
MD5 51943b063bfd73300f27d4f7f1f6add1
BLAKE2b-256 6946af65703e8faedd05cb510c306f298988de69df4893c10a8a6ae8165bccb8

See more details on using hashes here.

Supported by

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