Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PatchPerPix for Instance Segmentation

This repository is the official implementation of PatchPerPix for Instance Segmentation.

Lisa Mais1, Peter Hirsch1, Dagmar Kainmueller, ECCV2020
1Authors contributed equally, listed in random order

PatchPerPix for Instance Segmentation

Abstract

We present a novel method for proposal free instance segmentation that can handle sophisticated object shapes that span large parts of an image and form dense object clusters with crossovers. Our method is based on predicting dense local shape descriptors, which we assemble to form instances. All instances are assembled simultaneously in one go. To the best of our knowledge, our method is the first non-iterative method that yields instances that are composed of learnt shape patches. We evaluate our method on a diverse range of data domains, where it defines the new state of the art on four benchmarks, namely the ISBI 2012 EM segmentation benchmark, the BBBC010 C. elegans dataset, and 2d as well as 3d fluorescence microscopy datasets of cell nuclei. We show furthermore that our method also applies to 3d light microscopy data of drosophila neurons, which exhibit extreme cases of complex shape clusters.

Installation

This package requires Python 3 and PyTorch.

Note Previous versions (e.g., for the experiments published in our ECCV 2020 paper) require TensorFlow 1.x. If you want to run older experiments please checkout the respective tag: eccv2020 If you have any questions, please open an issue (and mention that you're running the older code)

The recommended way is to install the package into your conda/python virtual environment. We recommend to use conda to install torch (tested with torch 1.13, but newer versions should work, too). The following instructions were tested on linux/ubuntu 20.04.

conda create --name ppp --yes
conda activate ppp
conda install python=3.9 pytorch-cuda torchvision torchaudio cudatoolkit -c pytorch -c nvidia --yes
git clone https://github.com/Kainmueller-Lab/PatchPerPix.git
cd PatchPerPix
PATH=/usr/local/cuda/bin:$PATH CUDA_ROOT=/usr/local/cuda pip install -e .

Organization

  • PatchPerPix: contains the code for our instance assembly pipeline to go from predictions to instances
  • experiments: contains the training and prediction code to generate predictions and the main script; contains one sub-folder per application/dataset
    • run_ppp.py:
      • main script to run the experiments
      • command line arguments are used to select the experiment and the sub-task to be executed (training, inference etc, see below for an example)
      • the parameters for the network training and the postprocessing have to be defined in a config file (example config file)
    • flylight: an example experiment for the FlyLight Instances Segmentation Benchmark Dataset
      • setups: here the different experiment setups are placed, the python scripts should not be called manually, but will be called by the main script
      • train.py: trains the network
      • predict_no_gp.py: prediction after training
      • decode.py: if ppp+dec is used, decode the predicted patch encodings to the full patches
      • default.toml: example configuration file
      • default_train_code.toml: example configuration file that uses ppp+dec
      • torch_loss.py: auxiliary file for the loss computation
      • torch_model.py: auxiliary file for the torch model definition

Data preparation

The code expects the data to be in the zarr format (https://zarr.readthedocs.io/en/stable/). It is similar to hdf5, but uses the underlying file system to enable parallel read and write). It expects all used arrays (e.g., raw image data and labels) to be placed in a single zarr file (organized into a hierarchy via groups, see zarr documentation). The names of the arrays have to be set in the config file (e.g., raw_key and gt_key) appropriately (example zarr file).

Usage

The main script run_ppp.py (in the experiments folder) can be used to control all aspects of the experiments.

Example call:

python run_ppp.py --setup setup01 --config flylight/setups/setup01/default_train_code.toml --do train validate_checkpoints predict decode label evaluate --app flylight --root ppp_experiments

With --do TASK you can set the sub-task that should be executed (or all for the whole pipeline), --root PATH sets the output directory, --app APP the experiment (e.g. flylight) and --setup SETUP the specific setup of that experiment (e.g. setup01).

The command above creates a time stamped experiment folder under the path specified by --root. To continue training or for further validation or evaluation adapt the command. Change the --config parameter to point to the config file in the created experiment folder and remove the --root flag and replace it with the -id flag and point it to the created experiment folder. The tasks specified after --do depend on what you want to do:

python run_ppp.py --setup setup01 --config ppp_experiments/flylight_setup01_230614__123456/config.toml --do validate_checkpoints predict decode label evaluate --app wormbodies -id experiments/flylight_setup01_230614__123456

Available Sub-Tasks

TaskShort Description
allequal to mknet train validate_checkpoints predict decode label postprocess evaluate
inferequal to predict decode label evaluate
mknetcreates a graph of the network (only for tensorflow 1)
trainexecutes the training of the network
validate_checkpointsperforms validation (over stored model checkpoints and a set of hyperparameters)
validateperforms validation (for a specific model checkpoint and over a set of hyperparameters)
predictexecutes the trained network in inference mode and computes predictions
decodedecodes predicted patch encodings to full patches (only if model was trained to output encodings)
labelcomputes final instances based on predicted patches
postprocesspost-processes predictions and predicted instances (optional, mostly for manual inspection of results)
evaluatecompares predicted instances to ground truth instances and computes quantitative evaluation

Results

(for more details on the results see PatchPerPix for Instance Segmentation)

BBBC010

(BBBC010: C. elegans live/dead assay)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.5S0.6S0.7S0.8S0.9
Inst.Seg via Layering[1]0.7540.9360.9190.8650.7610.290
PatchPerPix (ppp+dec)0.8160.9600.9550.9310.8050.428

[1] results from: Instance Segmentation of Dense and Overlapping Objects via Layering

ISBI2012

(server with leaderboard is down, but data is still available: ISBI 2012 Segmentation Challenge

MethodrRANDrINF
PatchPerPix0.9882900.991544
MWS[2]0.9879220.991833
MWS-Dense0.9791120.989625

[2] results from leaderboard (offline, see also The Mutex Watershed: Efficient, Parameter-Free Image Partitioning)

dsb2018

(Kaggle 2018 Data Science Bowl, train/val/test split defined by Cell Detection with Star-convex Polygons)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
Mask R-CNN[3]0.594----0.8320.7730.6840.4890.189
StarDist[3]0.584----0.8640.8040.6850.4500.119
PatchPerPix0.6930.9190.9190.9150.8980.8680.8270.7550.6350.379

[3] results from Cell Detection with Star-convex Polygons

nuclei3d

(https://doi.org/10.5281/zenodo.5942574, train/val/test split defined by Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy)
($S = \frac{TP}{TP+FP+FN}$; TP, FP, FN computed per image; averaged across images; localized using IoU)

MethodavS[0.5:0.9:0.1]S0.1S0.2S0.3S0.4S0.5S0.6S0.7S0.8S0.9
MALA[4]0.3810.8950.8870.8590.8030.6990.6050.4240.1660.012
StarDist3d[5]0.4060.9360.9260.9050.8550.7650.6470.4600.1540.004
3-label+cpv[6]0.4250.9370.9300.9070.8480.7500.6410.4730.2240.035
PatchPerPix0.4360.9260.9180.9000.8530.7660.6680.4930.2280.027

[4] Large Scale Image Segmentation with Structured Loss based Deep Learning for Connectome Reconstruction, we computed the results
[5] results from Star-convex Polyhedra for 3D Object Detection and Segmentation in Microscopy
[6] results from An Auxiliary Task for Learning Nuclei Segmentation in 3D Microscopy Images

FlyLight

(The FlyLight Instance Segmentation Datset, train/val/test split defined by tba)

Metrikshort description
Saverage of avF1 and C
avF1Multi-Threshold F1 Score
CAverage ground Truth coverage
CTPAverage true positive coverage
FSNumber of false splits
FMNumber of false merges

(for a precise definition see tba)


Trained on completely labeled data, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix

Trained on completely labeled and partly labeled data combined, evaluated on completely labeled data and partly labeled data combined:

MethodSavF1CCTPFSFM
PatchPerPix(+partly)

Contributing

If you would like to contribute, have encountered any issues or have any suggestions, please open an issue on this GitHub repository.

All contributions are welcome! The content in this repository is licensed under the MIT license.

About

official implementation of the PatchPerPix instance segmentation method

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages