系统软件版本: x3_ubuntu_v1.1.4
问题涉及的技术领域: 其他
问题描述:
- 多路视频推理代码如何改写,或者是否有对应案例能参考一下。查看ai_box上多路视频处理,tros没有找到多路视频处理的案例,还望请教。
- 是否是开启多进程,一进程对应一路视频?
系统软件版本: x3_ubuntu_v1.1.4
问题涉及的技术领域: 其他
问题描述:
你好 请问你现在有视频推理的代码了吗?可以分享一下吗
如果使用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单进程能否进行多路推理呢,以上你说的全是编解码
也可以像编解码一样,一路解码进程对应一路推理进程,也就是单进程单路推理。
请问,单进程的多路推理有没有能参考的案例呢
推理本身不区分是否多路,多个解码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、跑的是什么模型,模型有多大,是否只加载两次这个模型就会失败?