用于在各种深度学习训练和推理框架转换的一个中间表示格式。
它定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性,开放性较强。
2.在对推理速度要求不高的情况下,使用opencv自带的dnn模块可快速部署应用和解决方案,
且能做到轻量化部署,减少对第三方平台的依赖。
它包含两个预处理函数(blobFromImage、blobFromImages),为通过预训练深度学习模型进行分类,做好准备。
这两个函数执行减均值、缩放和通道交换(可选),但是并不是所有的深度学习架构执行减均值和缩放,
在预处理你的图像之前,一定要读你所使用网络的相关文献。
cv2.dnn.blobFromImage函数返回的blob是我们输入图像进行随意从中心裁剪,减均值、缩放和通道交换的结果。
cv2.dnn.blobFromImages和cv2.dnn.blobFromImage不同在于,前者接受多张图像,后者接受一张图像。
多张图像使用cv2.dnn.blobFromImages有更少的函数调用开销,能够更快批处理图像或帧。
pytorch经onnx转tensorrt初体验 上 、 下 中学习了tensorrt如何调用onnx模型,但其中遇到的问题是tensorrt7没有办法直接输入动态batchsize的数据,当batchsize>1时只有第一个sample的结果是正确的,而其后的samples的输出都为0. 本文主要是探索如何进行批量化的处理。
这是 TensorRT/samples/sampleDynamicReshape/sampleDynamicReshape.cpp 中给出的一个解决方案,其主要思路是在原有的INetwork 之前再创建一个用于input resize的Network, 该Network的主要功能是对可变的输入进行resize,以及设置配置文件和参数绑定。
其中,最主要的部分如下:
其中配置器 profile 指定了输入的最小尺寸、最优尺寸和最大尺寸。那么真实输入时,处在最小和最大尺寸中都行。
参考: # TensorRT 7 ONNX models with variable batch size
测试 trtexec -h 发现
再次 trtexec -h 即正确显示帮助信息。其中给出了 model options、build options、 inference options和system options等。
a. 从固定尺寸的onnx转cudaEngine
···
trtexec --explicitBatch --onnx=./resnet18.onnx --saveEngine=resnet18.engine
···
b.从可变尺寸的onnx转cudaEngine,需要指定profile。
c. 接下来看一下python API的调用
主函数:
下表给出的是V100上resnet18的前向推断时间(ms)
总结一下,dynamic batchsize的处理流程:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)