With a ResNet-50 backbone and a number of architectural modifications, this version provides better accuracy and performance.
Performance
Benchmarking
The following section shows how to run benchmarks measuring the model performance in training and inference modes.
Training performance benchmark
Training benchmark was run in various scenarios on V100 16G GPU. For each scenario, batch size was set to 32.
To benchmark training, run:
bash examples/SSD320_{PREC}_{NGPU}GPU_BENCHMARK.sh
Where the {NGPU} defines number of GPUs used in benchmark, and the {PREC} defines precision.
The benchmark runs training with only 1200 steps and computes average training speed of last 300 steps.
Inference performance benchmark
Inference benchmark was run with various batch-sizes on V100 16G GPU. For inference we are using single GPU setting. Examples are taken from the validation dataset.
To benchmark inference, run:
bash examples/SSD320_FP{16,32}_inference.sh --batch_size <batch size> --checkpoint_dir <path to checkpoint>
Batch size for the inference benchmark is controlled by the --batch_size argument,
while the checkpoint is provided to the script with the --checkpoint_dir argument.
The benchmark script provides extra arguments for extra control over the experiment. We were using default values for the extra arguments during the experiments. For more details about them, please run:
bash examples/SSD320_FP16_inference.sh --help
Results
The following sections provide details on how we achieved our performance and accuracy in training and inference.
Training accuracy results
Our results were obtained by running the ./examples/SSD320_FP{16,32}_{1,4,8}GPU.sh script in the TensorFlow-19.03-py3 NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs.
All the results are obtained with batch size set to 32.
| Number of GPUs | Mixed precision mAP | Training time with mixed precision | FP32 mAP | Training time with FP32 |
|---|---|---|---|---|
| 1 | 0.276 | 7h 17min | 0.278 | 10h 20min |
| 4 | 0.277 | 2h 15min | 0.275 | 2h 53min |
| 8 | 0.269 | 1h 19min | 0.268 | 1h 37min |
Here are example graphs of FP32 and FP16 training on 8 GPU configuration:


Training performance results
Our results were obtained by running:
python bash examples/SSD320_FP*GPU_BENCHMARK.sh
scripts in the TensorFlow-19.03-py3 NGC container on NVIDIA DGX-1 with V100 16G GPUs.
| Number of GPUs | Batch size per GPU | Mixed precision img/s | FP32 img/s | Speed-up with mixed precision | Multi-gpu weak scaling with mixed precision | Multi-gpu weak scaling with FP32 |
|---|---|---|---|---|---|---|
| 1 | 32 | 124.97 | 87.87 | 1.42 | 1.00 | 1.00 |
| 4 | 32 | 430.79 | 330.35 | 1.39 | 3.45 | 3.76 |
| 8 | 32 | 752.04 | 569.01 | 1.32 | 6.02 | 6.48 |
To achieve same results, follow the Quick start guide outlined above.
Those results can be improved when XLA is used in conjunction with mixed precision, delivering up to 2x speedup over FP32 on a single GPU (~179 img/s). However XLA is still considered experimental.
Inference performance results
Our results were obtained by running the examples/SSD320_FP{16,32}_inference.sh script in the TensorFlow-19.03-py3 NGC container on NVIDIA DGX-1 with 1x V100 16G GPUs.
| Batch size | Mixed precision img/s | FP32 img/s |
|---|---|---|
| 1 | 93.37 | 97.29 |
| 2 | 135.33 | 134.04 |
| 4 | 171.70 | 163.38 |
| 8 | 189.25 | 174.47 |
| 16 | 187.62 | 175.42 |
| 32 | 187.37 | 175.07 |
| 64 | 191.40 | 177.75 |
To achieve same results, follow the Quick start guide outlined above.