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 Website 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’ bioRxiv, doi.org/10.1101/2020.10.21.348771

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.5rc0.tar.gz (140.9 kB view details)

Uploaded Source

Built Distributions

cellfinder_core-0.2.5rc0-cp39-cp39-win_amd64.whl (326.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

cellfinder_core-0.2.5rc0-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.5rc0-cp38-cp38-win_amd64.whl (327.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

cellfinder_core-0.2.5rc0-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.5rc0-cp37-cp37m-win_amd64.whl (321.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

cellfinder_core-0.2.5rc0-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

File details

Details for the file cellfinder-core-0.2.5rc0.tar.gz.

File metadata

  • Download URL: cellfinder-core-0.2.5rc0.tar.gz
  • Upload date:
  • Size: 140.9 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.0 CPython/3.9.5

File hashes

Hashes for cellfinder-core-0.2.5rc0.tar.gz
Algorithm Hash digest
SHA256 6099d5e0f9fd2575da99aeaef2f99a07ba1a217da297b4ac6cb5bc8619e71605
MD5 ac10e157a79a85cbd70d7688845a3155
BLAKE2b-256 503631d351a5e2a88db508a6602b12c699e49362bf25217d058baaa161ecf487

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.5rc0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.5rc0-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.0 CPython/3.9.5

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d9a2d682b80153e7165a93275935ff8a060c27d6a5cbcf0b8b61de8a28f4268c
MD5 cd7fb0bc6d21ce67476198aca0d51efa
BLAKE2b-256 c1c44453a9861cf2f2c2c6cb659fc9d9daa832317aad6bd2c5f8d7c71628a9eb

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.5rc0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0dff212c5cd225e2444c549d2cd8be40a175c27f73ef5e55cc081c04a48e9235
MD5 ec7644e2228cb210abaf986abdff25cd
BLAKE2b-256 216d1768586f6ed1582f9cbf27942fa6375c4d48b1916d8540403b2ff1742a73

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.5rc0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.5rc0-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.0 CPython/3.8.10

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6bdd6a27327d806b5098119046d080f16233d3a74720b0ab828741c2c31c50ab
MD5 f86951d135cfcf03baf2748429eb5e15
BLAKE2b-256 7492ca881d63aede4b6da6f78c13c358bb4807341aafd760d3fa055aa908c6a4

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.5rc0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 373663ff533a4bc2fba035efa847e00a8233c3bf0116e602fc92bfb0f14d1598
MD5 1f83c9bc1bb4655705ac49b13573981c
BLAKE2b-256 bc8479fb6bc7efffe035cfe1350653b570da5c8a0640ddd181a7ffca99da5290

See more details on using hashes here.

File details

Details for the file cellfinder_core-0.2.5rc0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: cellfinder_core-0.2.5rc0-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.3.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.7.9

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 85a21bfa22609b5b4040b08d6b930f3d583e31e7aeefa803c7a26aaa84ceaea7
MD5 91c429abc1c1ac328d716be3cda5b323
BLAKE2b-256 29dc028daa2b7fdeaf5692ce897e5243da2f7608c43b7e07298aac1a7953f033

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cellfinder_core-0.2.5rc0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e4f2be4e6fb633d61239e970217c6eec9cd93f6e8725c1858f706874ca31a1e
MD5 b7cf5537baed4dd0ea2c44b2a4b575ac
BLAKE2b-256 5bc5538e2376c7aef8e7ed47dadf4a42535dabb8ef57967526d22d06d6a9899e

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