AI视频行为分析系统项目复盘——技术篇2:视频流GPU硬解码

0 项目背景

见《AI视频行为分析系统项目复盘——技术篇1》

https://blog.csdn.net/weixin_42118657/article/details/118105545?spm=1001.2014.3001.5501

1 为什么不使用CPU解码?

原因提炼如下:  

  1. CPU利用率冲顶,而GPU利用率低:视频流的解码工作,一般视频处理函数库由于历史原因,默认使用CPU解码视频流,但如果要实时解码多路视频流,CPU的计算资源将耗费非常严重。这种情况下,服务器内的CPU会经常感觉不够用成为瓶颈,但是与此同时,GPU的利用率通常还很低。导致GPU利用率低原因如下:
    1. DL工程一般数据流如下:CPU解码视频(费时间)→ CPU各种预处理图片(费时间)→图片从内存拷贝到GPU显存中(费时间)→GPU推理图片(一般的DL模型任务,速度非常快),即便采用数据缓冲池等操作,但很多时候再昂贵的CPU也赶不上GPU推理图片速度。
    2. GPU近些年来的硬件能力进步速度远超过CPU,而且相关GPU推理加速优化方法也进展迅速。两者任务量不变的情况下,GPU相对CPU经常大大超前完成任务。
  2. GPU相对CPU天生更擅长解码工作:虽然CPU内也有核显,但相对GPU还是小了点。

2 GPU解码当前主流方案有哪些?

本文等下说的是PC机内DL开发中的主要方法,其他情况下需要更多的跟踪调研,比如手机芯片中,有非常专用的视频解码单元、音频解码单元等等。

通常的方法如下:

  1. OpenCV中的硬解码:由cv::gpu::VideoReader_GPU完成。(当前不支持RTSP视频流解码
  2. ffmpeg + CUVID:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源程序。CUVID是基于CUDA的视频解码库。FFmpeg编码库可以使用GPU加速。
  3. deepstream方案:NVIDIA推出的一整套工具,包含解码、预处理和推理,一般推荐直接用这个。但是其灵活性在某些场景可能目前还不够,具体参考:《深兰科技|硬编解码技术的AI应用

3 GPU硬解码的一个全过程Demo实现

略。

4 CPU解码和GPU解码的性能对比

注意:GPU解码在深度学习工程项目中主要在两个环节应用,即解码视频流 + 图像预处理(主要是颜色空间转换和resize)。

参考1:(公司内部人员测试)

视频流解码对比:3倍

CPU上解码:

  • CPU占用率:538.5%
  • 总帧数:  18514
  • 耗时:30591.02 ms
  • 平均每帧耗时:1.652318 ms

GPU上解码:

  • CPU占用率:30.3%
  • GPU占用率:3%
  • 显存占用:215MB
  • 总帧数:  18514
  • 耗时:9699.89 ms
  • 平均每帧耗时: 0.52392189 ms

视频流解码 + cvtColor 对比:预估10倍

参考2:https://www.cnblogs.com/ahfuzhang/p/10855762.html

视频大小:1168856 字节
画面尺寸:480*848
帧数:275

opencv + cuvid 方案:tesla P4(性能类似于GTX 1070)解码性能:1426.84 fps

ffmpeg 4.0 API 方案:[Intel(R) Xeon(R) Gold 6133 CPU @ 2.50GHz]解码性能:206.46 fps

GPU解码是CPU解码的6.9倍
注意:
1. GPU解码丢了两帧;
2. 如果使用cuda stream流水线技术,理论上性能还会再提升。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值