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

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"

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.6rc3.tar.gz (141.0 kB view details)

Uploaded Source

Built Distributions

cellfinder_core-0.2.6rc3-cp39-cp39-win_amd64.whl (326.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

cellfinder_core-0.2.6rc3-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.6rc3-cp39-cp39-macosx_10_14_x86_64.whl (343.0 kB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

cellfinder_core-0.2.6rc3-cp38-cp38-win_amd64.whl (327.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

cellfinder_core-0.2.6rc3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

cellfinder_core-0.2.6rc3-cp38-cp38-macosx_10_14_x86_64.whl (335.8 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

cellfinder_core-0.2.6rc3-cp37-cp37m-win_amd64.whl (321.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

cellfinder_core-0.2.6rc3-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.6rc3-cp37-cp37m-macosx_10_14_x86_64.whl (335.3 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

File details

Details for the file cellfinder-core-0.2.6rc3.tar.gz.

File metadata

  • Download URL: cellfinder-core-0.2.6rc3.tar.gz
  • Upload date:
  • Size: 141.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for cellfinder-core-0.2.6rc3.tar.gz
Algorithm Hash digest
SHA256 9d83d304a69ed62538086ed02bd30c0cc018306d4479446175e846555109d877
MD5 8e8af3113211d2c42e8919f5fe28c9be
BLAKE2b-256 8218cfa385faae9e55d67bc28bf3b33caea69eed4d56e64369d14db493665f63

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 326.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6562156a5631e17a6e79ff3693bcb47f1e9836bce551435efd6501615fd35ebf
MD5 9c6c1d398a31ba043b8a90d2e92b598b
BLAKE2b-256 97bf69a68bb1ed733364df5543f25da170203159d5c36d4afc5b6cdba054c8c6

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f4bb3df0fcc4db6e5007f93759dd8065989224217c83badc5ffcc09e79a8f19c
MD5 95ffde94f52da07e19bdaa13cd38a365
BLAKE2b-256 224ff07148c0b600cacf927e3acf9c3f281eba5437e4ebbf67affe10c9d8c168

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp39-cp39-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 343.0 kB
  • Tags: CPython 3.9, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 a268e328cec15272a477278593e4d132bdd8eee258590b568d7256798e89e952
MD5 a519178e04959974acc7b97fb96cb266
BLAKE2b-256 e651581e8b0e623c14d6c5d646822f89a88d2fe5c414d24787c8db73db015ccb

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 327.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 1c7f3b90a204201e5aca714b07709235e9dd56ce79bf07245eef8253e851d36a
MD5 28c34afb4771e0d37a519b2fc8cd5793
BLAKE2b-256 5dddea72db4ce477f4ccbace1541a9d930b0bad8dd6550adf6c5cfbf59c312a1

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7148f0c75965a33044b8dd944846b1c2c9808e5191d906e0bd4ec668eeef31ee
MD5 1d49d53ad08ec1ec2dc823b50c00fe02
BLAKE2b-256 1d9adba328c962229d0ff6155c61d93b16356d17df860d8cd5e9bf9f02390215

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 335.8 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 3a62872900b6d959b76438250e9ef60ef97790ced1a3354a1efbc799e6e7dd39
MD5 45ea8c80af88805cf0a237c790c2ac26
BLAKE2b-256 733f1efd0214a97f49cd9e3c2b4fd31f88e3302354165e9e7848257a61f8cb20

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 321.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.9

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 ce73c8fa1868613e72c0f2f9535cefdf7536bad43a8a1b05538f7cbef30407bd
MD5 40791bfe9bde04468f363c2c6bb30d23
BLAKE2b-256 02b0dcf12a20d32c844430d665bb3c23a324915b8fad896a3028103f82daeddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 08312e5250a2b20b16b36927426ee05c968ee3b86e9aa5438cc5194d297137cd
MD5 d8a119afe906ca5be6cc50053df84a6a
BLAKE2b-256 1a2996b588cabc336e7518c6b55256b224e401e27c935a1d2637f6a021d062ad

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.6rc3-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.6rc3-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 335.3 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.10

File hashes

Hashes for cellfinder_core-0.2.6rc3-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 3c4741fab46aa6ebb342db5b20562c63680967b97b16211e1efd3131cd667f7e
MD5 4d47160460d033f7620b051ab06e1646
BLAKE2b-256 55a96b12d34039bd00a3208f44bbb55b00abc22ecbb374516ca6d6e84c7cc85a

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