TAO v5.5.0

YOLOv4-tiny

YOLOv4-tiny 是 TAO 中包含的对象检测模型。YOLOv4-tiny 支持以下任务

  • dataset_convert

  • kmeans

  • train

  • evaluate

  • inference

  • prune

  • export

这些任务可以使用 TAO Launcher 从命令行调用,使用以下约定

复制
已复制!
            

tao model yolo_v4_tiny <sub_task> <args_per_subtask>

其中 args_per_subtask 是给定子任务所需的命令行参数。每个子任务将在下面详细解释。

YOLOv4-tiny 的数据集结构与 DetectNet_v2 的结构相同。唯一的区别是用于从 KITTI 文本标签生成 TFRecords 的命令行。要为 YOLOv4-tiny 训练生成 TFRecords,请使用此命令

复制
已复制!
            

tao model yolo_v4_tiny dataset_convert [-h] -d <dataset_spec> -o <output_tfrecords_file> [--gpu_index <gpu_index>]

必需参数

  • -d, --dataset_spec:数据集规范文件路径。

  • -o, --output_filename:输出 TFRecords 文件路径。

可选参数

  • --gpu_index:运行此命令的 GPU 索引。如果机器安装了多个 GPU,我们可以指定用于运行此命令的 GPU 索引。请注意,此命令只能在单个 GPU 上运行。

以下是 YOLOv4-tiny 规范文件的示例。它有 6 个主要组成部分:yolov4_configtraining_configeval_confignms_configaugmentation_configdataset_config。规范文件的格式是 protobuf 文本 (prototxt) 消息,其每个字段可以是基本数据类型或嵌套消息。下表总结了规范文件的顶层结构。

复制
已复制!
            

random_seed: 42 yolov4_config { big_anchor_shape: "[(260.69, 172.35), (125.91, 81.47), (72.27, 42.42)]" mid_anchor_shape: "[(30.80, 71.40), (38.97, 26.86), (18.88, 17.11)]" box_matching_iou: 0.25 matching_neutral_box_iou: 0.5 arch: "cspdarknet_tiny" loss_loc_weight: 1.0 loss_neg_obj_weights: 1.0 loss_class_weights: 1.0 label_smoothing: 0.0 big_grid_xy_extend: 0.05 mid_grid_xy_extend: 0.05 freeze_bn: false force_relu: false } training_config { batch_size_per_gpu: 8 num_epochs: 80 enable_qat: false checkpoint_interval: 10 learning_rate { soft_start_cosine_annealing_schedule { min_learning_rate: 1e-7 max_learning_rate: 1e-4 soft_start: 0.3 } } regularizer { type: L1 weight: 3e-5 } optimizer { adam { epsilon: 1e-7 beta1: 0.9 beta2: 0.999 amsgrad: false } } } eval_config { average_precision_mode: SAMPLE batch_size: 8 matching_iou_threshold: 0.5 } nms_config { confidence_threshold: 0.001 clustering_iou_threshold: 0.5 top_k: 200 } augmentation_config { hue: 0.1 saturation: 1.5 exposure:1.5 vertical_flip:0 horizontal_flip: 0.5 jitter: 0.3 output_width: 1248 output_height: 384 output_channel: 3 randomize_input_shape_period: 10 mosaic_prob: 0.5 mosaic_min_ratio:0.2 } dataset_config { data_sources: { tfrecords_path: "/workspace/tao-experiments/data/training/tfrecords/train*" image_directory_path: "/workspace/tao-experiments/data/training" } include_difficult_in_training: true image_extension: "png" target_class_mapping { key: "car" value: "car" } target_class_mapping { key: "pedestrian" value: "pedestrian" } target_class_mapping { key: "cyclist" value: "cyclist" } target_class_mapping { key: "van" value: "car" } target_class_mapping { key: "person_sitting" value: "pedestrian" } validation_data_sources: { tfrecords_path: "/workspace/tao-experiments/data/val/tfrecords/val*" image_directory_path: "/workspace/tao-experiments/data/val" } }

训练配置

