TensorFlow->TensorRT Image Classification
===
This contains examples, scripts and code related to image classification using TensorFlow models
(from [here](https://github.com/tensorflow/models/tree/master/research/slim#Pretrained))
converted to TensorRT. Converting TensorFlow models to TensorRT offers significant performance
gains on the Jetson TX2 as seen [below](#default_models).
## Quick Start
1. Follow the [installation guide](INSTALL.md).
2. Download the pretrained TensorFlow models and example images.
```
source scripts/download_models.sh
source scripts/download_images.sh
```
3. Convert the pretrained models to frozen graphs.
```
python scripts/models_to_frozen_graphs.py
```
4. Convert the frozen graphs to optimized TensorRT engines.
```
python scripts/frozen_graphs_to_plans.py
```
5. Execute the Inception V1 model on a single image.
```
./build/examples/classify_image/classify_image data/images/gordon_setter.jpg data/plans/inception_v1.plan data/imagenet_labels_1001.txt input InceptionV1/Logits/SpatialSqueeze inception
```
For more details, read through the examples [link](examples/README.md).
## Default Models
The table below shows various details related to the default models ported from the TensorFlow
slim model zoo.
| Model | Input Size | TensorRT (TX2 / Half) | TensorRT (TX2 / Float) | TensorFlow (TX2 / Float) | Input Name | Output Name | Preprocessing Fn. |
|--- |:---:|:---:|:---:|:---:|---|---|---|
| inception_v1 | 224x224 | 7.98ms | 12.8ms | 27.6ms | input | InceptionV1/Logits/SpatialSqueeze | inception |
| inception_v3 | 299x299 | 26.3ms | 46.1ms | 98.4ms | input | InceptionV3/Logits/SpatialSqueeze | inception |
| inception_v4 | 299x299 | 52.1ms | 88.2ms | 176ms | input | InceptionV4/Logits/Logits/BiasAdd | inception |
| inception_resnet_v2 | 299x299 | 53.0ms | 98.7ms | 168ms | input | InceptionResnetV2/Logits/Logits/BiasAdd | inception |
| resnet_v1_50 | 224x224 | 15.7ms | 27.1ms | 63.9ms | input | resnet_v1_50/SpatialSqueeze | vgg |
| resnet_v1_101 | 224x224 | 29.9ms | 51.8ms | 107ms | input | resnet_v1_101/SpatialSqueeze | vgg |
| resnet_v1_152 | 224x224 | 42.6ms | 78.2ms | 157ms | input | resnet_v1_152/SpatialSqueeze | vgg |
| resnet_v2_50 | 299x299 | 27.5ms | 44.4ms | 92.2ms | input | resnet_v2_50/SpatialSqueeze | inception |
| resnet_v2_101 | 299x299 | 49.2ms | 83.1ms | 160ms | input | resnet_v2_101/SpatialSqueeze | inception |
| resnet_v2_152 | 299x299 | 74.6ms | 124ms | 230ms | input | resnet_v2_152/SpatialSqueeze | inception |
| mobilenet_v1_0p25_128 | 128x128 | 2.67ms | 2.65ms | 15.7ms | input | MobilenetV1/Logits/SpatialSqueeze | inception |
| mobilenet_v1_0p5_160 | 160x160 | 3.95ms | 4.00ms | 16.9ms | input | MobilenetV1/Logits/SpatialSqueeze | inception |
| mobilenet_v1_1p0_224 | 224x224 | 12.9ms | 12.9ms | 24.4ms | input | MobilenetV1/Logits/SpatialSqueeze | inception |
| vgg_16 | 224x224 | 38.2ms | 79.2ms | 171ms | input | vgg_16/fc8/BiasAdd | vgg |
The times recorded include data transfer to GPU, network execution, and
data transfer back from GPU. Time does not include preprocessing.
See **scripts/test_tf.py**, **scripts/test_trt.py**, and **src/test/test_trt.cu**
for implementation details. To reproduce the timings run
```
python scripts/test_tf.py
python scripts/test_trt.py
```
The timing results will be located in **data/test_output_tf.txt** and **data/test_output_trt.txt**. Note
that you must download and convert the models (as in the quick start) prior to running the benchmark scripts.