A convolution-based neural network for the task of object detection.
The following sections provide greater details of the dataset, running training and inference, and the training results.
Scripts and sample code
Descriptions of the key scripts and folders are provided below.
-
effdet - Contains code to build individual components of the model such as backbone, FPN, RPN, classification and bbox heads, and so on.
-
data - Contains code to build the data pipeline such as dataloader, transforms, dataset builder.
-
download_dataset.sh - Launches download and processing of required datasets.
dtrxpackage needs to be installed for this script to run without errors. -
scripts/ - Contains shell scripts to launch training and evaluation of the model and perform inferences.
-
D0/train_{AMP, TF32, FP32}_8x{V100-32G, A100-80G}.sh - Launches model training
-
D0/evaluation_{AMP, FP32, TF32}_8x{A100-80G, V100-16G, V100-32G}.sh - Performs inference and computes mAP of predictions.
-
docker/ - Scripts to build the docker image and to start an interactive session.
-
-
utils/
- Contains utility components like samplers, EMA, optimizers, schedulers, and so on.
-
train.py - End to end to script to load data, build and train the model.
-
validate.py - End to end script to load data, checkpoint and perform inference and compute mAP score.
Parameters
train.py script parameters
Important parameters for training are listed below with defaults.
Command-line options
To display the full list of available options and their descriptions, use the -h or --help command-line option, for example:
data- Path to coco datasetmodel- Name of the model to train (default: "efficientdet_d0")lr- Learning rateepochs- Maximum number of epochs to train forwarmup-epochs- Epochs to warmup LR, if scheduler supportsbatch-size- Input batch size
python train.py --help will give all the command-line parameters specific to train.py:
--model MODEL Name of the model to train (default: "countception"
--redundant-bias Override model config for redundant bias
--no-redundant-bias Override model config for redundant bias
--pretrained Start with the pretrained version of a specified network (if avail)
--pretrained-backbone-path PATH
Start from pre-trained backbone weights.
--initial-checkpoint PATH
Initialize model from this checkpoint (default: none)
--resume Resume full model and optimizer state from checkpoint (default: False)
--no-resume-opt Prevent resume of optimizer state when resuming model
--interpolation NAME Image resize interpolation type (overrides model)
--fill-color NAME Image augmentation fill (background) color ("mean" or int)
-b N, --batch-size N input batch size for training (default: 32)
-vb N, --validation-batch-size-multiplier N
ratio of validation batch size to training batch size (default: 1)
--input_size PCT Image size (default: None) if this is not set default model image size is taken
--drop PCT Dropout rate (default: 0.)
--clip-grad NORM Clip gradient norm (default: 10.0)
--opt OPTIMIZER Optimizer (default: "momentum"
--opt-eps EPSILON Optimizer Epsilon (default: 1e-3)
--momentum M SGD momentum (default: 0.9)
--weight-decay WEIGHT_DECAY
weight decay (default: 0.00004)
--sched SCHEDULER LR scheduler (default: "step"
--lr LR learning rate (default: 0.01)
--lr-noise pct, pct [pct, pct ...]
learning rate noise on/off epoch percentages
--lr-noise-pct PERCENT
learning rate noise limit percent (default: 0.67)
--lr-noise-std STDDEV
learning rate noise std-dev (default: 1.0)
--lr-cycle-mul MULT learning rate cycle len multiplier (default: 1.0)
--lr-cycle-limit N learning rate cycle limit
--warmup-lr LR warmup learning rate (default: 0.0001)
--min-lr LR lower lr bound for cyclic schedulers that hit 0 (1e-5)
--epochs N number of epochs to train (default: 2)
--start-epoch N manual epoch number (useful on restarts)
--decay-epochs N epoch interval to decay LR
--warmup-epochs N epochs to warmup LR, if scheduler supports
--cooldown-epochs N epochs to cooldown LR at min_lr, after cyclic schedule ends
--patience-epochs N patience epochs for Plateau LR scheduler (default: 10
--decay-rate RATE, --dr RATE
LR decay rate (default: 0.1)
--mixup MIXUP mixup alpha, mixup enabled if > 0. (default: 0.)
--mixup-off-epoch N turn off mixup after this epoch, disabled if 0 (default: 0)
--smoothing SMOOTHING
label smoothing (default: 0.0)
--train-interpolation TRAIN_INTERPOLATION
Training interpolation (random, bilinear, bicubic default: "random")
--sync-bn Enable NVIDIA Apex or Torch synchronized BatchNorm.
--dist-bn DIST_BN Distribute BatchNorm stats between nodes after each epoch ("broadcast", "reduce", or "")
--model-ema Enable tracking moving average of model weights
--model-ema-decay MODEL_EMA_DECAY
decay factor for model weights moving average (default: 0.9998)
--dist-group-size DIST_GROUP_SIZE
Group size for sync-bn
--seed S random seed (default: 42)
--log-interval N how many batches to wait before logging training status
--eval-after N Start evaluating after eval-after epochs
--benchmark Turn this on when measuring performance
--benchmark-steps N Run training for this number of steps for performance measurement
--dllogger-file PATH File name of dllogger json file (default: log.json, current dir)
--save-checkpoint-interval N
Save checkpoints after so many epochs
-j N, --workers N how many training processes to use (default: 1)
--amp use NVIDIA amp for mixed precision training
--no-pin-mem Disable pin CPU memory in DataLoader.
--no-prefetcher disable fast prefetcher
--output PATH path to the output folder (default: none, current dir)
--eval-metric EVAL_METRIC
Best metric (default: "map"
--local_rank LOCAL_RANK
--memory-format {nchw,nhwc}
memory layout, nchw or nhwc
--fused-focal-loss Use fused focal loss for better performance.
--waymo Train on Waymo dataset or COCO dataset. Default: False (COCO dataset)
--num_classes PCT Number of classes the model needs to be trained for (default: None)
--remove-weights [REMOVE_WEIGHTS [REMOVE_WEIGHTS ...]]
Remove these weights from the state dict before loading checkpoint (use case can be not loading heads)
--freeze-layers [FREEZE_LAYERS [FREEZE_LAYERS ...]]
Freeze these layers
--waymo-train-annotation WAYMO_TRAIN_ANNOTATION
Absolute Path to waymo training annotation (default: "None")
--waymo-val-annotation WAYMO_VAL_ANNOTATION
Absolute Path to waymo validation annotation (default: "None")
--waymo-train WAYMO_TRAIN
Path to waymo training relative to waymo data (default: "None")
--waymo-val WAYMO_VAL
Path to waymo validation relative to waymo data (default: "None")
Getting the data
By default, the EfficientDet model is trained on the COCO 2017 dataset. This dataset comes with a training and validation set.
This repository contains the ./download_dataset.sh scripts that automatically downloads and preprocesses the training and validation sets.
Dataset guidelines
This repository contains the ./download_dataset.sh scripts that automatically downloads and preprocesses the training and validation sets.
This repository also provides support for fine-tuning and evaluating on Waymo dataset. In order to run on the Waymo dataset, ensure your dataset is present/mounted to the Docker container and the dataset is in COCO format. For that, this repository has scripts to download, preprocess and convert Waymo dataset into COCO format, which is ingestible by EfficientDet.
waymo_tool/waymo_data_converter.py- downloads and converts the data into COCO format
Since the original Waymo dataset is in TFRecords format, to convert it into COCO format, Tensorflow needs to be installed.
Training Process
Training is performed using the train.py script. The default parameters can be overridden by command-line arguments.
The training process can start from scratch or resume from a checkpoint.
By default, bash script scripts/D0/train_{AMP, FP32, TF32}_8x{A100-80G, V100-32G}.sh will start the training process from scratch with the following settings.
- Use 8 GPUs
- Saves checkpoints after every 10 epochs to
/workspace/output/folder - AMP or FP32 or TF32 based on the folder
scripts/D0/train_{AMP, FP32, TF32}_8x{A100-80G, V100-32G}.sh
To resume from a checkpoint, include --resume in the command-line and place the checkpoint into /workspace/output/.
Multi-node
Multi-node runs can be launched on a Pyxis/enroot Slurm cluster (see Requirements) with the ./scripts/D0/train_{AMP, FP32}_32xV100-32G.sub script with the following command for a 4-node NVIDIA DGX V100 example:
sbatch N 4 --ntasks-per-node=8 ./scripts/D0/train_{AMP, FP32}_32xV100-32G.sub
Note that the ./scripts/D0/train_{AMP, FP32}_32xV100-32G.sub script is a starting point that has to be adapted depending on the environment. In particular, variables such as --container-image handle the container image to train using, and datadir handle the location of the COCO-2017 data. The backbone (EfficientNet) weights need to be put in /backbone_checkpoints.
Refer to the files contents to view the full list of variables to adjust for your system.