TAO v5.5.0

LPRNet

LPRNet(车牌识别网络)以图像作为网络输入,并预测车牌字符序列。

LPRNet 的数据集包含裁剪的车牌图像和相应的标签文件。

数据结构必须采用以下格式

复制
已复制!
            

/Dataset_01 /images 0000.jpg 0001.jpg 0002.jpg ... ... ... N.jpg /labels 0000.txt 0001.txt 0002.txt ... ... ... N.txt /characters_list.txt

每个裁剪的车牌图像都有一个对应的标签文本文件,其中包含特定车牌中的一行字符。还有一个 characters_list.txt 文件,其中包含车牌数据集中找到的所有字符。每个字符占一行。

LPRNet 的规范文件包括 random_seedlpr_configtraining_configeval_configaugmentation_configdataset_config 参数。以下是在 NVIDIA 车牌数据集上进行训练的示例

复制
已复制!
            

random_seed: 42 lpr_config { hidden_units: 512 max_label_length: 8 arch: "baseline" nlayers: 10 } training_config { batch_size_per_gpu: 32 num_epochs: 100 learning_rate { soft_start_annealing_schedule { min_learning_rate: 1e-6 max_learning_rate: 1e-4 soft_start: 0.001 annealing: 0.7 } } regularizer { type: L2 weight: 5e-4 } } eval_config { validation_period_during_training: 5 batch_size: 1 } augmentation_config { output_width: 96 output_height: 48 output_channel: 3 max_rotate_degree: 5 rotate_prob: 0.5 gaussian_kernel_size: 5 gaussian_kernel_size: 7 gaussian_kernel_size: 15 blur_prob: 0.5 reverse_color_prob: 0.5 keep_original_prob: 0.3 } dataset_config { data_sources: { label_directory_path: "/path/to/train/labels" image_directory_path: "/path/to/train/images" } characters_list_file: "/path/to/lp_characters" validation_data_sources: { label_directory_path: "/path/to/test/labels" image_directory_path: "/path/to/test/images" } }

参数 数据类型 默认值 描述
random_seed 无符号整数 42 实验的随机种子
lpr_config proto 消息 模型架构的配置
training_config proto 消息 训练过程的配置
eval_config proto 消息 评估过程的配置
augmentation_config proto 消息 数据增强的配置
dataset_config proto 消息 数据集的配置

lpr_config

lpr_config 参数提供更改 LPRNet 架构的选项。

复制
已复制!
            

lpr_config { hidden_units: 512 max_label_length: 8 arch: "baseline" nlayers: 10 }

参数

数据类型

默认值

描述

支持的值

hidden_units 无符号整数 512 LPRNet 的 LSTM 层中隐藏单元的数量
max_label_length 无符号整数 8 数据集中车牌的最大长度
arch 字符串 baseline LPRNet 的架构 baseline
nlayers 无符号整数 10 LPRNet 中卷积层的数量 10, 18

training_config

training_config 参数定义训练过程的超参数。

复制
已复制!
            

training_config { checkpoint_interval: 5 batch_size_per_gpu: 32 num_epochs: 100 learning_rate { soft_start_annealing_schedule { min_learning_rate: 1e-6 max_learning_rate: 1e-4 soft_start: 0.001 annealing: 0.7 } } regularizer { type: L2 weight: 5e-4 } }

参数 数据类型 默认值 描述 支持的值
batch_size_per_gpu 整数 32 每个 GPU 每个批次的图像数量 >1
num_epochs 整数 120 实验中运行的总 epoch 数
checkpoint_interval 整数 5 保存检查点的时间间隔 >0

learning rate

学习率调度器 proto

soft_start
_annealing
_schedule

训练器的学习率调度。目前,
LPRNet 仅支持 soft-start annealing 学习率调度。可以使用以下参数进行配置
使用以下参数配置

* soft_start (float): 学习率从最小学习率升至最大学习率的时间
* annealing (float): 学习率从最大学习率降至最小学习率的时间
* minimum_learning_rate (float): 学习率调度中的最小学习率。
* maximum_learning_rate (float): 学习率调度中的最大学习率。

