物件检测的模型训练与优化-3

当前面已经训练好修剪过的模型之后,接下来就可以在训练设备上先执行推理计算,看看检测的效果如何?如果实际推理结果并不理想的话,就得回到前面第 6 步骤重新再执行一次。

9、执行推理并查看结果

首先创建一个 test_samples 目录,然后从数据集中 testing/image_2 中复制一些图像过来测试,推理结果输出到 ssd_infer_images 目录下,这个推理计算也可以使用未修剪的模型来进行测试。

在代码框 “!tao ssd inference” 后面所提供的参数中,下面两行是使用修剪后并重新训练的模型来进行推理。

-e $SPECS_DIR/ssd_retrain_resnet18_kitti.txt \ -m $USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/ssd_resnet18_epoch_$EPOCH.tlt \

如果将这两行参数改成下面内容,就是用原始模型来进行推理。

-e $SPECS_DIR/ssd_train_resnet18_kitti.txt \ -m $USER_EXPERIMENT_DIR/experiment_dir_unpruned/weights/ssd_resnet18_epoch_$EPOCH.tlt \

这样我们可以执行透过推理结果,来查看二者的不同。下面两张图分别是未修剪(上)与修剪后(下)模型推理结果的局部放大,虽然修剪后的模型效果不如未修剪的,但是执行结果还是令人满意,当然这得看您的要求有多高。

如果认可这个推理结果的话,那么训练阶段的任务就可以告一段落,接下去就准备将模型导出,以便部署到真实的推理设备上。

10、导出模型

要执行这个步骤,最好先确认您的推理设备上所能支持的数据精度,特别是 INT8 类型,例如 Jetson Nano (含 2GB)、TX2/TX1就不支持,Xavier NX 与 AGX Xavier 是支持的。台式机上的游戏卡一般不支持 INT8,而 TeslaQuadro 专业卡是支持的,不过 NVIDIA 全系列产品都支持 FP16,如果不能确认这方面的信息,至少选择 FP16 是比较稳妥。

简单说明一下代码框 “!tao ssd export” 后面的参数:

假如要输出 INT8 模型时,由于需要特殊算法以及辅助的校准工具,因此需要其他参数来协助这类模型的导出,主要如下:

这样就能完成 INT8 模型的输出任务。

到这里所输出的 .etlt 模型文件基本上已经可以部署到 DeepStream 推理设备上使用,因为 DeepStream 支持 .etlt 格式的调用,相当方便。但如果要用其他独立的 TensorRT 来执行加速推理的话,就需要在推理设备上再进行一次的转换。

本步骤最后一个代码块 “!tao converter” 就是在训练设备上,将 .etlt 模型转成这台机器能使用的 TensorRT 引擎文件。由于参数内容较多,这里不一一列举,请自行至 https://docs.nvidia.com/tao/tao-toolkit/text/object_detection/ssd.html 搜索 “Using the tao-converter” 环节,有详细的参数说明。

要注意的一点,在 “!tao converter” 所使用的 “-t” 指定数据精度部分,需要与前面 “!tao ssd export” 的 “--data_type” 一致,否则会失去效果。

11、验证部署模型的效果

这个步骤是验证 TensorRT 加速引擎的推理效果,主要让我们在部署到推理设备之前,能再确认一下推理效果。

下面同样提供两张推理结果参照图,上图是未修剪的模型转成 TensorRT 引擎的推理结果,下图是修剪过的模型转成 TensorRT 引擎的推理结果,效果看起来是一样的,表示这个修剪过的模型还是足够好的。

现在就完成一个物件检测模型训练的过程,虽然看起来繁琐,但是只要我们弄清楚一开始的路径对应,以及熟练后面每个环节的参数用法,基本上要比在框架中自行撰写代码容易得多了,除了收集与整理数据的工作是 TAO 工具无法协助的,其余部分已经都为大家提供好完整的指令块,这是一个真正 “Zero Coding” 的全方位模型训练工具。

 


评论:
相关文章
乐高42177奔驰G500超深度评测

乐高42177奔驰G500套装共有2891个零件‌,套装分为20个步骤,拼装时间大约需要6个小时‌。


SPIKE 科创套装 45678零件清单

SPIKE 科创套装 45678零件清单


基于树莓派搭建小型云计算集群

拥有一个私人的云计算平台是一件很酷的事情。


Arduino ESP32获取芯片、RAM信息

本文介绍如何使用Arduino-ESP32库中的API函数获取ESP32的芯片、RAM信息等,并提供了一个示例程序代码。


一份新手M5Stack入坑指南

M5Stack产品快速上手指南


工程思维,地球上最聪明的人正在运用的关键思维

工程思维是以解决问题为导向的,实施该思维的前几步都是围绕问题,展开的调研和策划,最终得出设计成果。它非常注重迭代意识,设计出的成果将根据需求不断改进,而非一劳永逸。



马达高级控制块(Advanced Motor Controllers Block)

由台湾崇倫國中开发,專給WRO競賽組使用,包含「PD控制器」、「同步移動控制器」、「非線性緩加減速控制器」等。


一文详尽 Python 函数式编程技术

本文对 Python 中的函数式编程技术进行了简单的入门介绍。


《火星救援》里的科学

本文是一篇最全最良心却也最接地气的《火星救援》大科普,文科生也看得懂!

Jetson Nano 基础教程

作者:英伟达小助理   共52讲

Jetson Nano 推出 2GB 内存版本,不仅承袭了 Jetson Nano 所有 AI 开发环境与 IOT 控制功能,也能学习或开发 Python、OpenCV 与 AI 深度学习、ROS 自动控制等应用。

课程