Image Classification (TF2)

See the Data Annotation Format page for more information about the data format for image classification.

Below is a sample for the classification spec file. It has seven major components–dataset, model, train, evaluate, inference, prune, and export–as well as parameters for the encryption key (encryption_key) and results directory (results_dir).

Copy
Copied!
            

results_dir: '/workspace/results_dir' encryption_key: 'nvidia_tlt' dataset: train_dataset_path: "/workspace/tao-experiments/data/split/train" val_dataset_path: "/workspace/tao-experiments/data/split/val" preprocess_mode: 'torch' num_classes: 20 augmentation: enable_color_augmentation: True enable_center_crop: True train: qat: False checkpoint_interval: 1 checkpoint: '/path/to/model.tlt' batch_size_per_gpu: 64 num_epochs: 80 optim_config: optimizer: 'sgd' lr_config: scheduler: 'cosine' learning_rate: 0.05 soft_start: 0.05 reg_config: type: 'L2' scope: ['conv2d', 'dense'] weight_decay: 0.00005 model: backbone: 'efficientnet-b0' input_width: 224 input_height: 224 input_channels: 3 input_image_depth: 8 evaluate: dataset_path: '/workspace/tao-experiments/data/split/test' checkpoint: 'EVALMODEL' top_k: 3 batch_size: 256 n_workers: 8 inference: checkpoint: 'EVALMODEL' image_dir: '/workspace/tao-experiments/data/split/test/aeroplane' classmap: 'RESULTSDIR/classmap.json' export: checkpoint: 'EVALMODEL' onnx_file: 'EXPORTDIR/efficientnet-b0.onnx' data_type: 'fp32'

The format of the spec file is YAML. The top level structure of the spec file is summarized in the table below:

Field Description
dataset Configuration related to data sources and dataloader
model Configuration related to model construction
train Configuration related to the training process
evaluate Configuration related to the standalone evaluation process
prune Configuration for pruning a trained model
inference Configuration for running model inference
export Configuration for exporting a trained model
encryption_key Global encryption key
results_dir Directory where experiment results and status logging are saved

Model Config

The table below describes the parameters in the model config.

Parameter Datatype Typical value Description Supported Values
backbone string efficientnet-b0 This defines the architecture of the backbone feature extractor to be used to train. efficientnet-b0 to efficientnet-b5
use_pooling Boolean False Choose between using strided convolutions or MaxPooling while downsampling. When True, MaxPooling is used to down sample, however for the object detection network, NVIDIA recommends setting this to False and using strided convolutions. True or False
use_batch_norm Boolean False Boolean variable to use batch normalization layers or not. True or False
freeze_blocks List This parameter defines which blocks may be frozen from the instantiated feature extractor template, and is different for different feature extractor templates.
  • ResNet series: For the ResNet series, the block ID’s valid for freezing is any subset of {0, 1, 2, 3}(inclusive)
  • VGG series: For the VGG series, the block ID’s valid for freezing is any subset of {1, 2, 3, 4, 5}(inclusive)
  • MobileNet V1: For the MobileNet V1, the block ID’s valid for freezing is any subset of {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}(inclusive)
  • MobileNet V2: For the MobileNet V2, the block ID’s valid for freezing is any subset of {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}(inclusive)
  • GoogLeNet: For the GoogLeNet, the block ID’s valid for freezing is any subset of {0, 1, 2, 3, 4, 5, 6, 7}(inclusive)
  • DarkNet: For DarkNet, the valid blocks IDs is any subset of {0, 1, 2, 3, 4, 5}(inclusive)
  • CSPDarkNet: For CSPDarkNet, the valid blocks IDs is any subset of {0, 1, 2, 3, 4, 5}(inclusive)
  • EfficientNet B0/B1: For EfficientNet, the valid block IDs is any subset of {0, 1, 2, 3, 4, 5, 6, 7}(inclusive)
  • CSPDarkNet-tiny: For CSPDarkNet-tiny, the valid blocks IDs is any subset of {0, 1, 2, 3, 4, 5}(inclusive)