训练配置 (training_config) 定义了训练、评估和推理所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
batch_size_per_gpu 每个 GPU 的批大小;有效批大小为 batch_size_per_gpu * num_gpus 无符号整数,正数
checkpoint_interval 每个模型检查点/验证的训练 epoch 数 无符号整数,正数 10
num_epochs 网络训练的 epoch 数 无符号整数,正数。
enable_qat 是否使用量化感知训练 布尔值 注意:YOLOv4-tiny 不支持加载已剪枝的 QAT 模型并在禁用 QAT 的情况下重新训练它,反之亦然。例如,要获得剪枝的 QAT 模型,请在启用 QAT 或 enable_qat=True 的情况下执行初始训练。
learning_rate 支持具有以下嵌套参数的 soft_start_annealing_schedule 和 soft_start_cosine_annealing_schedule
  1. min_learning_rate:整个实验期间的最小学习率
  2. max_learning_rate:整个实验期间的最大学习率
  3. soft_start:预热前经过的时间(表示为 0 到 1 之间进度的百分比)
  4. annealing:(仅适用于 soft_start_annealing_schedule)开始退火学习率的时间
消息类型
regularizer 此参数配置训练时使用的正则化器,并包含以下嵌套参数
  1. type:要使用的正则化器类型。NVIDIA 支持 NO_REG、L1 或 L2。
  2. weight:正则化器权重的浮点值
消息类型 L1(注意:NVIDIA 建议在剪枝前训练网络时使用 L1 正则化器,因为 L1 正则化使网络权重更易于剪枝。)
optimizer 优化器可以是 adam、sgd 和 rmsprop 之一。每种类型都有以下参数
  1. adam:epsilon、beta1、beta2、amsgrad
  2. sgd:momentum、nesterov
  3. rmsprop:rho、momentum、epsilon、centered

以上参数的含义与 Keras 中的含义相同。

消息类型
pretrain_model_path 预训练模型的路径(如果有)。最多可以存在一个 pretrain_model_path、resume_model_path 和 pruned_model_path。 字符串
resume_model_path 要恢复训练的 TAO 检查点模型的路径(如果有)。最多可以存在一个 pretrain_model_path、resume_model_path 和 pruned_model_path。 字符串
pruned_model_path 用于重新训练的 TAO 剪枝模型的路径(如果有)。最多可以存在一个 pretrain_model_path、resume_model_path 和 pruned_model_path。 字符串
max_queue_size 数据加载中预取批次的数量 无符号整数,正数
n_workers 每个 GPU 数据加载的工作进程数 无符号整数,正数
use_multiprocessing 是否使用 keras 序列数据加载器的多处理模式 布尔值 true(如果发生死锁,请重新启动训练并使用 False)
visualizer 训练期间的可视化配置 消息类型
early_stopping 提前停止的参数 消息类型
注意

学习率会根据训练期间使用的 GPU 数量自动缩放,或者有效学习率为 learning_rate * n_gpu

训练期间的可视化

训练期间的可视化由 visualizer 参数配置。下表描述了它的参数。

参数 描述 数据类型和约束 默认/建议值
enabled 用于启用或禁用此功能的布尔标志 布尔值。
num_images 要在 TensorBoard 中可视化的最大图像数量。 整数。 3

训练期间的可视化支持 3 种类型的可视化,即:标量、图像和直方图。这些类型的可视化都利用 TensorBoard 工具。每种类型在 TensorBoard GUI 界面中都有一个选项卡。使用标量选项卡,它可以可视化随时间(训练步骤)变化的标量,如损失、学习率和验证 mAP。使用图像选项卡,它可以可视化训练期间增强的图像,并在其上绘制边界框。使用直方图选项卡,它可以可视化正在训练的模型的每一层权重和偏差的直方图。

如果参数 enabled 设置为 True,则将启用上述所有可视化。否则,将禁用所有可视化。

参数 num_images 用于限制要在 TensorBoard 的图像选项卡上可视化的最大图像数量。

在训练期间,可以在任何可以访问 TensorBoard 日志目录的位置完成可视化。通常,TAO 容器会将卷映射到主机,因此可以在主机上调用 TensorBoard。tensorboard --logdir=/path/to/logs 命令可用于在 Web 浏览器中打开 TensorBoard 可视化 GUI。确保在运行此命令之前安装了 tensorboard。如果环境中未安装,可以运行 pip3 install tensorboard 来安装它。/path/to/logs 参数是训练的结果目录,并附加了后缀 /logs

