C++硬件适配(推理/解码)流程

C++硬件推理适配流程

在这里插入图片描述

核心:

1.核心在于推理,主要关注推理需要的参数是什么类型,应该怎么获取。
2.提前开辟输入的cpu和device空间,预处理之后的数据可以memcpy至cpu空间,然后MxBase::MemoryHelper::MxbsMemcpy至device空间,用于送入推理。
3.提前开辟输出的device空间,用于保存推理后的输出数据。
4.输入输出在正式使用时都需要进行重置memset(最好是),防止数据未被完全覆盖而被调用导致的错误。

疑惑:

Q:为什么从cpu拷贝至device使用的是MxBase::MemoryHelper::MxbsMemcpy而非memcpy?
A:因为memcpy仅支持同侧的且cpu的拷贝。

Q:为什么在转化模型时,对模型归一化,那么推理时送入接口的数据是UINT8。而对于未归一化的模型,送入的数据是Float32.
A:主要是由于归一化操作涉及了浮点运算。简单来说,读入图像并进行缩放后,图像的数值仍是在0-255之间,适合以uint8的数据格式存储。此时,由于模型进行了归一化,所以仅需将缩放后的图像数据送入推理皆可,归一化操作会在内部进行;而对于未归一化的模型,归一化操作需要手动使用代码完成,此时已经涉及到浮点运算,如果再保存为uint8的格式会损失精度,所以会以float32的格式送入推理。

Q:为什么模型的输出节点一般是float32或int32(int),而不需要int64?
A:对于int64而言,其能表示的数值特别大, 2 64 2^{64} 264 字节,一般并不会用到,会造成浪费;可以将其强制转换为int,具体来说int64类型数值以二进制形式存储,占用连续的8个字节,即64比特(b63 … b0)。若直接进行强转int,则对丢弃高位的比特数,变为32比特(b31 … b0)。若有超过int32表示的数值强转为int32,则其值可能会变为-1。

数据类型:

数据类型说明
float32单精度浮点数,占32位(也就是4个字节),可以提供约7位有效数字的精度。
int88位有符号整数类型,可以表示范围在-128到127之间的整数。
uint88位无符号整数类型,可以表示范围在0到255之间的整数(例如像素值)。
int3232位有符号整数类型,可以表示范围在-2147483648到2147483647之间的整数。
uint3232位无符号整数类型,可以表示范围在0到4294967295之间的整数。

C++硬件解码适配流程

1. 安装AscendFFmpegPlugin(否则无法使用mxVision框架)。

AscendFFmpegPlugin安装

2. 解码适配流程

在这里插入图片描述
核心与推理适配流程相同,最重要的是关注调用推理接口Decode时,需要的参数怎样获取或者构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值