freeze_bn Boolean False You can choose to freeze the Batch Normalization layers in the model during training. True or False
resize_interpolation_method string bilinear The interpolation method for resizing the input images. bilinear or bicubic
retain_head Boolean False Regular TAO models: whether or not to use the header layers as in the original implementation on ImageNet. Set this to True to reproduce the accuracy on ImageNet as in the literature. If set to False, a Dense layer will be used for header, which can be different from the literature. BYOM models: whether or not to use the header layers as in the original ONNX model. Set this to True to reproduce the accuracy on the original dataset. If set to False, Dense layer will be used for header, which can be different from the original implementation. True or False
dropout float 0.0 Dropout rate for Dropout layers in the model. This is only valid for VGG and SqueezeNet. Float in the interval [0, 1)
byom_model string UNIX format path to the BYOM model in .tltb format. UNIX format path.
input_width int Input width Unsigned integer
input_height int Input height Unsigned integer
input_channels int Input channels Unsigned integer (1 or 3)

Dataset Config

The table below describes the parameters in the data config.

Parameter Datatype Default Description Supported Values
val_dataset_path string UNIX format path to the root directory of the validation dataset. UNIX format path.
train_dataset_path string UNIX format path to the root directory of the training dataset. UNIX format path.
image_mean list A list of image mean values in BGR order. It’s only applicable when preprocess_mode is caffe.
preprocess_mode string 'torch' Mode for input image preprocessing. Defaults to ‘caffe’. ‘caffe’, ‘torch’, ‘tf’
num_classes int Number of classes.
augmentation augmentation config Configuration of augmentation parameters.

The table below describes the parameters in the dataset.augmentation config.

Parameter Datatype Default Description Supported Values
enable_random_crop Boolean True A flag to enable random crop during training. True or False
enable_center_crop Boolean True A flag to enable center crop during validation. True or False
enable_color_augmentation Boolean True A flag to enable color augmentation during training. True or False
disable_horizontal_flip Boolean False A flag to disable horizontal flip. True or False
mixup_alpha float 0.2 A factor used for mixup augmentation. in the interval (0, 1)

Inference Config

The table below defines the configurable parameters for evaluating a classification model.

Parameter Datatype Typical value Description Supported Values
image_dir string The UNIX-format path to the directory containing the input images UNIX format path.
checkpoint string The UNIX-format path to the root directory of the model file you would like to evaluate UNIX format path.
classmmap string The class mapping generated by the training process
results_dir string The directory where the inference log and results will be saved UNIX format path.

Evaluation Config

The table below defines the configurable parameters for evaluating a classification model.

Parameter Datatype Typical value Description Supported Values
dataset_path string The UNIX-format to the root directory of the evaluation dataset UNIX format path.
checkpoint string The UNIX-format to the root directory of the model file you would like to evaluate UNIX format path.
top_k int 5 The number elements to look at when calculating the top-K classification categorical accuracy metric 1, 3, 5
batch_size int 256 The number of images per batch when evaluating the model >1 (bound by the number of images that can be fit in the GPU memory)
n_workers int 8 The number of workers fetching batches of images in the evaluation dataloader >1
results_dir string The directory where the evaluation log will be saved UNIX format path.

Training Config

This section defines the configurable parameters for the classification model trainer.

Parameter Datatype Default Description Supported Values
checkpoint string UNIX format path to the model file containing the pretrained weights to initialize the model from. UNIX format path.
batch_size_per_gpu int 32 The number of images per batch per GPU >1
num_epochs int 120 The total number of epochs to run the experiment >1
checkpoint_interval int 1 The frequency at which to save the checkpoints >1
n_workers int 10 The number of workers fetching batches of images in the training/validation dataloader >1
random_seed int The random seed for training
label_smoothing float 0.1 A factor used for label smoothing in the interval (0, 1)
lr_config learning rate config The parameters for the learning rate scheduler
reg_config regularizer config The parameters for regularizers
optim_config optimizer config The optimizer to use for training. The supported values are sgd, adam, or rmsprop
bn_config BatchNorm config The batch normalization layers
results_dir string The directory where the training log will be saved UNIX format path.

Learning Rate Scheduler

The parameter lr_config defines the parameters for learning rate scheduler The learning rate scheduler can be either step, soft_anneal or cosine.

Step

The parameter step defines the step learning rate scheduler.

Parameter Datatype Typical value Description Supported Values
learning_rate float The base(maximum) learning rate value. Positive, usually in the interval (0, 1).
step_size int The progress (percentage of the entire training duration) after which the learning rate will be decreased. Less than 100.
gamma float The multiplicative factor used to decrease the learning rate. In the interval (0, 1).
Note

The learning rate is automatically scaled with the number of GPUs used during training, or the effective learning rate is learning_rate * n_gpu.


Soft Annealing

The parameter soft_anneal defines the soft annealing learning rate scheduler.