annealing: 0.0-1.0 且大于 soft_start – Soft_start: 0.0 - 1.0

下图显示了 soft start 为 0.3 和 annealing 为 0.1 的学习率曲线示例。
在下图中。

regularizer

regularizer proto config

此参数配置训练期间要使用的正则化器的类型和权重。此配置包含两个
参数

* type:正在使用的正则化器的类型
* weight:正则化器的浮点权重

以下是 type 的支持值:

* NO_REG
* L1
* L2

visualizer 消息类型 训练可视化配置
early_stopping 消息类型 提前停止配置

visualizer

训练期间的可视化使用 visualizer 参数进行配置。下表描述了这些参数。

参数 数据类型 默认值 描述 支持的值
enabled 布尔值 false 用于启用或禁用此功能的布尔标志
num_images 整数 3 要在 TensorBoard 中可视化的最大图像数量。 >0

如果启用可视化,则训练期间将生成 TensorBoard 日志,包括学习率、训练损失和验证准确率的图表。增强图像也将在 TensorBoard 中生成。

early_stopping

下表描述了提前停止的参数。

参数 数据类型 默认值 描述 支持的值
monitor 字符串 为了启用提前停止而要监视的指标 loss
patience 整数 0 停止训练前对 monitor 值进行检查的次数
min_delta 浮点数 0.0 monitor 最小值的 delta,低于该值则视为未减少。

eval_config

eval_config 参数定义评估过程的超参数。评估的指标是车牌识别准确率。如果车牌中的所有字符都分类正确,则认为识别正确。

复制
已复制!
            

eval_config { validation_period_during_training: 5 batch_size: 1 }

参数 数据类型 默认/建议值 描述 支持的值
validation_period_during_training 整数 5 在训练期间运行评估的时间间隔。评估从此间隔开始运行,起始于下面指定的第一个验证 epoch 参数的值。 1 - 总 epoch 数
batch_size 整数 1 要进行单次推理的样本数 >0

augmentation_config

augmentation_config 参数包含训练期间增强的超参数。它还定义了网络输入的空间大小。

复制
已复制!
            

augmentation_config { output_width: 96 output_height: 48 output_channel: 3 max_rotate_degree: 5 rotate_prob: 0.5 gaussian_kernel_size: 5 gaussian_kernel_size: 7 gaussian_kernel_size: 15 blur_prob: 0.5 reverse_color_prob: 0.5 keep_original_prob: 0.3 }

参数 数据类型 默认/建议值 描述 支持的值
output_width 无符号整数 96 预处理图像的宽度。网络输入的宽度 >0
output_height 无符号整数 48 预处理图像的高度。网络输入的高度 >0
output_channel 无符号整数 3 预处理图像的通道 1, 3
keep_original_prob 浮点数 0.3 保留原始图像的概率。仅调整大小将应用于具有此概率的图像 0.0 ~ 1.0
max_rotate_degree 无符号整数 5 增强的最大旋转角度 0.0 ~ 90.0
rotate_prob 浮点数 0.5 旋转图像的概率 0.0 ~ 1.0
gaussian_kernel_size 无符号整数 5, 7, 15 高斯模糊的内核大小 >0
blur_prob 浮点数 0.5 模糊图像的概率 0.0 ~ 1.0
reverse_color_prob 浮点数 0.5 反转图像颜色的概率 0.0 ~ 1.0

dataset_config

dataset_config 参数定义训练数据集、验证数据集和字符列表文件的路径。

复制
已复制!
            

dataset_config { data_sources: { label_directory_path: "/path/to/train/labels" image_directory_path: "/path/to/train/images" } characters_list_file: "/path/to/lp_characters" validation_data_sources: { label_directory_path: "/path/to/test/labels" image_directory_path: "/path/to/test/images" } }

参数 数据类型 默认/建议值 描述 支持的值
data_sources dataset proto

训练数据集图像和标签的路径

  • label_directory_path:标签目录的路径
  • image_directory_path:图像目录的路径
validation_data_sources dataset proto 验证数据集图像和标签的路径
characters_list_file 字符串 字符列表文件的路径 此文件中的字符应为 unicode 格式。
注意

data_sourcesvalidation_data_sources 都是重复字段。可以将多个数据集添加到源。