提前停止

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

参数 描述 数据类型和约束 默认/建议值
monitor 为了启用提前停止而要监视的指标。 字符串 loss
patience 在停止训练之前检查 monitor 值的次数。 整数 正整数
min_delta monitor 值的最小值增量,低于该增量我们认为它没有减少。 浮点数 非负浮点数

评估配置

评估配置 (eval_config) 定义了在训练期间或独立评估期间进行评估所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
average_precision_mode 平均精度 (AP) 计算模式可以是 SAMPLE 或 INTEGRATE。SAMPLE 用作 VOC 指标,用于 VOC 2009 或更早版本。INTEGRATE 用于 VOC 2010 或更高版本。 ENUM 类型(SAMPLE 或 INTEGRATE) SAMPLE
matching_iou_threshold 可以被视为匹配的预测框和真实框的最低 IoU 浮点数 0.5
visualize_pr_curve 用于启用或禁用 Precision-Recall 曲线可视化的布尔标志。 布尔值。
注意

参数 visualize_pr_curve,如果设置为 True,将在 evaluate 命令期间生成精确率-召回率曲线的图像,图像的确切路径可以在屏幕日志中看到。通过检查图像,我们可以看到每个类在精确率和召回率之间的权衡方面的性能。

NMS 配置

NMS 配置 (nms_config) 定义了 NMS 后处理所需的参数。NMS 配置适用于训练、验证、评估、推理和导出中模型的 NMS 层。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
confidence_threshold 置信度得分低于 confidence_threshold 的框在应用 NMS 之前将被丢弃。 浮点数 0.01
cluster_iou_threshold IoU 阈值,低于此阈值的框将经历 NMS 过程。 浮点数 0.6
top_k NMS keras 层之后将输出 top_k 个框。如果有效框的数量少于 k,则返回的数组将用置信度得分为 0 的框填充。 无符号整数 200
infer_nms_score_bits 在 TensorRT OSS 中的 NMS 插件中表示得分值的位数。有效范围是 [1, 10] 中的整数。将其设置为任何其他值将使其回退到普通 NMS。目前,此优化的 NMS 插件仅在 FP16 中可用,但它也应由 INT8 数据类型选择,因为 TensorRT OSS 中没有 INT8 NMS,因此将选择 FP16 中最快的实现。如果回退到普通 NMS,则构建引擎时的实际数据类型将决定运行的确切精度(FP16 或 FP32)。 整数。在 [1, 10] 区间内。 0

增强配置

增强配置 (augmentation_config) 定义了在线数据增强所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
hue 要在 [-hue, hue] * 180.0 范围内更改的图像色调 [0, 1] 的浮点数 0.1
saturation 要在 [1.0 / saturation, saturation] 倍范围内更改的图像饱和度 浮点数 >= 1.0 1.5
exposure 要在 [1.0 / exposure, exposure] 倍范围内更改的图像曝光度 浮点数 >= 1.0 1.5
vertical_flip 图像垂直翻转的概率 [0, 1] 的浮点数 0
horizontal_flip 图像水平翻转的概率 [0, 1] 的浮点数 0.5
jitter 增强中允许的最大抖动;“jitter”此处指的是 YOLO 网络中的抖动增强 [0, 1] 的浮点数 0.3
output_width 增强管道的基本输出图像宽度 整数,32 的倍数
output_height 增强管道的基本输出图像高度 整数,32 的倍数
output_channel 增强管道的输出通道数 1 或 3
randomize_input_shape_period 随机更改输出宽度和高度的批次间隔。对于值 K,增强管道将按每 K 个批次调整输出形状,并且调整后的输出宽度/高度将在基本宽度/高度的 0.6 到 1.5 倍之间。注意:如果 K=0,则输出宽度/高度将始终是配置的确切基本宽度/高度,并且训练速度会快得多。但是,训练网络的准确性可能不如预期。 非负整数 10
mosaic_prob 马赛克增强应用于一个图像的概率 [0, 1] 的浮点数 0.5
mosaic_min_ratio 一个子图像应占用的最小宽度/高度比率 (0, 0.5) 的浮点数 0.2
image_mean 用于指定图像均值的键/值对。如果省略,则 ImageNet 均值将用于图像预处理。如果设置,则取决于 output_channel,必须配置 ‘r/g/b’ 或 ‘l’ 键/值对。 字典

