项目作者: 5m0k3

项目描述 :
My modified version of EfficientDet training, cross-validation and inference with Pseudo Labelling pytorch pipelines used in GWD Kaggle Competition
高级语言: Jupyter Notebook
项目地址: git://github.com/5m0k3/gwd-efficientdet-pytorch.git
创建时间: 2020-08-05T09:38:12Z
项目社区:https://github.com/5m0k3/gwd-efficientdet-pytorch

开源协议:

下载


pytorch based EfficientDet solution - Global Wheat Detection

A complete pytorch pipeline for training, cross-validation and inference notebooks used in Kaggle competition Global Wheat Detection (May-Aug 2020)

Table of Contents

Brief overview of the competition images

Wheat heads were from various sources:
head
A few labeled images are as shown: (Blue bounding boxes)
head head

Notebooks description

A brief content description is provided here, for detailed descriptions check the notebook comments

[TRAIN] notebook

  1. Pre-Processing:

    • Handled the noisy labels (too big/small boxes etc.)
    • Stratified 5 fold split based on source
  2. Augmentations:

    • Albumentations - RandomSizedCrop, HueSaturationValue, RandomBrightnessContrast, RandomRotate90, Flip, Cutout, ShiftScaleRotate
    • Mixup - https://arxiv.org/pdf/1710.09412.pdf
      2 images are mixed
      head
    • Mosaic - https://arxiv.org/pdf/2004.12432.pdf
      4 images are cropped and stitched together
      head
    • Mixup-Mosaic: Combining the above two, applying mixup to 2 (top-right and bottom-left) of the 4 quarters of mosaic
      head
  3. Configurations:

    • Optimizer - Adam Weight Decay (AdamW)
    • LR Scheduler - ReduceLRonPleateau (initial LR = 0.0003, factor = 0.5)
    • Model - EfficientDet D5 (pytorch implementation of the original tensorflow version)
    • Input Size - 1024 * 1024
    • Last and Best 3 checkpoints saved

[CV] Cross Validation notebook

  1. Pre-Processing:

    • Same as in [TRAIN]
  2. Test Time Augmentations:

    • Flips and Rotate
      head
    • Color shift
    • Scale (scale down with padding)
  3. Ensemble:

    • Support for ensembling of multiple folds of the same model
    • Weighted Boxes Fusion is used to ensemble final predicted boxes
  4. Automated Threshold Calculations:

    • Confidence level threshold is calculated based on ground truth labels
    • Optimal Final CV score (Metric: IoU) is obtained through this

[INFERENCE] Submission notebook

  1. Test Time Augmentations:

    • Same as in [CV]
  2. Pseudo Labelling:

    • Multi-Round Pseudo Labelling pipeline based on https://arxiv.org/pdf/1908.02983.pdf
    • Implemented Cross Validation calculations at the end of each round to decide the best thresholds for Pseudo Labels in the next round
    • Training pipeline same as in [TRAIN]
      head
  3. Post-Processing and Result:

    • Included final bounding boxes reshaping function
      (Red : Original | Blue : Altered {+5%})
      head
    • Final predictions made with ensembled combinations of TTA

How to use

Just change the directories according to your environment.

Google Colab deployed versions are available for
[TRAIN] Open In Colab
[CV] Open In Colab

In case of any deprecation issues/warnings in future, use the modules available in Resources folder.

Improvements

Acknowledging the shortcomings is the first step for progress. Thus, listing the possible improvements that could’ve made my Model better:

  • Ensemble Multi-Model/Fold predictions for Pseudo Labels, currently single model is used to make pseudo labels. Would’ve made the model more robust to noise too.
  • GAN or Style Transfer could’ve been used to produce more similar labeled images from the current train images for better generalization.
  • Relabeling of noisy labels using multi-folds. (Tried but failed)
  • IoU loss used in training should be replaced by modern SOTA GIoU, CIoU or DIoU