使用以下命令运行 LPRNet 训练

复制
已复制!
            

tao model lprnet train -e <experiment_spec_file> -r <results_dir> -k <key> [--gpus <num_gpus>] [--gpu_index <gpu_index>] [--use_amp] [--log_file <log_file>] [-m <resume_model_path>] [--initial_epoch <initial_epoch>]

必需参数

  • -e, --experiment_spec_file:实验规范文件的路径

  • -r, --results_dir:实验输出应写入的文件夹的路径。

  • -k, --key:用户特定的编码密钥,用于保存或加载 .tlt 模型。

可选参数

  • --gpus:在多 GPU 场景中用于训练的 GPU 数量(默认值:1)。

  • --gpu_index:用于运行训练的 GPU 索引。当机器安装了多个 GPU 时,我们可以指定用于运行训练的 GPU 索引。

  • --use_amp:用于启用 AMP 训练的标志。

  • --log_file:日志文件的路径。默认为 stdout

  • -m, --resume_model_weights:预训练模型或要继续训练的模型的路径。

  • --initial_epoch:开始训练的 epoch。

以下是使用 LPRNet 训练命令的示例

复制
已复制!
            

tao model lprnet train --gpu_index=0 -e $DEFAULT_SPEC -r $RESULTS_DIR -k $YOUR_KEY

注意

要从 .tlt 模型恢复训练,请将 -m 设置为该模型,并将 --initial_epoch 设置为起始 epoch 编号。

LPRNet 的评估指标是识别准确率。如果车牌中的所有字符都正确,则认为识别准确。

使用以下命令运行 LPRNet 评估

复制
已复制!
            

tao model lprnet evaluate -m <model> -e <experiment_spec_file> [-k <key>] [--gpu_index <gpu_index>] [--log_file <log_file>] [--trt]

必需参数

  • -m, --model:要评估的 .tlt 模型或 TRT 引擎。

  • -e, --experiment_spec_file:实验规范文件,用于设置评估实验。这应与训练规范文件相同。

可选参数

  • -h, --help:显示此帮助消息并退出。

  • -k, --key.tlt 模型的编码密钥。

  • --gpu_index:用于运行评估的 GPU 索引。当机器安装了多个 GPU 时,您可以指定用于运行评估的 GPU 索引。请注意,评估只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。默认为 stdout

  • --trt:评估 TRT 引擎。

以下是使用 LPRNet 评估命令的示例

复制
已复制!
            

tao model lprnet evaluate --gpu_index=0 -m $TRAINED_TLT_MODEL -e $DEFAULT_SPEC -k $YOUR_KEY

使用以下命令在 LPRNet 上运行推理,使用 .tlt 模型或 TensorRT 引擎

复制
已复制!
            

tao model lprnet inference -m <model> -i <in_image_path> -e <experiment_spec> [-k <key>] [--gpu_index <gpu_index>] [--log_file <log_file>] [--trt]

必需参数

  • -m, --model:用于推理的 .tlt 模型或 TensorRT 引擎

  • -i, --in_image_path:要进行推理的车牌图像的路径。

  • -e, --experiment_spec:实验规范文件,用于设置导出。可以与训练规范相同。

可选参数

  • -h, --help:显示此帮助消息并退出。

  • -k, --key.tlt 模型的编码密钥。

  • --gpu_index:用于运行推理的 GPU 索引。当机器安装了多个 GPU 时,我们可以指定用于运行推理的 GPU 索引。请注意,推理只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。默认为 stdout

  • --trt:使用 TRT 引擎运行推理。

以下是使用 LPRNet 推理命令的示例

复制
已复制!
            

tao model lprnet inference --gpu_index=0 -m $SAVED_TRT_ENGINE -i $PATH_TO_TEST_IMAGES -e $DEFAULT_SPEC --trt

使用以下命令将 LPRNet 导出为 .etlt 格式以进行部署

复制
已复制!
            

tao model lprnet export -m <model> -k <key> -e <experiment_spec> [--gpu_index <gpu_index>] [--log_file <log_file>] [-o <output_file>] [--data_type {fp32,fp16}] [--max_workspace_size <max_workspace_size>] [--max_batch_size <max_batch_size>] [--engine_file <engine_file>] [-v]

