yolov5单帧检测时间太长 & 预测与后处理同步或异步 & json文件

用户您好,请详细描述您所遇到的问题:

  1. yolov5单帧检测时间太长:

(1)程序显示Infer_method.DoProcess运行时间约为20ms左右,此时是否已经完成推理?

(2)程序显示Post_method.DoProcess运行时间约为280ms左右,其中等待推理结束耗时约250ms,即infer_future=task>inference_promise_.get_future().get()代码段。

2.预测与后处理的同步或异步具体是怎样的,有什么区别?

3.json文件

(1)model_predict的run_mode中的bpu_core和thread_num具体是怎样使用的?

(2)bpu_core需要与yaml文件中的core_num一致吗?bpu_core设为0是不使用bpu吗?

(3)设好参数值后代码中有需要相应改动的地方吗?

您好,关于yolov5单帧检测时间太长的问题,可以提供一下OE包的版本吗?我们去跑一下再来回答您这个问题。

关于预测与后处理的问题:

**答:**预测是在BPU上进行的,后处理是在CPU上进行的,理想情况下,模型的执行过程如下图:

关于json文件下的三个问题:

答:先回答您的问题(2)

bpu_core与yaml文件中的core_num不需要一致。

yaml文件中的core_num表示板端推理时使用几个bpu进行加速,设置为1,则在同一时刻,只使用一个bpu,设置为2,表示模型在同一时刻可调度两个bpu的资源来加速模型推理。

板端拥有两个bpu核心,bpu_core参数表示推理模型时使用的core索引,当bpu_core设置为1时,表示使用第1个bpu核,当bpu_core设置为2时,表示使用板端的第2个bpu核,bpu_core设置为0时,表示两个bpu核均可被利用。

问题补充:当yaml中core_num配置为1,bpu_core能配置为0吗?

答案是可以的,此时就涉及到您问题(1)中thread_num,当启用多线程时,在一个时刻,模型只在一个bpu上进行推理,但具体在哪一个bpu上进行推理是程序根据内部资源情况自行选择的。

关于问题(1)

我们的开发板上有2个bpu_core,最多可支持8个thread,可以根据您的任务需求来进行使用。

关于问题(3)

设好参数值后,代码是不需要改动的。

您好,您的问题我们已收到,技术同事稍后将会为您解答~

您好,感谢回复,OE包版本应该是v1.7.5或者V2.2.3。

您好,Infer_method.DoProcess运行时间,此时模型已经完成推理。

使用我们的脚本(脚本路径如下图)运行yolov5s示例,在板端实测latency.sh得到的数据如下:

Infer latency: [avg: 62.585ms, max: 63.059ms, min: 62.484ms], Post process latency: [avg: 20.759ms, max: 21.235ms, min: 20.582ms].

板端实测fps.sh得到的数据如下:

Throughput: 34.05fps

建议您通过这样的方式尝试一下。

您好:

1.是将ddk放到板子上,使用ddk/samples/ai_benchmark/code/build_ptq_xj3.sh编译后更改workflow_latency.json再直接执行latency.sh吗?

2.fps.sh计算的帧率是推理完成的帧率还是也加上了后处理

3.代码1与代码2分别代表什么含义,代码1不是已经完成推理了吗?为什么在post_method.DoProcess中还要有代码2等待推理完成?

另外,infer latency具体指的时哪一段时间?

回答问题1:

答:没必要把整个ddk放在板子上哈,关于具体的使用步骤,欢迎查看开发手册中ai_benchmark部分,里面有详细的操作步骤指引,如下图所示位置。

回答问题2:

**答:**fps.sh计算得到的帧率只包括模型推理的时间,后处理部分欢迎参考OE包中提供的示例代码实现。

回答问题3:

**答:**看到您发的代码,推断您用的OE版本已经比较旧啦,目前新版OE包已经不再去使用xstream,建议您下载新版OE开发包进行使用哈。

可以使用如下命令获取:

wget -c ftp://vrftp.horizon.ai/Open\_Explorer/1.13.3/horizon\_xj3\_open\_explorer\_v1.13.3\_20220617.tar.gz

关于infer latency,它表示模型前向推理的时间,补充说明:

  • fps.sh:利用多线程调度实现fps统计,用户可以根据需求自由设置线程数。
  • latency.sh:实现单帧延迟统计(一个线程,单帧)。
  • accuracy.sh:用于精度评测。

您好:

1.不同OE包版本会影响检测时间吗?旧版本中代码2运行时间约250ms,占检测时间的83%,新版本是没有代码2这部分内容了吗

2.我看了ai_benchmark中的示例说明,各个部分是分开介绍的,请问有从数据预处理->数据推理->数据后处理整个识别流程的相关说明文档或者代码吗?

您好,我们的OE包在不断迭代优化,模型推理时间也是会有不同的,新版本中一些代码实现也会有所差异,但整个使用流程是类似的,建议您尝试使用一下新版本的OE包哈。

关于ai_benchmark文档部分,目前还没有其它的介绍,您的建议我们已收到,后期会持续进行优化,欢迎您持续关注。

您好:

1、请问有yolov5的bin权重文件的部署检测程序吗?

2、bpu predict与DNN predict两种方式有什么区别?对模型推理时间有影响吗?

您好:

**关于问题1:**我们是提供yolov5的onnx模型的,如下图所示,欢迎您使用我们的后量化方案进行转换生成bin模型,然后进行部署,转换与部署过程与我们提供的示例是类似的。

**关于问题2:**bpu predict是以前的推理方式,现在已经不再进行优化了,DNN predict是我们在持续迭代优化的,建议您使用新版OE包进行实践哦,新版OE包获取方式如下:

wget -c ftp://vrftp.horizon.ai/Open\_Explorer/1.13.3/horizon\_xj3\_open\_explorer\_v1.13.3\_20220617.tar.gz

您好,那请问新版OE包中有类似下图中的代码吗?没有的话在哪里可以获取呢?

新版的OE包中,类似代码都是有的,位置如下图所示。可能会有一些变动哈,因为我们也在持续迭代优化中,相信会给您更好的体验!

您好,请问这个代码中的simple_example应该怎么运行呢?有参考文档吗?

您好,src目录下是源码级内容,建议您先参考用户手册中ai_benchmark中的教程进行使用哈,手册位置如图所示:

熟悉之后再结合自己的需求去使用源码会方便很多。

您好,使用 AI_benchmark 进行性能评测时,运行ai_benchmark\xj3\ptq\script\detection\yolov5s文件夹下的sh文件时,会出现以下报错,请问怎么解决?