数据集配置

YOLOv4-tiny 支持两种数据格式:序列格式(图像文件夹和带有 KITTI 格式的原始标签文件夹)和 tfrecords 格式(图像文件夹和 TFRecords)。根据我们的经验,如果禁用马赛克增强 (mosaic_prob=0),则使用 TFRecords 格式训练更快。如果启用马赛克增强 (mosaic_prob>0),则使用序列格式训练更快。trainevaluate 命令将根据您的 dataset_config 确定数据格式。

YOLOv4-tiny 数据加载器假定训练/验证拆分已完成,并且数据已以 KITTI 格式准备:图像和标签位于两个单独的文件夹中,其中图像文件夹中的每个图像在标签文件夹中都有一个具有相同文件名的 .txt 标签文件,并且标签文件内容遵循 KITTI 格式。支持 COCO 数据格式,但仅通过 TFRecords。使用 dataset_convert 准备 TFRecords。

序列格式

如果您想使用序列格式,以下是 dataset_config 元素的示例

复制
已复制!
            

dataset_config { data_sources: { label_directory_path: "/workspace/tao-experiments/data/training/label_2" image_directory_path: "/workspace/tao-experiments/data/training/image_2" } data_sources: { label_directory_path: "/workspace/tao-experiments/data/training/label_3" image_directory_path: "/workspace/tao-experiments/data/training/image_3" } include_difficult_in_training: true target_class_mapping { key: "car" value: "car" } target_class_mapping { key: "pedestrian" value: "pedestrian" } target_class_mapping { key: "cyclist" value: "cyclist" } target_class_mapping { key: "van" value: "car" } target_class_mapping { key: "person_sitting" value: "pedestrian" } validation_data_sources: { label_directory_path: "/workspace/tao-experiments/data/val/label_1" image_directory_path: "/workspace/tao-experiments/data/val/image_1" } }

dataset_config 中的参数定义如下

  • data_sources:要训练的数据集路径。如果您有多个训练数据源,则可以使用多个 data_sources。此字段包含 2 个参数

    • label_directory_path:数据源标签文件夹的路径。

    • image_directory_path:数据源图像文件夹的路径。

  • include_difficult_in_training:一个标志,用于指定是否在训练中包含困难框。如果设置为 false,则将忽略困难框。困难框是在 KITTI 标签中具有非零遮挡级别的框。

  • target_class_mapping:此参数将标签中的类名称映射到网络中要训练的目标类。为每个源类到目标类映射定义一个元素。包含此字段的目的是将相似的类对象分组到一个保护伞下。例如,“car”、“van”、“heavy_truck”等可以分组在“automobile”下。“key”字段是 tfrecords 文件中类名称的值,“value”字段对应于网络预期学习的值。

  • validation_data_sources:捕获要验证的数据集路径。如果您有多个验证数据源,则可以使用多个 validation_data_sources。与 data_sources 一样,此字段包含两个参数。

注意

target_class_mapping 中的类名称键必须与 KITTI 标签中显示的类名称相同,以便为训练选择正确的类。

TFRecords 格式

TFRecords 格式需要所有标签的 tfrecords。这需要运行 tao model yolo_v4_tiny dataset-convert 命令。该命令具有与 detectnet_v2 相同的功能和参数要求,有关如何生成 tfrecords 的详细信息,请查看 detectnet_v2 中的 预处理数据集

如果您想使用从 KITTI 数据格式转换而来的 tfrecords 格式,以下是 dataset_config 元素的示例。在这里,我们假设您的 tfrecords 都生成在名为 tfrecords 的文件夹下,该文件夹与图像和标签位于同一父文件夹下

复制
已复制!
            

