Skip to content
intermediatescience

BBBC038 2018 Data Science Bowl Outlines of Every Nucleus

Draw one polygon per nucleus on ten real images from the CC0 2018 Data Science Bowl set, with Cellpose fine-tuning that writes outlines back as pre-labels.

Get This Design

View on GitHub(opens in a new tab)

Clone or download from the repository

Quick start:

bash
git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/science/microscopy/dsb2018-nucleus-outlines
potato start config.yaml

About this dataset

The 2018 Data Science Bowl dataset (BBBC038) was assembled by the Broad Institute Imaging Platform from images contributed by many laboratories. The dataset holds 841 2D light microscopy images with 37,333 manually annotated nuclei from more than 30 experiments, 22 cell types, and fluorescent and histology stains. The images and annotations are released under CC0.

The original annotations are one mask per nucleus, with no pixel in two masks. Expert biologists made the masks with an assisted superpixel tool or by outlining nuclei in GIMP, and each annotation was made by one expert biologist and reviewed by the others. The design adapts that protocol to the browser. Annotators draw one polygon per nucleus with the polygon tool, with zoom and pan for crowded fields. The ten sample images are real stage 1 training images, and no masks are included.

The model_training block uses the cellpose trainer, which fine-tunes Cellpose on the polygons annotators drew and predicts nucleus polygons for images nobody has outlined, written back as pre-labels to correct. Local image files are read, so the images ship in media/. The sam-finetune trainer is also available and fine-tunes only SAM's mask decoder, to turn boxes from an earlier detection run into outlines, and does not detect nuclei.

Images
841 in total (670 training, 65 first-stage test, 106 second-stage test)
Annotated nuclei
37,333 (29,464 in the training set)
Experiments
31, covering 22 cell types and 15 image resolutions
Sample images
10 real stage 1 training images
Licence
CC0

Configuration File

This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.

yaml
# 2018 Data Science Bowl nuclei (BBBC038): outline every nucleus
#
# Dataset: BBBC038v1, Kaggle 2018 Data Science Bowl, Broad Bioimage Benchmark Collection
# URL: https://bbbc.broadinstitute.org/BBBC038
# Licence: CC0 (images and Broad Imaging Platform annotations)
# Paper: Caicedo, J. C., Goodman, A., Karhohs, K. W., Cimini, B. A., Ackerman, J.,
#   Haghighi, M., Heng, C., Becker, T., Doan, M., McQuin, C., Rohban, M., Singh, S.,
#   and Carpenter, A. E. (2019). Nucleus segmentation across imaging experiments:
#   the 2018 Data Science Bowl. Nature Methods 16(12), 1247-1253.
#   @article{Caicedo_2019, title={Nucleus segmentation across imaging experiments: the 2018 Data Science Bowl},
#     volume={16}, DOI={10.1038/s41592-019-0612-7}, number={12}, journal={Nature Methods},
#     year={2019}, pages={1247-1253}}
# DOI: 10.1038/s41592-019-0612-7
#
# Protocol quotes (BBBC038 page, "Description" and "Ground truth"):
#   "Each mask contains one nucleus. Masks are not allowed to overlap (no pixel
#   belongs to two masks)."
#   "The ground truth and annotations were originally created by the Broad Imaging
#   Platform using a combination of GIMP and a web-based annotation tool created
#   internally."
# Paper, Methods: annotators "manually delineated each object in the images" with
#   an assisted superpixel tool or with GIMP, "coloring individual pixels outlining
#   each nucleus".
# Label: one class, nucleus. One outline per nucleus, no overlaps.
#
# Sample items: ten real images from stage1_train (CC0), shipped in media/ with
# their ImageIds in media/LICENSE-media.txt. No masks are included.
#
# Adaptations:
#   - Annotators draw polygons in the browser. The original masks were per-pixel
#     (GIMP) or superpixel-assisted (internal tool), not polygons.
#   - The Potato polygon tool replaces both original tools. The task is one label
#     (nucleus) instead of a pixel mask per nucleus.
#   - Images were re-saved as 8-bit RGB PNG; pixel values are unchanged.
#
# Model training (admin page /admin/training, admin key below):
#   cellpose (primary) fine-tunes Cellpose on the polygons annotators drew
#   (each image's outlines become an instance label image) and predicts
#   nucleus polygons for images nobody has outlined. It reads local image
#   files only, which is why the images are in media/. Cellpose's pretrained
#   weights come with the Cellpose authors' own terms. Needs: pip install cellpose
#   sam-finetune is the second option. It fine-tunes only SAM's mask decoder,
#   to turn boxes into outlines, and outlines the boxes an earlier detection
#   run wrote back. It does not touch SAM's image encoder and does not detect
#   nuclei by itself. Needs: pip install 'potato-annotation[train-vision]'
#   Predictions come back as prelabels annotators correct.
#
# Run:
#   potato start config.yaml -p 8000

