Toybrick

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

jy_dll

注册会员

积分
122
楼主
发表于 2019-10-15 15:44:23    查看: 7307|回复: 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 后面的信息不太一致,不知道是不是这个原因?

回复

使用道具 举报

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不太一样,不像是解析类型出错
回复

使用道具 举报

jy_dll

注册会员

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

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

使用道具 举报

jy_dll

注册会员

积分
122
地板
 楼主| 发表于 2019-10-18 11:17:07 | 显示全部楼层
zhangxiangming 发表于 2019-10-18 10:36
C代码以前用别的模型跑过没问题,这次换了个模型就不对了。

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

使用道具 举报

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

本版积分规则

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


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