如何写CUDA核函数高效实现将视频连续多帧图片转换成3D动作或行为识别模型所需的输入数据格式

这篇博客详细介绍了如何将3D动作识别模型的RGB输入数据转换为RRR...GGG...BBB...格式,特别是针对TensorRT优化后的模型。内容包括理解线性存储顺序,提供CUDA核函数实现转换,并给出不使用核函数的简单转换示例代码。此外,还讨论了处理BGR格式图片的情况。

3D动作或行为识别模型需要完成一个动作或者行为的相关的一定数量的连续画面作为输入来进行推理,从视频中抽取的帧一般转换后都是RGB格式的,连续多帧数据的顺序排列从通道看就是RGBRGBRGB...这样的排列顺序,但是有的3D动作或行为识别模型要求输入的数据格式是RRR...GGG...BBB...这样的通道顺序,那怎么把前面的格式转换成后面的格式呢?

这里举例是基于把模型优化转换成TensorRT engine从而使用TensorRT来调用模型,TensorRT调用模型时存放模型输入数据的input buffer是线性存放数据的,首先要搞清楚线性存放一张RGB图片时的数据组织顺序,这点没弄明白后面的就看不懂。如果把图片的原始三通道数据看成是一个WxHxC的三维数组data的话,在input buffer里线性存放的顺序是:

data[0][0][0]、data[0][0][1]、data[0][0][2]、...、 data[0][W-1][0]、data[0][W-1][1]、data[0][W-1][2]
data[1][0][0]、data[1][0][1]、data[1][0][2]、...、data[1][W-1][0]、data[1][W-1][1]、data[1][W-1][2]
...
data[H-1][0][0]、data[H-1][0][1]、data[H-1][0][2]、...、data[H-1][W-1][0]、data[H-1][W-1][1]、data[H-1][W-1][2]

对于依次连续存放在input buffer多张RGB图片要转换成RRR...GGG...BBB...这样的存放格式比较抽象,转换对应关系你可能有点蒙,我们先看比较简单的,假设只有两张RGB图片,其数据对应的三维数组为data1和data2,如果按RRGGBB格式线性存放到input buffer里,那么顺序应该是:

data1[0][0][0]、data1[0][1][0]、data1[0][2][0]、...、 data1[0][W-1][0]
...
data1[H-1][0][0]、data1[H-1][1][0]、data1[H-1][
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值