dataset_config { data_sources: { tfrecords_path: "/workspace/tao-experiments/data/training/tfrecords/<tfrecords pattern>" image_directory_path: "/workspace/tao-experiments/data/training" } include_difficult_in_training: true image_extension: "png" target_class_mapping { key: "car" value: "car" } target_class_mapping { key: "pedestrian" value: "pedestrian" } target_class_mapping { key: "cyclist" value: "cyclist" } target_class_mapping { key: "van" value: "car" } target_class_mapping { key: "person_sitting" value: "pedestrian" } validation_data_sources: { tfrecords_path: "/workspace/tao-experiments/data/val/tfrecords/<tfrecords pattern>" image_directory_path: "/workspace/tao-experiments/data/val" } }

dataset_config 中的参数定义如下

  • data_sources:要训练的数据集路径。如果您有多个训练数据源,则可以使用多个 data_sources。此字段包含 2 个参数

    • tfrecords_path:数据源 tfrecords 的路径。

    • image_directory_path:包含图像文件夹的根目录的路径。

  • image_extension:图像文件夹中包含的图像的图像扩展名。注意,要使用 tfrecords 格式,所有图像必须具有相同的扩展名,目前我们支持 jpg 和 png

  • validation_data_sources:捕获要验证的数据集路径。此字段包含与 data_sources 相同的两个参数。如果您有多个验证数据源,则可以使用多个 validation_data_sources

所有其他字段与序列格式 dataset_config 中的字段相同。

YOLO4 配置

YOLOv4 配置 (yolov4_config) 定义了构建 YOLOv4-tiny 模型所需的参数。下表总结了详细信息。

字段 描述 数据类型和约束 推荐/典型值
big_anchor_shape、mid_anchor_shape 和 small_anchor_shape 这些设置应为引号内的 1 维数组。这些数组的元素是元组,表示预定义的锚形状,顺序为“宽度、高度”。默认的 YOLOv4 配置有九个预定义的锚形状。它们分为三组,分别对应于大、中、小型对象。与不同组对应的检测输出来自网络中的不同深度。您应该运行 kmeans 命令 (tao model yolo_v4_tiny kmeans) 以确定数据集的最佳锚形状,并将这些锚形状放入规范文件中。值得注意的是,任何字段的锚形状数量不限于三个;您只需要在三个字段中的每一个中指定一个锚形状。对于 YOLOv4-tiny,如果使用 cspdarknet_tiny 架构,则只需提供 big_anchor_shapemid_anchor_shape;如果使用 cspdarknet_tiny_3l 架构,则应提供所有 3 个形状。 字符串 使用 tao model yolo_v4_tiny kmeans 命令生成这些形状
box_matching_iou 此字段应为介于 0 和 1 之间的浮点数。任何与任何真实框的 IoU 至少为此值的锚框都将与其具有最大 IoU 的真实框匹配。与 YOLOv3 相比,一个真实框可能在 YOLOv4-tiny 中匹配到多个锚框。 浮点数 0.5
matching_neutral_box_iou 此字段应为介于 0.25 和 1 之间的浮点数。任何与任何真实框的 IoU 至少为此值的推断边界框都不会被视为负框,并且其负对象性损失(中性框)将被赋值为 0 浮点数 0.5
loss_loc_weight、loss_neg_obj_weights 和 loss_class_weights 这些损失权重可以配置为浮点数。YOLOv4-tiny 损失是定位损失、负对象性损失、正对象性损失和分类损失的总和。这些权重应全部设置为 1。 浮点数 loss_loc_weight:1.0 loss_neg_obj_weights:1.0 loss_class_weights:1.0
label_smoothing 应用于分类损失的标签平滑。 [0, 0.3] 的浮点数 0, 0.1, 0.2
big_grid_xy_extend、mid_grid_xy_extend 和 small_grid_xy_extend 这些设置应为小的正浮点数。相对于锚框计算的框中心将根据以下公式重新校准:center_xy = calculated_xy * (grid_xy_extend + 1.0) - grid_xy_extend / 2.0 默认的 YOLOv4-tiny 有九个预定义的锚形状。它们分为三组,分别对应于大、中、小型对象。与不同组对应的检测输出来自网络中的不同深度。这三个不同的 grid_xy_extend 配置允许用户为不同的锚形状组定义不同的 grid_xy_extend 值。对于 YOLOv4-tiny,如果使用 cspdarknet_tiny 架构,为了与锚形状对齐,则只需提供 big_grid_xy_extendmid_grid_xy_extend;如果使用 cspdarknet_tiny_3l 架构,则应提供所有这些值。grid_xy_extend 设置使网络更容易提出中心接近或位于锚框边界上的推断框。 [0, 0.3] 的浮点数 0.05, 0.1, 0.2
arch 用于特征提取的骨干网络。对于 YOLOv4-tiny,仅支持 cspdarknet_tinycspdarknet_tiny_3l。前一个架构有两个头(步幅 8 和 16),而后一个架构有三个头(步幅 8、16 和 32)。 字符串 cspdarknet_tiny
freeze_bn 一个标志,用于指定是否在训练期间冻结所有批归一化层。 布尔值 False
freeze_blocks 要在模型训练期间冻结的块 ID 列表。您可以选择冻结模型中的某些 CNN 块,以使训练更稳定和/或更容易收敛。块的定义对于特定架构是启发式的(例如,按步幅或按模型中的逻辑块)。但是,块 ID 号按顺序标识模型中的块,因此您不必在训练时知道块的确切位置。要记住的一般原则是,块 ID 越小,它就越接近模型输入;块 ID 越大,它就越接近模型输出。对于 YOLOv4-tiny,它应该是 {0, 1, 2, 3, 4, 5} 的子集。 list(重复整数),应为 {0, 1, 2, 3, 4, 5} 的子集
force_relu 一个标志,用于指定是否将所有激活函数替换为 ReLU。这对于为 NVDLA 训练模型很有用。 布尔值 False