必需参数

  • -m, --model:要导出的 .tlt 模型。

  • -k, --key.tlt 模型的编码密钥。

  • -e, --experiment_spec:实验规范文件,用于设置导出。可以与训练规范相同。

可选参数

  • --gpu_index:用于导出模型的(离散)GPU 的索引。如果机器安装了多个 GPU,我们可以指定用于运行导出的 GPU 索引。请注意,导出只能在单个 GPU 上运行。

  • --log_file:日志文件的路径。默认为 stdout

  • -o, --output_file:保存导出模型的路径。默认值为 ./<input_file>.etlt

  • --data_type:如果处于 INT8 模式,则生成校准缓存所需的目标引擎数据类型。选项为 fp32fp16。默认值为 fp32

您可以使用以下可选参数来保存生成的 TRT 引擎,以验证导出

  • --max_batch_size:TensorRT 引擎的最大批次大小。默认值为 16

  • --max_workspace_size:TensorRT 引擎的最大工作区大小。默认值为 1073741824(1<<30)

  • --engine_file:序列化 TensorRT 引擎文件的路径。请注意,此文件特定于硬件,不能在 GPU 之间通用。有助于在主机上使用 TensorRT 快速测试模型准确率。由于 TensorRT 引擎文件特定于硬件,因此除非部署 GPU 与训练 GPU 完全相同,否则您不能将此引擎文件用于部署。

以下是使用 LPRNet 导出命令的示例

复制
已复制!
            

tao model lprnet export --gpu_index=0 -m $TRAINED_TAO_MODEL -e $DEFAULT_SPEC -k $YOUR_KEY

您训练的深度学习和计算机视觉模型可以部署在边缘设备上,例如 Jetson Xavier、Jetson Nano 或 Tesla,或者在使用 NVIDIA GPU 的云中。

DeepStream SDK 是一种流分析工具包,用于加速构建基于 AI 的视频分析应用程序。TAO 与 DeepStream SDK 集成,因此使用 TAO 训练的模型可以与 Deepstream 开箱即用。

注意

DeepStream 无法直接解析 LPRNet .etlt。您应使用 tao-converter.etlt 模型转换为优化的 TensorRT 引擎,然后将该引擎集成到 DeepStream 管道中。

使用 tao-converter

tao-converter 是 TAO 提供的一种工具,用于简化 TAO 训练的模型在 TensorRT 和/或 Deepstream 上的部署。对于具有基于 x86 的 CPU 和独立 GPU 的部署平台,tao-converter 分布在 TAO Docker 容器中。因此,建议使用 Docker 容器生成引擎。但是,这要求用户遵守与 Docker 容器分发的 TensorRT 相同的次要版本。TAO Docker 容器包含 TensorRT 版本 7.1。为了将引擎与不同次要版本的 TensorRT 一起使用,请将转换器从 /opt/nvidia/tools/tao-converter 复制到目标机器,并按照 x86 的说明运行它并生成 TensorRT 引擎。

对于 aarch64 平台,tao-converter 可在 开发者专区 中下载。

以下是通过 tao-converter 生成 LPRNet 引擎的示例命令

复制
已复制!
            

tao-converter <etlt_model> -k <key_to_etlt_model> -p image_input,1x3x48x96,4x3x48x96,16x3x48x96 -e <path_to_generated_trt_engine>

通过此命令,将生成具有动态输入形状的优化 TensorRT 引擎。(此引擎的动态形状:min_shape=[1x3x48x96],opt_shape=[4x3x48x96],max_shape=[16x3x48x96]。形状格式为 NCHW。)

在 DeepStream 示例中部署 LPRNet

获得 LPRNet 的 TensorRT 引擎后,您可以将其部署到 DeepStream 的 LPDR 示例 中。此示例是一个完整的解决方案,包括汽车检测、车牌检测和车牌识别。此示例中提供了一个可配置的 CTC 解码器

上一页 字符识别
下一页 情感分类
© 版权所有 2024, NVIDIA。 上次更新时间:2024 年 10 月 15 日。