文章目录
SDK
本文介绍了SDK的流程,和主要的类
- 主要关注的点是:
- input的图片处理,归一化
- .cfg模型中模型信息和tensorRT Engine的提取
- 对模型输出结果进行还原及NMS等操作。
1. 加载模型文件(.cfg):模型文件的内容包括一些模型的信息和tensorRT量化后的模型引擎。
char* hrg_model_path1
- 可以加加载多个模型文件(.cfg)有的算法需要多种模型。例如,poseC3D的模型需要yolov7-pose输出的来作为他的输入。
这时候就可以创建多个hrgEngine
2. 初始化hrgEngine
ret = InitialObjDetEngine(&hrgEngine1, initParam1);
ret = InitialObjDetEngine(&hrgEngine2, initParam2);
InitialObjDetEngine
:会根据你的版本号例如8.4.4.2来走不同的算法分支。首先通过加载.cfg文件中的pre info的信息,来得到模型的class name, input/output name, input/output shape等等信息,用于下一个阶段的引擎反序列化。然后为不同的算法模型预先开辟模型输入的内存空间,模型engine和其输出的内存空间。然后初始化trtModel。
3. 推理引擎 RunDetEngineInner
为模型的输出开辟了内存空间之后,我们就可以开始对tensorRT序列化的引擎进行反序列化得到图片的输出了。
- 图片预处理:resize -> hwc -> chw -> bgr2rgb -> ./255
- 进行推理:
hrg_objdet_inner_engine->runNNInfer();
ret = trtDetEngine.runTrtInfer(
yolo_params.input_image_buffer,
yolo_params.input_image_len,
yolo_params.input_names[0],
yolo_params.outputs_buffer,
yolo_params.outputs_buffer_len,
yolo_params.output_names);
- 得到模型网络feature map输出后的后处理:根据不同的模型,把网络的输出还原成框框,骨骼点,预测的类别等诸多对应的信息。
4. 释放引擎 UninitialObjDetEngine
- 释放trt engine
- 释放input_image_buffer, outputs_buffer