trt_yolo_video_pipeline
trt_yolo_video_pipeline copied to clipboard
请问支持跳帧分析,来提高并发分析数量吗?
可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了
可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了
我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?
可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了
我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?
你在使用硬件解码吗? 一般来说硬件解码器和trt推理模型占用的显存都是初始化时预分配好的,跟分析输入频率无关,和硬件解码器数量和模型推理实例数量有关;这个项目中的数据拷贝(内存到显存)使用了显存池,也是降循环利用固定显存空间的; 因此跳帧并不会减少显存开销,只会减少输入频率,减少GPU利用率(你可以看自己的资源利用率),所以理论上可以通过跳帧来增加分析路数。
其次,在解码前丢帧的做法是不正确的,这可能会导致解码失败,建议进行I帧判断只解码I帧或者在视频解码后再进行抽帧处理
可以的,修改输入节点的逻辑进行抽帧就可以了;不过还要显示推流输出的话就需要修改对应的输出参数的帧率了
我在m_decoder->send(pkt); 前添加跳帧逻辑,发现跳30帧分析一次,和跳150帧分析一次,显存的占用差不多的,同时解码的路数并没有变多(不考虑编码推流的情况,单纯解码)。是我添加的位置不对吗?
你在使用硬件解码吗? 一般来说硬件解码器和trt推理模型占用的显存都是初始化时预分配好的,跟分析输入频率无关,和硬件解码器数量和模型推理实例数量有关;这个项目中的数据拷贝(内存到显存)使用了显存池,也是降循环利用固定显存空间的; 因此跳帧并不会减少显存开销,只会减少输入频率,减少GPU利用率(你可以看自己的资源利用率),所以理论上可以通过跳帧来增加分析路数。
其次,在解码前丢帧的做法是不正确的,这可能会导致解码失败,建议进行I帧判断只解码I帧或者在视频解码后再进行抽帧处理
感谢回复。
是的我在用硬件编码,目前根据源码中的src/ffmpeg/core/Decoder.cpp
自己写了解码demo,在多线程同时处理rtsp码流的解码工作时,通过nvidia-smi查看显卡进程(显卡是rtx 3060),确实发现显存在逐步增加,不知道你所说的显存在初始化时预分配好指的是什么?
另外,我看源码中将AVFrame对象转成cv::Mat对象,好像是在内存里进行操作的?