锚形状应与数据集中的大多数真实框匹配,以帮助网络学习边界框。YOLOv4 论文建议使用 kmeans 算法来获取锚形状,并且 TAO 算法中实现了 tao model yolo_v4_tiny kmeans 命令。您应该使用输出作为 yolov4_config 规范文件中的锚形状。

复制
已复制!
            

tao model yolo_v4_tiny kmeans [-h] -l <label_folders> -i <image_folders> -x <network base input width> -y <network base input height> [-n <num_clusters>] [--max_steps <kmeans max steps>] [--min_x <ignore boxes with width less than this value>] [--min_y <ignore boxes with height less than this value>]

必需参数

  • -l:训练标签文件夹的路径。多个文件夹路径应以空格分隔。

  • -i:相应训练图像文件夹的路径。文件夹计数和顺序必须与标签文件夹匹配。

  • -x:基本网络输入宽度。这应该是规范文件增强配置部分中的 output_width

  • -y:基本网络输入高度。这应该是规范文件增强配置部分中的 output_height

可选参数

  • -n:形状聚类的数量。这定义了命令将输出多少个形状中心。默认值为 9(每组 3 个,共 3 组)。

  • --max_steps:kmeans 算法应运行的最大步数。如果算法在此步骤未收敛,则将返回次优结果。默认值为 10000。

  • --min_x:忽略宽度小于重塑图像中此值的真实框(图像首先重塑为网络基本形状,如 -x-y)。

  • --min_y:忽略高度小于重塑图像中此值的真实框(图像首先重塑为网络基本形状,如 -x-y)。

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

使用此命令训练 YOLOv4-tiny 模型

复制
已复制!
            

tao model yolo_v4_tiny train [-h] -e <experiment_spec> -r <output_dir> -k <key> [--gpus <num_gpus>] [--gpu_index <gpu_index>] [--use_amp] [--log_file <log_file_path>]

必需参数

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

  • -k, --key:用于解密模型的加密密钥。

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

可选参数

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

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

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

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

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

输入要求

  • 输入大小:C * W * H(其中 C = 1 或 3,W >= 128,H >= 128,W、H 是 32 的倍数)

  • 图像格式:JPG、JPEG、PNG

  • 标签格式:KITTI 检测

示例用法

以下是在 YOLOv4-tiny 模型上使用 train 命令的示例

复制
已复制!
            

