Toybrick

rknn多图推理参数设置

peng

注册会员

积分
169
发表于 2019-10-10 17:16:32    查看: 23111|回复: 14 | [复制链接]    打印 | 显示全部楼层
rknn不仅支持单张图片推理,还支持多图同时进行推理,以mnist的模型为例,这里把batch_size设为3:
  1. def common_transfer(pb_name,export_name):
  2.         ret = 0
  3.         #看具体log 传入verbose=True
  4.         rknn = RKNN()
  5.         #灰度图无需此步操作
  6.         # rknn.config(channel_mean_value='', reorder_channel='')
  7.         print('--> Loading model')

  8.         ret = rknn.load_tensorflow(
  9.                 tf_pb='./mnist_frozen_graph.pb',
  10.                 inputs=['x'],
  11.                 outputs=['y_conv'],
  12.                 input_size_list=[[28,28,1]])
  13.         if ret != 0:
  14.                 print('load_tensorflow error')
  15.                 rknn.release()
  16.                 return ret
  17.         print('done')
  18.         print('--> Building model')
  19.         rknn.build(rknn_batch_size=3,do_quantization=False)
  20.         print('done')
  21.         # 导出保存rknn模型文件
  22.         rknn.export_rknn('./mnist.rknn')
  23.         # Release RKNN Context
  24.         rknn.release()
  25.         return ret
复制代码
然后进行推理,推理的结果会把三张图片的结果合并在一个list中,需要我们自己将其分割开:
  1. def predict(rknn,length):
  2.     acc_count = 0
  3.     mat = []
  4.     for i in range(length):
  5.         im = mnist.test.images[i]
  6.         # im = Image.open("../MNIST_data/mnist_test/test_%d.jpg"%i)   # 加载图片
  7.         # im = im.resize((28,28),Image.ANTIALIAS)
  8.         # im = np.asarray(im)
  9.         im = im.reshape(28,28,1)
  10.         mat.append(im)
  11.         if len(mat) == 3:
  12.             mat = np.array(mat).reshape(3,28,28,1)
  13.             outputs = rknn.inference(inputs=[mat])
  14.             outputs1 = outputs[0][0][0:10]
  15.             outputs2 = outputs[0][0][10:20]
  16.             outputs3 = outputs[0][0][20:]
  17.             outputs = [[[outputs1]],[[outputs2]],[[outputs3]]]
  18.             j = 2
  19.             for output in outputs:
  20.                 pred, prob = get_predict(output)
  21.                 if i == 2:
  22.                     print(output)
  23.                     print(prob)
  24.                     print(pred)
  25.                 if list(mnist.test.labels[i-j]).index(1) == pred:
  26.                     acc_count += 1
  27.                 j -= 1
  28.             mat = []
  29.         else:
  30.             pass
  31.         if i ==100 or i ==500 or i ==1000 or i ==10000:
  32.             result = float(acc_count)/i
  33.             print('result%d:'%i,result)
  34.     result = float(acc_count)/length
  35.     print('result:',result)
复制代码
最终其结果和单张推理的结果是相同的.
回复

使用道具 举报

gwjjj35

注册会员

积分
108
发表于 2019-10-15 10:38:42 | 显示全部楼层
您好       我按照您的代码风格重新写了一下,输出的结果还是对不上,而且有类似“0.      ”这样奇怪的数据。单图推理和多图推理的结果截图如下:




     希望您能解答一下  

     谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

peng

注册会员

积分
169
 楼主| 发表于 2019-10-15 11:13:34 | 显示全部楼层
你的输出是softmax分类吗,我看你的output的类别有点多
回复

使用道具 举报

peng

注册会员

积分
169
 楼主| 发表于 2019-10-15 11:13:58 | 显示全部楼层
gwjjj35 发表于 2019-10-15 10:38
您好       我按照您的代码风格重新写了一下,输出的结果还是对不上,而且有类似“0.      ”这样奇怪的数 ...


你的输出是softmax分类吗,我看你的output的类别有点多
回复

使用道具 举报

gwjjj35

注册会员

积分
108
发表于 2019-10-15 11:22:32 | 显示全部楼层
peng 发表于 2019-10-15 11:13
你的输出是softmax分类吗,我看你的output的类别有点多

不是的,我的输出也是640*480的图像
回复

使用道具 举报

peng

注册会员

积分
169
 楼主| 发表于 2019-10-15 14:16:25 | 显示全部楼层
gwjjj35 发表于 2019-10-15 11:22
不是的,我的输出也是640*480的图像

我的输出是十个类别,和你的例子应该是不一样的,可能需要调整下输入输出节点
回复

使用道具 举报

gwjjj35

注册会员

积分
108
发表于 2019-10-16 08:55:26 | 显示全部楼层
peng 发表于 2019-10-15 14:16
我的输出是十个类别,和你的例子应该是不一样的,可能需要调整下输入输出节点 ...

有没有官方技术人员解答一下呀!着急!
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2019-10-16 11:59:12 | 显示全部楼层
gwjjj35 发表于 2019-10-16 08:55
有没有官方技术人员解答一下呀!着急!

输出图片的要注意下是NCHW结构还是NHWC结构。
调换下试试结果。
不是很懂的情况下,可以用c接口枚举出输出类型看下。
回复

使用道具 举报

raul

中级会员

积分
235
发表于 2019-10-18 09:30:48 | 显示全部楼层
gwjjj35 发表于 2019-10-15 10:38
您好       我按照您的代码风格重新写了一下,输出的结果还是对不上,而且有类似“0.      ”这样奇怪的数 ...
  1. output0 = outputs[0]
  2. output1 = outputs[1]
  3. optput2 = outputs[2]
  4. print(output0)
复制代码

这样写试下。打印output0看跟单张是不是类似的?
回复

使用道具 举报

gwjjj35

注册会员

积分
108
发表于 2019-10-23 16:27:00 | 显示全部楼层
jefferyzhang 发表于 2019-10-16 11:59
输出图片的要注意下是NCHW结构还是NHWC结构。
调换下试试结果。
不是很懂的情况下,可以用c接口枚举出输 ...

我的数据是单通道的,试了batch_size=2和batch_size=3计算结果还是对不上,和单图推理相差很多,而且我也试了量化和不量化,都不行。就差这功能就大致能满足帧率要求了....有什么建议吗?

C接口枚举输出类型是什么意思?不是很明白,望解答,谢谢!
回复

使用道具 举报

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

本版积分规则

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


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