Toybrick

标题: python接口跟c接口推断的差异问题 [打印本页]

作者: jy_dll    时间: 2019-10-15 15:44
标题: python接口跟c接口推断的差异问题
请问一下,我用同一个.rknn, 同一张图片,在rknn-toolkit1.0 的 python 接口跟 c 接口跑出来的结果不完全一致;跑的是ssd_mobilenet网络,预处理直接都是resize,然后直接看.rknn推断的结果(还没有后处理bbox),发现结果不一致,已经确认网络的输入数据完全一样,调用的.rknn模型也完全一样;
python接口是官方提供的rknn-toolkit-V1.0.0docker里面的环境,c接口是rknn-api-V0.9.5,想问一是否两个接口有些处理不一致,可以让工程师帮忙确认一下吗?
不过我的分类网络两个接口的结果是完全一致的,就是这个ssd_mobilenet 检测网络有些差异。

sdk的版本信息如下:
python:
==============================================
RKNN VERSION:
  API: 0.9.5 (c12de8a build: 2019-05-06 20:17:12)
  DRV: 0.9.6 (c12de8a build: 2019-05-06 20:10:17)
==============================================

c:
D RKNNAPI: ==============================================
D RKNNAPI: RKNN VERSION:
D RKNNAPI:   API: 0.9.5 (a949908 build: 2019-05-07 22:20:43)
D RKNNAPI:   DRV: 0.9.6 (c12de8a build: 2019-05-06 20:10:17)
D RKNNAPI: ==============================================

我发现D RKNNAPI:   API: 0.9.5 后面的信息不太一致,不知道是不是这个原因?


作者: jefferyzhang    时间: 2019-10-15 16:24
1. 两者调用的api是同一个,同一个输入的输出是不会存在差异的。
2. c api送的时候数据需要指定类型,我估计你送进去的数据解析值就跟python是完全不一样的。c是强类型语言,需要注意。
3. 输出结果解析类型是否也是错误的。

作者: jy_dll    时间: 2019-10-17 15:46
jefferyzhang 发表于 2019-10-15 16:24
1. 两者调用的api是同一个,同一个输入的输出是不会存在差异的。
2. c api送的时候数据需要指定类型,我估 ...

你好,我已经确认过了,输入类型都是uint8,图片opencv读进来就是CV_8U,
c api 指定的类型是 inputs[0].type = RKNN_TENSOR_UINT8;
python也 astype(np.uint8),但是结果还是有差异;
我不认为是输出解析类型有问题,不然的话这个地方就会报错:
if(outputs[0].size == outputs_attr[0].n_elems*sizeof(float) && outputs[1].size == outputs_attr[1].n_elems*sizeof(float));
另外,我两个接口出来的框都是合理的,只是位置有些偏移,以及出来的score不太一样,不像是解析类型出错

作者: zhangxiangming    时间: 2019-10-18 09:09
jy_dll 发表于 2019-10-17 15:46
你好,我已经确认过了,输入类型都是uint8,图片opencv读进来就是CV_8U,
c api 指定的类型是 inputs[0] ...

请问这个问题解决了吗?我在开发板上也发现同样问题,同一个模型python接口调用是正确的,c接口结果完全错误,输出全是0x3d.
作者: jy_dll    时间: 2019-10-18 10:22
zhangxiangming 发表于 2019-10-18 09:09
请问这个问题解决了吗?我在开发板上也发现同样问题,同一个模型python接口调用是正确的,c接口结果完全 ...

我跟你的情况不一样,我的不是完全错误的,完全错误多半是你的c代码有点问题,检查一下是不是哪个地方不一致吧~
作者: zhangxiangming    时间: 2019-10-18 10:36
jy_dll 发表于 2019-10-18 10:22
我跟你的情况不一样,我的不是完全错误的,完全错误多半是你的c代码有点问题,检查一下是不是哪个地方不 ...

C代码以前用别的模型跑过没问题,这次换了个模型就不对了。
作者: jy_dll    时间: 2019-10-18 11:17
zhangxiangming 发表于 2019-10-18 10:36
C代码以前用别的模型跑过没问题,这次换了个模型就不对了。

你现在的模型的输入,输出是不是跟之前的模型一样啊,有些参数是不是没改?比如类别个数之类的,毕竟你的输出全是0x3d,明显是有问题的,一步一步排查一下吧,先确定是不是自己的问题
作者: zhangxiangming    时间: 2019-10-18 11:39
jy_dll 发表于 2019-10-18 11:17
你现在的模型的输入,输出是不是跟之前的模型一样啊,有些参数是不是没改?比如类别个数之类的,毕竟你的 ...

输入输出都是一样的,只是用rknn-toolkit-1.2.0和rknn-api-0.9.9重新把TensorFlow模型转换成rknn模型测试。我的输出确实有问题,outputs[0].buf全是0x3d,正在一步步查呢。




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3