trt_yolo_video_pipeline icon indicating copy to clipboard operation
trt_yolo_video_pipeline copied to clipboard

请问支持跳帧分析,来提高并发分析数量吗?

Open lwll opened this issue 9 months ago • 4 comments

lwll avatar May 13 '24 02:05 lwll

可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了

1461521844lijin avatar May 13 '24 03:05 1461521844lijin

可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了

我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?

lwll avatar May 13 '24 06:05 lwll

可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了

我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?

你在使用硬件解码吗? 一般来说硬件解码器和trt推理模型占用的显存都是初始化时预分配好的,跟分析输入频率无关,和硬件解码器数量和模型推理实例数量有关;这个项目中的数据拷贝(内存到显存)使用了显存池,也是降循环利用固定显存空间的; 因此跳帧并不会减少显存开销,只会减少输入频率,减少GPU利用率(你可以看自己的资源利用率),所以理论上可以通过跳帧来增加分析路数。

其次,在解码前丢帧的做法是不正确的,这可能会导致解码失败,建议进行I帧判断只解码I帧或者在视频解码后再进行抽帧处理

1461521844lijin avatar May 13 '24 07:05 1461521844lijin

可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了

我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?

你在使用硬件解码吗? 一般来说硬件解码器和trt推理模型占用的显存都是初始化时预分配好的,跟分析输入频率无关,和硬件解码器数量和模型推理实例数量有关;这个项目中的数据拷贝(内存到显存)使用了显存池,也是降循环利用固定显存空间的; 因此跳帧并不会减少显存开销,只会减少输入频率,减少GPU利用率(你可以看自己的资源利用率),所以理论上可以通过跳帧来增加分析路数。

其次,在解码前丢帧的做法是不正确的,这可能会导致解码失败,建议进行I帧判断只解码I帧或者在视频解码后再进行抽帧处理

感谢回复。 是的我在用硬件编码,目前根据源码中的src/ffmpeg/core/Decoder.cpp自己写了解码demo,在多线程同时处理rtsp码流的解码工作时,通过nvidia-smi查看显卡进程(显卡是rtx 3060),确实发现显存在逐步增加,不知道你所说的显存在初始化时预分配好指的是什么? 另外,我看源码中将AVFrame对象转成cv::Mat对象,好像是在内存里进行操作的?

lwll avatar May 13 '24 07:05 lwll