【x3pai 多路视频推理】多路视频流推理代码改怎么修改

系统软件版本: x3_ubuntu_v1.1.4

问题涉及的技术领域: 其他

问题描述:

  1. 多路视频推理代码如何改写,或者是否有对应案例能参考一下。查看ai_box上多路视频处理,tros没有找到多路视频处理的案例,还望请教。
  2. 是否是开启多进程,一进程对应一路视频?

你好 请问你现在有视频推理的代码了吗?可以分享一下吗

如果使用tros,可以一个进程对应一路解码,使用参考3.3. 图像编解码 — 地平线机器人平台用户手册 1.0 文档 (horizon.ai)

例如2路解码+推理,每一路都是独立的pipeline,这个pipeline是基于ros msg进行通信串联起来。

一个进程能否进行多路推理呢,因为如果在一个只有4个cpu的板上面启动4个进程进行推理,其他通信传输各种node可能会出现cpu占用的问题

1、单进程多路解码

支持,但是需要按照系统接口使用方法进行相关开发,tros只支持单进程单路编码/解码

2、单进程单路解码性能

对于25fps的h264/h265解码,tros的单核cpu占用是10%左右,主要是解码业务占用。所以相比于基于单进程单路的多路解码,单进程多路的cpu占用不会有显著降低。

另外,基于ros msg的单进程单路的编码/解码,业务逻辑会更简单清晰。

3、进程间通信性能

tros支持零拷贝通信,cpu占用可以忽略。

tros单进程能否进行多路推理呢,以上你说的全是编解码

不像编解码,前后帧有依赖,推理不存在严格意义上的多路。-

TROS中的推理算法就是一个node,例如检测算法node订阅图片,发布检测结果。-

订阅到的图片可以是多个解码进程发布的,也就是单进程支持多路推理。但是输入输出消息中需要指定好每帧消息对应哪一路。-

也可以像编解码一样,一路解码进程对应一路推理进程,也就是单进程单路推理。

请问,单进程的多路推理有没有能参考的案例呢

推理本身不区分是否多路,多个解码node发布相同topic的图像msg进行推理,就是单进程多路推理的用法。

例如:4个node发布topic图像,sub_topic都叫hbmem_img_channel, 然后模型处理这里的node都在原来的例子上都不用修改么,直接就接受sharemem_img_topic_name=”hbmem_img_channel“,他就直接进行4路视频的接受处理了么,还是需要在模型node里进行多线程的修改

模型node不需要修改,默认就是使用2个线程推理,也可以通过设置DnnNodePara中的task_num参数重新指定线程数(修改参数重新编译推理node)。

另外这种推理方式不适用基于序列的推理,因为推理node不区分每帧输入对应哪一路。

那我如果现在需要区分输入的是哪一路,分别对四路进行处理,再分别发布处理消息,这个该怎么解决呢,现在的tros支持么

如果推理需要支持多路输入并且算法推理有序列要求(例如跟踪算法),有两种方法:

1、单进程多路

TROS中没有相关示例。一个进程中创建多个hobot dnn node实例,每个实例对应一路推理。

2、单进程单路

每个进程对应一路推理。

我这里直接创建两个实例,运行报错,不知是什么情况,是不能使用共享内存么

一个实例会有问题吗?

两个示例都单独试了下,都没有问题,他这个是不能使用共享内存么,还是什么情况?

可以使用共享内存,共享内存只是tros的一种通信方式,理论上可以应用于包括推理在内的所有业务通信。

修改了什么可以运行了?

没有修改。只是设置了只有一个hobot dnn node实例,就运行没问题, 两个hobot dnn node实例还是会报错。不能分配内存这个问题,有什么办法解决么,现在感觉找不到问题在哪里。

还是说创建hobot dnn node实例的方式不对,不能直接这样创建?

1、程序会阻塞在第一个spin,直到程序退出,这种写法跟写一个spin效果是一样的。

2、对于多路,每个推理node订阅的topic应该要不同。不过这个和运行失败没关系。

3、跑的是什么模型,模型有多大,是否只加载两次这个模型就会失败?