通过自定义的模型预处理方式输出的浮点数据,能直接使用aml nn api推理吗?当前我用如下方式进行,但好像结果有些问题?
nn_input in_data;
in_data.input_index = 0;
in_data.size = 32x32x1;
in_data.input = (uchar*)(float_data_ptr); // 该数据为自定义预处理输出的32x32x1的浮点数据
in_data.input_type = BINARY_RAW_DATA;
aml_module_input_set(context, &in_data);
感谢回复。
主要是我们的预处理方式比较特殊,NPU本身的归一化方式不太能够支持。
对于这种自定义的预处理方式,有什么比较好的处理方式用于模型推理呢?
@crouchggj 建议自己在预处理时就处理成整形,不要用浮点,说实话,浮点无论是精度还是效率在NPU上都很低。非常不建议这么使用。建议采用近似的方法弄成整形。如果一定要使用float,可以使用float16,这里有个float16和float32转换的代码给你参考
float Float16ToFloat32(signed short src)
{
signed int t1;
signed int t2;
signed int t3;
float out;
int i;
t1 = src & 0x7fff; // Non-sign bits
t2 = src & 0x8000; // Sign bit
t3 = src & 0x7c00; // Exponent
t1 <<= 13; // Align mantissa on MSB
t2 <<= 16; // Shift sign bit into position
t1 += 0x38000000; // Adjust bias
t1 = (t3 == 0 ? 0 : t1); // Denormals-as-zero
t1 |= t2;
*((unsigned int*)&out) = t1; // Re-insert sign bit
return out;
}
多谢!! 我参考下
另外“amlogic nn api 已经停止维护了”,那现在推荐用什么api来做nn推理呢