Parameter Datatype Typical value Description Supported Values
learning_rate float The base (maximum) learning rate value. Positive, usually in the interval (0, 1).
soft_start float The progress at which learning rate achieves the base learning rate. In the interval (0, 1).
annealing_divider float The divider by which the learning rate will be scaled down. Greater than 1.0.
annealing_points repeated float Points of progress at which the learning rate will be decreased. List of floats. Each will be in the interval (0, 1).

Cosine

The parameter cosine defines the cosine learning rate scheduler.

Parameter Datatype Typical value Description Supported Values
learning_rate float The base (maximum) learning rate. Usually less than 1.0
min_lr_ratio float The ratio of minimum learning rate to the base learning rate. Less than 1.0
soft_start float The progress at which learning rate achieves the base learning rate. In the interval (0, 1).

learning_rate_schedules.png

Optimizer Config

Three types of optimizers are supported: Adam, SGD and RMSProp. Only one type should be specified in the spec file using optimizer

The Adam optimizer parameters are summarized in the table below.

Parameter Description Data Type and Constraints Default/Suggested Value
lr The learning rate. This parameter is overridden by the learning rate scheduler and hence not useful. float 0.01
beta_1 The momentum for the means of the model parameters float 0.9
beta_2 The momentum for the variances of the model parameters float 0.999
decay Th decay factor for the learning rate. This parameter is not useful. float 0.0
epsilon A small constant for numerical stability float 1e-7

The SGD optimizer parameters are summarized in the table below.

Parameter Description Data Type and Constraints Default/Suggested Value
lr The learning rate. This parameter is overridden by the learning rate scheduler and hence not useful. float 0.01
momentum The momentum of SGD float 0.9
decay The decay factor of the learning rate. This parameter is not useful because it is overridden by the learning rate scheduler. float 0.0
nesterov A flag to enable Nesterov momentum for SGD Boolean False

The RMSProp optimizer parameters are summarized in the table below.

Parameter Description Data Type and Constraints Default/Suggested Value
lr The learning rate. This parameter is overridden by the learning rate scheduler and hence not useful. float 0.01

BatchNorm Config

Parameter Description Data Type and Constraints Default/Suggested Value
momentum Momentum for the moving average float 0.9
epsilon Small float added to variance to avoid dividing by zero float 1e-5

Pruning Config

The prune configuration defines the pruning process for a trained model. A detailed description is summarized in the table below.

Field Description Data Type and Constraints Recommended/Typical Value
normalizer Normalization method. Specify max to normalize by dividing each norm by the maximum norm within a layer or L2 to normalize by dividing by the L2 norm of the vector comprising all kernel norms String max
equalization_criterion The criteria to equalize the stats of inputs to an element-wise op layer or depth-wise conv layer. Options are arithmetic_mean geometric_mean,``union``, and intersection. String union
granularity The number of filters to remove at a time Integer 8
threshold Pruning threshold Float
min_num_filters The minimum number of filters to keep per layer. Default: 16 Integer 16
excluded_layers A list of layers to be excluded from pruning List
checkpoint The path to the .tlt model to be pruned String
results_dir The directory where the pruning log and pruned model will be saved String

Export Config

The export configuration contains the parameters for exporting a .tlt model to an .onnx model, which can be used for deployment.

Field Description Data Type and Constraints Recommended/Typical Value
checkpoint The path to the .tlt model file to be exported String
onnx_file The path to save the exported .onnx model String
results_dir The directory where export log will be saved String

Use the tao model classification_tf2 train command to tune a pre-trained model:

Copy
Copied!
            

tao model classification_tf2 train [-h] -e <spec file> [--gpus <num GPUs>] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

Required Arguments

  • -e, --experiment_spec_file: Path to the experiment spec file.

Optional Arguments

  • --gpus: Number of GPUs to use and processes to launch for training. The default value is 1.

  • --gpu_index: The GPU indices used to run the training. We can specify the GPU indices used to run training when the machine has multiple GPUs installed.

  • --log_file: Path to the log file. Defaults to stdout.

  • -h, --help: Print the help message.

Note

See the Specification File for Classification section for more details.


Input Requirement

  • Input size: 3 * H * W (W, H >= 32)

  • Input format: JPG, JPEG, PNG

Note

Classification input images do not need to be manually resized. The input dataloader automatically resizes images to input size.


Sample Usage

Here’s an example of using the tao model classification_tf2 train command:

Copy
Copied!
            

tao model classification_tf2 train -e /workspace/spec.yaml --gpus 2


After the model has been trained, using the experiment config file, and by following the steps to train a model, the next step is to evaluate this model on a test set to measure the accuracy of the model.

