Toybrick

python接口跟c接口推断的差异问题

jy_dll

注册会员

积分
122
楼主
发表于 2019-10-15 15:44:23    查看: 11370|回复: 7 | [复制链接]    打印 | 只看该作者
请问一下,我用同一个.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

版主

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

使用道具 举报

jy_dll

注册会员

积分
122
板凳
 楼主| 发表于 2019-10-17 15:46:32 | 只看该作者
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

注册会员

积分
92
地板
发表于 2019-10-18 09:09:54 | 只看该作者
jy_dll 发表于 2019-10-17 15:46
你好,我已经确认过了,输入类型都是uint8,图片opencv读进来就是CV_8U,
c api 指定的类型是 inputs[0] ...

请问这个问题解决了吗?我在开发板上也发现同样问题,同一个模型python接口调用是正确的,c接口结果完全错误,输出全是0x3d.
回复

使用道具 举报

jy_dll

注册会员

积分
122
5#
 楼主| 发表于 2019-10-18 10:22:44 | 只看该作者
zhangxiangming 发表于 2019-10-18 09:09
请问这个问题解决了吗?我在开发板上也发现同样问题,同一个模型python接口调用是正确的,c接口结果完全 ...

我跟你的情况不一样,我的不是完全错误的,完全错误多半是你的c代码有点问题,检查一下是不是哪个地方不一致吧~
回复

使用道具 举报

zhangxiangming

注册会员

积分
92
6#
发表于 2019-10-18 10:36:11 | 只看该作者
jy_dll 发表于 2019-10-18 10:22
我跟你的情况不一样,我的不是完全错误的,完全错误多半是你的c代码有点问题,检查一下是不是哪个地方不 ...

C代码以前用别的模型跑过没问题,这次换了个模型就不对了。
回复

使用道具 举报

jy_dll

注册会员

积分
122
7#
 楼主| 发表于 2019-10-18 11:17:07 | 只看该作者
zhangxiangming 发表于 2019-10-18 10:36
C代码以前用别的模型跑过没问题,这次换了个模型就不对了。

你现在的模型的输入,输出是不是跟之前的模型一样啊,有些参数是不是没改?比如类别个数之类的,毕竟你的输出全是0x3d,明显是有问题的,一步一步排查一下吧,先确定是不是自己的问题
回复

使用道具 举报

zhangxiangming

注册会员

积分
92
8#
发表于 2019-10-18 11:39:09 | 只看该作者
jy_dll 发表于 2019-10-18 11:17
你现在的模型的输入,输出是不是跟之前的模型一样啊,有些参数是不是没改?比如类别个数之类的,毕竟你的 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表