HMR2.0 / vendor /detectron2 /projects /DensePose /doc /BOOTSTRAPPING_PIPELINE.md
brjathu
Adding HF files
29a229f
|
raw
history blame
6.7 kB

Bootstrapping Pipeline

Bootstrapping pipeline for DensePose was proposed in Sanakoyeu et al., 2020 to extend DensePose from humans to proximal animal classes (chimpanzees). Currently, the pipeline is only implemented for chart-based models. Bootstrapping proceeds in two steps.

Master Model Training

Master model is trained on data from source domain (humans) and supporting domain (animals). Instances from the source domain contain full DensePose annotations (S, I, U and V) and instances from the supporting domain have segmentation annotations only. To ensure segmentation quality in the target domain, only a subset of supporting domain classes is included into the training. This is achieved through category filters, e.g. (see configs/evolution/Base-RCNN-FPN-Atop10P_CA.yaml):

  WHITELISTED_CATEGORIES:
    "base_coco_2017_train":
      - 1  # person
      - 16 # bird
      - 17 # cat
      - 18 # dog
      - 19 # horse
      - 20 # sheep
      - 21 # cow
      - 22 # elephant
      - 23 # bear
      - 24 # zebra
      - 25 # girafe

The acronym Atop10P in config file names indicates that categories are filtered to only contain top 10 animals and person.

The training is performed in a class-agnostic manner: all instances are mapped into the same class (person), e.g. (see configs/evolution/Base-RCNN-FPN-Atop10P_CA.yaml):

  CATEGORY_MAPS:
    "base_coco_2017_train":
      "16": 1 # bird -> person
      "17": 1 # cat -> person
      "18": 1 # dog -> person
      "19": 1 # horse -> person
      "20": 1 # sheep -> person
      "21": 1 # cow -> person
      "22": 1 # elephant -> person
      "23": 1 # bear -> person
      "24": 1 # zebra -> person
      "25": 1 # girafe -> person

The acronym CA in config file names indicates that the training is class-agnostic.

Student Model Training

Student model is trained on data from source domain (humans), supporting domain (animals) and target domain (chimpanzees). Annotations in source and supporting domains are similar to the ones used for the master model training. Annotations in target domain are obtained by applying the master model to images that contain instances from the target category and sampling sparse annotations from dense results. This process is called bootstrapping. Below we give details on how the bootstrapping pipeline is implemented.

Data Loaders

The central components that enable bootstrapping are InferenceBasedLoader and CombinedDataLoader.

InferenceBasedLoader takes images from a data loader, applies a model to the images, filters the model outputs based on the selected criteria and samples the filtered outputs to produce annotations.

CombinedDataLoader combines data obtained from the loaders based on specified ratios. The standard data loader has the default ratio of 1.0, ratios for bootstrap datasets are specified in the configuration file. The higher the ratio the higher the probability to include samples from the particular data loader into a batch.

Here is an example of the bootstrapping configuration taken from configs/evolution/densepose_R_50_FPN_DL_WC1M_3x_Atop10P_CA_B_uniform.yaml:

BOOTSTRAP_DATASETS:
  - DATASET: "chimpnsee"
    RATIO: 1.0
    IMAGE_LOADER:
      TYPE: "video_keyframe"
      SELECT:
        STRATEGY: "random_k"
        NUM_IMAGES: 4
      TRANSFORM:
        TYPE: "resize"
        MIN_SIZE: 800
        MAX_SIZE: 1333
      BATCH_SIZE: 8
      NUM_WORKERS: 1
    INFERENCE:
      INPUT_BATCH_SIZE: 1
      OUTPUT_BATCH_SIZE: 1
    DATA_SAMPLER:
      # supported types:
      #   densepose_uniform
      #   densepose_UV_confidence
      #   densepose_fine_segm_confidence
      #   densepose_coarse_segm_confidence
      TYPE: "densepose_uniform"
      COUNT_PER_CLASS: 8
    FILTER:
      TYPE: "detection_score"
      MIN_VALUE: 0.8
BOOTSTRAP_MODEL:
  WEIGHTS: https://dl.fbaipublicfiles.com/densepose/evolution/densepose_R_50_FPN_DL_WC1M_3x_Atop10P_CA/217578784/model_final_9fe1cc.pkl

The above example has one bootstrap dataset (chimpnsee). This dataset is registered as a VIDEO_LIST dataset, which means that it consists of a number of videos specified in a text file. For videos there can be different strategies to sample individual images. Here we use video_keyframe strategy which considers only keyframes; this ensures temporal offset between sampled images and faster seek operations. We select at most 4 random keyframes in each video:

SELECT:
  STRATEGY: "random_k"
  NUM_IMAGES: 4

The frames are then resized

TRANSFORM:
  TYPE: "resize"
  MIN_SIZE: 800
  MAX_SIZE: 1333

and batched using the standard PyTorch DataLoader:

BATCH_SIZE: 8
NUM_WORKERS: 1

InferenceBasedLoader decomposes those batches into batches of size INPUT_BATCH_SIZE and applies the master model specified by BOOTSTRAP_MODEL. Models outputs are filtered by detection score:

FILTER:
  TYPE: "detection_score"
  MIN_VALUE: 0.8

and sampled using the specified sampling strategy:

DATA_SAMPLER:
  # supported types:
  #   densepose_uniform
  #   densepose_UV_confidence
  #   densepose_fine_segm_confidence
  #   densepose_coarse_segm_confidence
  TYPE: "densepose_uniform"
  COUNT_PER_CLASS: 8

The current implementation supports uniform sampling and confidence-based sampling to obtain sparse annotations from dense results. For confidence-based sampling one needs to use the master model which produces confidence estimates. The WC1M master model used in the example above produces all three types of confidence estimates.

Finally, sampled data is grouped into batches of size OUTPUT_BATCH_SIZE:

INFERENCE:
  INPUT_BATCH_SIZE: 1
  OUTPUT_BATCH_SIZE: 1

The proportion of data from annotated datasets and bootstrapped dataset can be tracked in the logs, e.g.:

[... densepose.engine.trainer]: batch/ 1.8, batch/base_coco_2017_train 6.4, batch/densepose_coco_2014_train 3.85

which means that over the last 20 iterations, on average for 1.8 bootstrapped data samples there were 6.4 samples from base_coco_2017_train and 3.85 samples from densepose_coco_2014_train.