The classification app computes evaluation loss, Top-k accuracy, precision, and recall as metrics. Evaluate a model using the tao model classification_tf2 evaluate command:

Copy
Copied!
            

tao model classification_tf2 evaluate [-h] -e <experiment_spec_file> [--gpu_index <gpu_index>] [--log_file <log_file>]

Required Arguments

  • -e, --experiment_spec_file: Path to the experiment spec file.

Optional Arguments

  • -h, --help: Show this help message and exit.

  • --gpu_index: The GPU indices used to run the training. We can specify the GPU indices used to run training when the machine has multiple GPUs installed.

  • --log_file: Path to the log file. Defaults to stdout.

If you followed the example in training a classification model, run the evaluation:

Copy
Copied!
            

tao model classification_tf2 evaluate -e classification_spec.yaml

TAO evaluates for classification and produces the following metrics:

  • Loss

  • Top-K accuracy

  • Precision (P): TP / (TP + FP)

  • Recall (R): TP / (TP + FN)

  • Confusion Matrix

The tao model classification_tf2 inference command runs the inference on a specified set of input images. For classification, tao model classification_tf2 inference provides class label output over the command-line for a single image or a csv file containing the image path and the corresponding labels for multiple images. TensorRT Python inference can also be enabled.

Execute tao model classification_tf2 inference on a classification model trained on TAO Toolkit.

Copy
Copied!
            

tao model classification_tf2 inference [-h] -e <experiment_spec_file> [--gpu_index <gpu_index>] [--log_file <log_file>]

Here are the arguments of the tao model classification_tf2 inference tool:

Required arguments

  • -e, --experiment_spec_file: Path to the experiment spec file.

Optional arguments

  • -h, --help: Show this help message and exit.

  • --gpu_index: The GPU indices used to run the training. We can specify the GPU indices used to run training when the machine has multiple GPUs installed.

  • --log_file: Path to the log file. Defaults to stdout.

Pruning removes parameters from the model to reduce the model size without compromising the integrity of the model itself using the tao model classification_tf2 prune command.

The tao model classification_tf2 prune command includes these parameters:

Copy
Copied!
            

tao model classification_tf2 prune [-h] -e <experiment_spec_file>

Required Arguments

  • -e, --experiment_spec_file: Path to the experiment spec file.

Optional Arguments

  • -h, --help: Show this help message and exit.

  • --gpu_index: The GPU indices used to run the training. We can specify the GPU indices used to run training when the machine has multiple GPUs installed.

  • --log_file: Path to the log file. Defaults to stdout.

After pruning, the model needs to be retrained. See Re-training the Pruned Model for more details.

Using the Prune Command

Here’s an example of using the tao model classification_tf2 prune command:

Copy
Copied!
            

tao model classification_tf2 prune -e /workspace/spec.yaml


After the model has been pruned, there might be a slight decrease in accuracy. This happens because some previously useful weights may have been removed. In order to regain the accuracy, NVIDIA recommends that you retrain this pruned model over the same dataset. To do this, use the tao model classification_tf2 train command as documented in Training the model, with an updated spec file that points to the newly pruned model as the pretrained model file.

Users are advised to turn off the regularizer in the train config for classification to recover the accuracy when retraining a pruned model. You may do this by setting the regularizer type to NO_REG. All the other parameters may be retained in the spec file from the previous training.

Exporting the model decouples the training process from inference and allows conversion to TensorRT engines outside the TAO environment. TensorRT engines are specific to each hardware configuration and should be generated for each unique inference environment. The exported model may be used universally across training and deployment hardware.

Here’s an example of the tao model classification_tf2 export command:

Copy
Copied!
            

tao model classification_tf2 export [-h] -e <experiment_spec_file> [--gpu_index <gpu_index>]

Required Arguments

  • -e, --experiment_spec: Path to the spec file.

Optional Arguments

  • --gpu_index: The index of (discrete) GPUs used for exporting the model. We can specify the GPU index to run export if the machine has multiple GPUs installed. Note that export can only run on a single GPU.

Sample Usage

Here’s a sample command.

Copy
Copied!
            

tao model classification_tf2 export -e /workspace/spec.yaml


For TensorRT engine generation, validation, and int8 calibration, refer to the TAO Deploy documentation.

Refer to the Integrating a Classification (TF1/TF2/PyTorch) Model page for more information about deploying a classification model with DeepStream.

© Copyright 2023, NVIDIA.. Last updated on Dec 8, 2023.