常见问题解答
本文档包含您在使用 TAO 时可能遇到的问题的问答。
正在发生什么?
NVIDIA Transfer Learning Toolkit 正在重命名为 NVIDIA TAO。
如何获取最新的 TAO?
要获取最新的 TAO,请从 NVIDIA PyIndex 安装 nvidia-tao
软件包。要安装,请执行下面提到的命令
pip3 uninstall nvidia-tlt # This is only required if you had previously installed nvidia-tlt in your
# Virtual environment.
pip3 install nvidia-tao
模型和文件扩展名命名约定是否会更改?
不,TAO 生成的所有模型仍然是 .tlt
文件。对于部署到基于 TensorRT 的推理 SDK,计算机视觉和对话式 AI 模型的模型仍将分别称为 .etlt
和 .riva
文件。
什么是专用模型?我可以在生产环境中部署它们吗?
专用模型是为智慧城市、零售、医疗保健等应用训练的高精度模型。这些是生产质量的模型,在非常大的专有数据集上进行训练,以获得最佳的精度和性能。
所有模型都可以免费使用和分发吗?
是的,所有模型都可以免费使用和分发。有关专用模型的具体条款,请阅读我们的模型 EULA。
我是否需要重新训练专用模型,或者可以按原样从 NGC 部署它们?
专用模型可以使用模型卡中的“剪枝”版本按原样部署,但也可以重新训练以更好地适应您的环境。对于训练,请使用模型卡中的“未剪枝”版本。
除了 NVIDIA 提供的预训练模型外,我可以使用 TAO 以及我自己的或任何开源的预训练模型吗?
TAO 不支持第三方预训练模型。目前仅支持来自 NGC 的 NVIDIA 预训练模型,这些模型可以使用您的自定义数据进行重新训练。
TAO 是否支持 YOLOv3?
是的,TAO 支持 YOLOv3。
我如何确定模型的剪枝阈值?
阈值默认设置为 0.1。每个阈值都会导致不同部分的权重被剪枝,这会在剪枝过程结束时报告。常见的做法是从 0.1 或 0.05 开始,使用递增的阈值进行剪枝。较大的阈值将导致更多权重/通道被剪枝,因此更难恢复精度或 mAP。
剪枝是自动执行的,还是有我需要设置的超参数来剪枝我的模型?
剪枝有多个参数。
normalizer
用于选择归一化权重的方法,默认为 maxequalization_criterion
用于选择合并来自元素级或深度级层的不同分支的权重的方法,默认为 unionpruning_granularity
用于设置通道被剪枝时的粒度min_num_filters
用于设置剪枝需要保留的最小通道数excluded_layers
可用于排除要剪枝的层pruning_threshold
是最重要的选项。它用于设置剪枝的阈值,也与 Normalizer 一起使用。此阈值对于所有层都是通用的。
模型输出格式是什么?我如何使用此模型进行部署?
TAO 可以生成 2 种输出格式:.etlt
和 TensorRT 引擎文件。
.etlt
文件可以与 DeepStream 部署一起使用,请参阅 https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps 中的用法。TensorRT 引擎文件也可以与 DeepStream 一起使用,但也可以使用 TensorRT 单独部署。请参阅使用 DeepStream 部署章节,了解不同的部署选项。
什么是模型导出密钥,为什么需要它?
模型导出密钥用于加密训练后的 keras/uff 模型文件为 .tlt
/.etlt
,以保护您的专有 IP,并使用模型导出密钥在 DeepStream 应用程序中解密 .etlt
模型。
如何将使用 TAO 训练的模型部署到 DeepStream?
请参阅TAO 快速入门指南 <tao_quick_start_guide> 和 https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps。
此模型是否仅适用于 DeepStream?我可以不使用 DeepStream 部署模型吗?
对于 TAO 模型,建议的部署路径是 DeepStream。请注意,模型也可以使用 TensorRT 在 DeepStream 之外部署,但用户将需要进行图像预处理和推理后处理输出 Tensor。
是否可以将自定义训练的 .tlt(或 .etlt)模型导出为传统的 TensorFlow (TF) 冻结推理图 (.pb),以便使用传统的 TF 工具进行推理?
不,目前不支持此功能。
批次大小是否依赖于模型的准确性?我应该如何为我的训练选择合适的批次大小?
作为一种常见的做法,对于小型数据集,首选小批次大小或单个 GPU;而对于大型数据集,首选大批次大小或多个 GPU。
我发现多 GPU 与单 GPU 相比,准确率较低。多 GPU 训练会影响模型的准确率吗?我如何在多 GPU 训练中提高准确率?
为了提高多 GPU 环境中的准确率,学习率参数需要更高,例如 max_learning_rate。仅当训练数据集很大时,才首选多 GPU。
分配数据集类:如果一个类别的数据集样本明显高于另一个类别,我该如何平衡类别之间的权重?
为了解决不平衡问题,请增加样本较少类别的 class_weight。您也可以尝试禁用 enable_autoweighting;在这种情况下,initial_weight 用于控制 cov/回归加权。保持不同类别的样本数量平衡非常重要,这有助于提高 mAP。
如何在 TAO 中保存检查点?
每个 DNN 的 train
命令默认支持保存检查点。默认情况下,每 10 个 epoch 保存一次检查点。对于 DetectNet_v2,可以保存此检查点的间隔是使用 DetectNet_v2 训练配置文件 training_config 部分中的 checkpoint_interval 参数配置的。
在 DetectNet_V2 中,是否有任何参数可以帮助提高训练小对象的 AP(平均精度)?
以下参数可以帮助您提高小对象的 AP
增加 resnet 的
num_layers
小对象的
class_weight
增加小对象类的
bbox_rasterizer_config
部分的coverage_radius_x
和coverage_radius_y parameters
降低
minimum_detection_ground_truth_overlap
降低
minimum_height
以覆盖更多用于评估的小对象。
为什么我在 PyTorch 容器中运行任务时会收到此错误?
pytorch_lightning.utilities.exceptions.MisconfigurationException:
you restored a checkpoint with current_epoch=10
but the Trainer(max_epochs=1)
在您已经为多个 epoch 训练模型后,您不能通过将 epoch 数 (max_epochs) 设置为低于已训练的 epoch 数来继续训练。
我可以在没有提升的用户权限的系统上运行 TAO 吗?
通过 TAO Launcher 运行 TAO 需要用户安装 docker-ce
,因为 launcher 与本地主机上的 docker 服务交互以运行命令。安装 docker 需要提升的用户权限才能以 root 身份运行。如果您的计算机器上没有提升的用户权限,您可以使用 singularity 运行 TAO。这要求您绕过使用 tlt-launcher
并直接与组件 docker 交互。有关在不同 docker 中实现的任务的信息,请运行 tao info --verbose
命令。一旦您获得了任务到 docker 的映射,您可以按照以下步骤运行任务。
使用以下 singularity 命令拉取所需的 docker
singularity pull tao-toolkit-tf:v3.21.08-py3.sif docker://nvcr.io/nvidia/tao/tao-toolkit-tf:v3.21.08-py3
为了使此命令起作用,必须安装最新版本的 singularity。
使用以下命令实例化 docker
singularity run --nv -B /path/to/workspace:/path/to/workspace tao-toolkit-tf:v3.21.08-py3.sif
在容器内运行命令,无需
tao
前缀。例如,要在tao-toolkit-tf
容器中运行detectnet_v2
训练,命令如下:
detectnet_v2 train -e /path/to/workspace/specs/file.txt \
-k $KEY \
-r /path/to/workspace/results \
-n name_of_final_model \
--gpus $NUM_GPUS
我可以在没有网络的情况下运行 TAO 吗?
请参阅 https://github.com/NVIDIA-AI-IOT/tao_toolkit_recipes/blob/main/tao_training_without_network/Guide.md