tao model yolo_v4_tiny train --gpus 2 -e /path/to/spec.txt -r /path/to/result -k $KEY

要在 YOLOv4-tiny 模型上运行评估,请使用此命令

复制
已复制!
            

tao model yolo_v4_tiny evaluate [-h] -e <experiment_spec_file> -m <model_file> -k <key> [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

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

  • -m, --model:用于评估的模型文件路径。模型可以是 .tlt 模型文件或 TensorRT 引擎。

  • -k, --key:用于加载模型的密钥(如果模型是 TensorRT 引擎,则不需要)。

可选参数

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

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

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

YOLOv4-tiny 网络的推理工具,可用于可视化边界框或在单个图像或图像目录上生成逐帧 KITTI 格式标签。以下显示了此工具的命令示例

复制
已复制!
            

tao model yolo_v4_tiny inference [-h] -i <input directory> -o <output annotated image directory> -e <experiment spec file> -m <model file> -k <key> [-l <output label directory>] [-t <visualization threshold>] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

  • -m, --model:训练模型(TAO 模型)或 TensorRT 引擎的路径。

  • -i, --in_image_dir:用于推理的输入图像目录。

  • -o, --out_image_dir:输出带注释图像的目录路径。

  • -k, --key:用于加载模型的密钥(如果模型是 TensorRT 引擎,则不需要)。

  • -e, --config_path:训练的实验规范文件路径。

可选参数

  • -t, --draw_conf_thres:绘制边界框的阈值。默认值:0.3。

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

  • -l, --out_label_dir:输出 KITTI 标签的目录。

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

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

剪枝从模型中删除参数,以减小模型大小,同时使用 tao model yolo_v4_tiny prune 命令来保证模型本身的完整性。

tao model yolo_v4_tiny prune 命令包括以下参数

复制
已复制!
            

tao model yolo_v4_tiny prune [-h] -m <pretrained_model> -o <output_file> -k <key> [-n <normalizer>] [-eq <equalization_criterion>] [-pg <pruning_granularity>] [-pth <pruning threshold>] [-nf <min_num_filters>] [-el [<excluded_list>]

必需参数

  • -m, --model:预训练 YOLOv4-tiny 模型的路径

  • -o, --output_file:输出检查点的路径

  • -k, --key:用于加载 .tlt 模型的密钥

可选参数

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

  • -n, –normalizer:使用 max 通过将每个范数除以层内的最大范数来进行归一化;使用 L2 通过除以包含所有内核范数的向量的 L2 范数来进行归一化。默认值为 max

  • -eq, --equalization_criterion:均衡元素级操作层或深度卷积层输入的统计信息的标准。此参数对于 ResNet 和 MoblieNet 很有用。选项包括 arithmetic_meangeometric_meanunionintersection。默认值为 union

  • -pg, -pruning_granularity:一次要删除的过滤器数量(默认值:8)

  • -pth:用于比较归一化范数的阈值(默认值:0.1)

  • -nf, --min_num_filters:每层要保留的最小过滤器数量(默认值:16)

  • -el, --excluded_layers:排除层的列表。示例:-i item1 item2(默认值:[])

剪枝后,模型需要重新训练。有关更多详细信息,请参阅 重新训练剪枝模型

使用剪枝命令

以下是使用 tao model yolo_v4_tiny prune 命令的示例

复制
已复制!
            

tao model yolo_v4_tiny prune -m /workspace/output/weights/cspdarknet_tiny_003.tlt \ -o /workspace/output/weights/cspdarknet_tiny_003_pruned.tlt \ -eq union \ -pth 0.7 -k $KEY

模型剪枝后,准确率可能会略有下降,因为某些先前有用的权重可能已被删除。为了恢复准确率,我们建议在同一数据集上重新训练剪枝模型。为此,请使用 训练模型 中记录的 tao model yolo_v4_tiny train 命令,并使用更新的规范文件,该文件将新剪枝的模型指向 pruned_model_path

我们建议在 training_config 中关闭正则化器,以恢复重新训练剪枝模型时的准确率。您可以通过将正则化器类型设置为 NO_REG 来执行此操作,如 训练配置 部分所述。规范文件中的所有其他参数都可以从先前的训练中继承。

导出模型将训练过程与推理分离,并允许在 TAO 环境之外转换为 TensorRT 引擎。TensorRT 引擎特定于每个硬件配置,应为每个唯一的推理环境生成。导出的模型可以在训练和部署硬件之间通用使用。导出的模型格式称为 .etlt。与 .tlt 类似,.etlt 模型格式也是一种加密模型格式,其密钥与导出它的 .tlt 模型相同。部署此模型时需要此密钥。

INT8 模式概述

TensorRT 引擎可以在 INT8 模式下生成以提高性能,但这需要在引擎创建时使用校准缓存。如果使用设置为 int8--data_type 标志运行 tao model yolo_v4_tiny export,则将使用校准张量文件生成校准缓存。预先生成校准信息并缓存它可以消除在推理机器上校准模型的需要。移动校准缓存通常比移动校准张量文件方便得多,因为它是一个小得多的文件,可以与导出的模型一起移动。使用校准缓存还可以加快引擎创建速度,因为构建缓存可能需要几分钟,具体取决于 Tensorfile 的大小和模型本身。

导出工具可以通过使用以下任一选项摄取训练数据来生成 INT8 校准缓存

  • 选项 1:使用训练数据加载器加载训练图像以进行 INT8 校准。此选项现在是推荐的方法,通过利用训练数据集加载器来支持多个图像目录。这也确保了校准期间数据的两个重要方面

    • INT8 校准步骤中的数据预处理与训练过程中的相同。

    • 数据批次在整个训练数据集中随机采样,从而提高了 INT8 模型的准确性。

  • 选项 2:将工具指向要用于校准模型的图像目录。对于此选项,请确保创建随机图像的子采样目录,以最好地代表您的训练数据集。

FP16/FP32 模型

如果您需要在 INT8 精度下运行推理,则只需要 calibration.bin。对于基于 FP16/FP32 的推理,导出步骤要简单得多。所需的只是提供来自训练/再训练步骤的 .tlt 模型,以转换为 .etlt

导出模型

以下是 tao model yolo_v4_tiny export 命令的命令行参数示例

复制
已复制!
            

tao model yolo_v4_tiny export [-h] -m <path to the .tlt model file generated by tao model train> -k <key> [-o <path to output file>] [--cal_json_file <path to calibration json file>] [--experiment_spec <path to experiment spec file>] [--gen_ds_config] [--verbose] [--gpu_index <gpu_index>] [--log_file <log_file_path>]

必需参数

  • -m, --model:要导出的 .tlt model 文件的路径。

  • -k, --key:用于保存 .tlt 模型文件的密钥。

  • -e, --experiment_spec:spec 文件的路径。

可选参数

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

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

  • --gen_ds_config:一个布尔标志,指示是否在与 output_file 相同的目录中生成模板 DeepStream 相关配置 (“nvinfer_config.txt”) 以及标签文件 (“labels.txt”)。请注意,配置文件不是完整的配置文件,需要用户使用生成的参数更新 DeepStream 中的示例配置文件。

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

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

QAT 导出模式所需参数

  • --cal_json_file:包含 QAT 模型张量比例的 json 文件的路径。如果要生成 QAT 模型的引擎,则此参数是必需的。

注意

导出使用 QAT 启用的模型时,用于校准激活的张量比例因子将从模型中剥离出来,并序列化为 cal_json_file 参数定义的 JSON 文件。

示例用法

以下是导出 YOLOv4-tiny 模型的示例命令

复制
已复制!
            

tao model yolo_v4_tiny export -m /workspace/yolov4_cspdarknet_tiny_epoch_100.tlt \ -o /workspace/yolov4_cspdarknet_tiny_epoch_100_int8.etlt \ -e /workspace/yolov4_retrain_cspdarknet_tiny_kitti.txt \ -k $KEY \

有关 TensorRT 引擎生成、验证和 int8 校准,请参阅 TAO 部署文档

有关部署到 deep stream,请参阅 部署到 DeepStream for YOLOv4

上一篇 YOLOv4
下一篇 SSD
© 版权所有 2024,NVIDIA。 上次更新时间:2024 年 10 月 15 日。