annotation_task_name: "BBBC038 nucleus outlines"

task_dir: "."
media_directory: media

data_files:
  - "sample-data.json"

item_properties:
  id_key: "id"
  text_key: "image_url"

output_annotation_dir: "annotation_output"
export_annotation_format: jsonl

user_config:
  allow_all_users: true
  users: []

require_password: false
admin_api_key: "demo-admin-key"

annotation_instructions: |
  Outline every nucleus in the image with the polygon tool. Draw one polygon per
  nucleus and do not let two polygons overlap. Zoom in for small or crowded
  nuclei, and pan with the hand tool or by dragging.

annotation_schemes:
  - annotation_type: image_annotation
    name: nuclei
    description: "Outline each nucleus with one polygon. Outlines must not overlap."
    source_field: image_url
    tools:
      - polygon
    labels:
      - name: nucleus
        color: "#E6194B"
        key_value: "1"
    min_annotations: 1
    zoom_enabled: true
    pan_enabled: true

model_training:
  enabled: true
  writeback:
    schemas: ["nuclei"]
    include_unlabeled: true
    min_confidence: 0.5
  trainer_params:
    cellpose:
      base_model: nuclei
      epochs: 50

Sample Data

json
[
  {
    "id": "dsb_001",
    "image_url": "/media/dsb_001.png",
    "image_width": 256,
    "image_height": 256,
    "bbbc038_image_id": "00071198d059ba7f5914a526d124d28e6d010c92466da21d4a04cd5413362552"
  },
  {
    "id": "dsb_002",
    "image_url": "/media/dsb_002.png",
    "image_width": 256,
    "image_height": 256,
    "bbbc038_image_id": "3b75fc03a1d12b29bd2870eb1f6fdb44174dbd1118dfc11c31f127bd87bd27ef"
  }
]

// ... and 8 more items

Dataset & paper

Caicedo et al., Nature Methods 2019

Paper DOI
10.1038/s41592-019-0612-7

Citation (BibTeX)

bibtex
@article{Caicedo_2019,
  title = {Nucleus segmentation across imaging experiments: the 2018 Data Science Bowl},
  author = {Caicedo, Juan C. and Goodman, Allen and Karhohs, Kyle W. and Cimini, Beth A. and Ackerman, Jeanelle and Haghighi, Marzieh and Heng, CherKeng and Becker, Tim and Doan, Minh and McQuin, Claire and Rohban, Mohammad and Singh, Shantanu and Carpenter, Anne E.},
  journal = {Nature Methods},
  volume = {16},
  number = {12},
  pages = {1247--1253},
  year = {2019},
  month = oct,
  publisher = {Springer Science and Business Media LLC},
  doi = {10.1038/s41592-019-0612-7}
}

Details

Annotation Types

image_annotation

Domain

microscopycell biology

Use Cases

nucleus segmentationinstance segmentationmodel-assisted annotation

Tags

bbbc038data science bowl 2018nucleus segmentationcellposesam-finetunepolygon annotation

Found an issue or want to improve this design?

Open an Issue(opens in a new tab)