本系列对在Nvidia边缘计算平台进行深度学习模型部署进行一个全面的介绍,主要围绕TensorRT深度学习加速推理框架,以YOLOv5目标检测任务为例,以Jeston Nano为目标计算平台,对环境搭建、模型量化、加速推理、性能评估、后处理加速等细节进行详细说明,并给出C++和Python分别进行模型部署推理的代码实例
阅读本系列,您可以了解到
-
Jeston Nano计算平台以及相关软件资源介绍
-
什么是TensorRT?什么是TensorRT引擎?如何将Tensorflow等深度学习框架训练好的模型转换为TensorRT引擎?转换过程需要注意什么?TensorRT对模型做了哪些优化?
-
如何使用TensorRT的Python/C++ API进行模型推理?如何构造输入数据并传递给推理引擎?输出数据又是什么格式,如何获取模型输出结果?
-
如何利用Nsight对TensoRT推理过程进行抓取,推理过程内部细节和耗时分布是什么样的?
-
YOLOv5这种需要前处理和后处理解码的任务如何在TensorRT上进行推理?如何使用Python/C++进行图像/视频预处理、模型推理、模型解码、非极大值抑制,并最终在输出图像上绘制预测框?
-
如何使用Gstreamer并利用Nvidia提供的加速插件,对视频源(摄像头/文件)进行编解码及格式转换的加速,提高视频编解码速度
-
Python版本视频推理性能瓶颈分析,如何提速?利用pycuda、cupy、numba等加速包进行加速,可行吗?
-
C++版本如何利用libtorch进行后处理解码
-
影响性能的因素都有哪些?
Performance
由于在Jeston Nano这种计算能力较弱的平台上,因此重点评估的是速度指标,以及整个检测任务所能达到的极限帧率,而非检测精度。目前优化下来最快的方案是利用Python版本程序,通过TensorRT的Python API进行推理,使用Numpy+PyCUDA进行后处理及部分操作加速,以YOLOv5n的fp16精度模型运行,最快帧率接近11fps
以下表格是不同模型规模、不同量化精度情况下的性能对比(部分数据未记录)
Model | Classes | EngineSize | Precision | Throughput(qps) | Latency(ms) | Program | FPS |
YOLOv5m | 20 | 146M | fp32 | 3.5738 | 279.722 | Python | 2.77 |
YOLOv5m | 20 | 70M | fp16 | Python | |||
YOLOv5s | 20 | 44M | fp32 | 8.67145 | 115.22 | Python | 5.21 |
YOLOv5s | 20 | 20M | fp16 | 72.2289 | 72.2289 | Python | 6.66 |
YOLOv5n | 20 | 13M | fp32 | 21.8709 | 45.4301 | Python | 9.85 |
YOLOv5n | 20 | 7M | fp16 | 28.4845 | 35.0919 | Python | 10.88 |
YOLOv5n | 80 | 14M | fp32 | 19.8624 | 50.3083 | Python | 5.62 |
YOLOv5n | 80 | 7M | fp16 | 26.0428 | 38.2188 | Python | 5.85 |
YOLOv5n | 20 | 7M | fp16 | 28.4845 | 35.0919 | C++ | 8.9 |
-
Model:表示YOLOv5的模型规模
-
Classes:模型支持的分类类别数,训练时确定
-
EngineSize:模型转换为TensorRT引擎后的引擎文件大小
-
Precision:模型转换为TensorRT引擎的转换精度
-
Throughput:模型转换时TensorRT评估推理吞吐量,每秒可执行的推理次数
-
Latency:模型转换时TensorRT评估推理延迟,即推理一次需要的时长(ms)
-
Program:分别用Python实现还是C++实现的检测程序
-
FPS:检测程序统计的平均帧率