Skip to content

SIIM COVID-19 Detection

Modality: CXR | Format: DICOM | Dim: 2D | Labels: 4 appearance classes + bboxes

Overview

The SIIM-FISABIO-RSNA COVID-19 Detection dataset from the 2021 Kaggle challenge contains 6,334 chest X-rays labelled for COVID-19 lung opacity appearance. Each study has a study-level label and images may have bounding box annotations for opacities. The dataset uses two-level annotations: study-level labels and image-level bounding boxes.

Download

Available on Kaggle: SIIM COVID-19 Detection. Requires Kaggle account.

Expected layout

siim-covid19-detection/
  train/
    train_study_level.csv
    train_image_level.csv
    <studyInstanceUID>/
      <seriesInstanceUID>/
        <sopInstanceUID>.dcm

Label columns

Column Description
atypical_appearance COVID-19 atypical appearance
indeterminate_appearance Indeterminate appearance
negative_for_pneumonia No pneumonia findings
typical_appearance COVID-19 typical appearance

Constructor arguments

Argument Type Required Default Description
base_image_dir str Yes None train/ (or test/ for the test split) — root walked for <study>/<series>/<sop>.dcm files (e.g. ~/datasets/competitions/siim-covid19-detection/train/)
csv_path str No auto train_study_level.csv; auto-discovered
image_csv_path str No auto train_image_level.csv for bbox annotations

Shared arguments (inherited from BaseRadiologicalDataset)

Argument Type Required Default Description
output_cls bool No False Include "cls" in data dict
output_mask bool No False Include "mask" in data dict
output_report bool No False Include "report" in data dict
output_bbox bool No False Include "bbox" and "bbox_labels" in data dict
transform MONAI transform No None MONAI Compose transform; None uses the default pipeline
cache_dir str No "./cache" MONAI cache directory
dtype torch.dtype No torch.bfloat16 Output tensor dtype
harmonized_df pd.DataFrame No None Pre-built harmonized DataFrame
harmonizer harmonizer No None Pre-instantiated harmonizer
harmonizer_path str No None Path to saved harmonized CSV

Dataset constructor

The constructor arguments above apply to SIIMCOVID19TrainDataset. SIIMCOVID19TestDataset accepts the same args except csv_path and image_csv_path (the test split has no annotation CSVs — those are hardcoded to None internally). The test split also silently ignores output_cls and output_bbox.

Train split

import torch
from radharmony.dataset import SIIMCOVID19TrainDataset

ds = SIIMCOVID19TrainDataset(
    base_image_dir="/data/siim-covid19-detection/train/",
    output_cls=True,
    output_bbox=True,
    dtype=torch.float32,
)
train_ds, val_ds = ds.get_datasets(n_splits=5)

Test split

from radharmony.dataset import SIIMCOVID19TestDataset

ds = SIIMCOVID19TestDataset(
    base_image_dir="/data/siim-covid19-detection/test/",
    dtype=torch.float32,
)

Harmonizer

from radharmony.harmonizer import SIIMCOVID19TrainHarmonizer

h = SIIMCOVID19TrainHarmonizer(
    csv_path="/data/siim-covid19-detection/train_study_level.csv",
    base_image_dir="/data/siim-covid19-detection/train/",
    image_csv_path="/data/siim-covid19-detection/train_image_level.csv",
)
df = h.harmonize()
print(df.columns.tolist())
df.to_csv("siim_covid19_harmonized.csv", index=False)

Load from saved harmonized CSV

import pandas as pd
from radharmony.dataset import SIIMCOVID19TrainDataset

ds = SIIMCOVID19TrainDataset(
    base_image_dir="/data/siim-covid19-detection/train/",
    harmonized_df=pd.read_csv("siim_covid19_harmonized.csv"),
    output_cls=True,
)

Harmonizer notes

  • Study-level CSV provides the appearance class labels (one per study)
  • Image-level CSV provides bounding boxes (opacity locations, one per box instance)
  • A study may have multiple images; each image inherits the study-level label
  • Bounding boxes are normalised to fractional coordinates

Outputs

Flag Key Shape Notes
output_cls=True "cls" (4,) One-hot appearance class
output_bbox=True "bbox", "bbox_labels" list Opacity bounding boxes

Example paths

Role Path
base_image_dir (train) /path/to/siim-covid19-detection/train/
base_image_dir (test) /path/to/siim-covid19-detection/test/
csv_path (train_study_level.csv) /path/to/siim-covid19-detection/train_study_level.csv
image_csv_path (train_image_level.csv) /path/to/siim-covid19-detection/train_image_level.csv

CSVs live at the competition root (parent of train/), auto-discoverable via infer_path. SIIMCOVID19TestDataset does NOT accept csv_path or image_csv_path.