rknn-toolkit
rknn-toolkit copied to clipboard
load_rknn error: TypeError: list indices must be integers or slices, not str
@rkchrome thank you for sharing so good product.
I want to run rknn model in docker after converted .onnx to .rknn. Use load_rknn function, the total code shows as belows
import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNN
RKNN_MODEL = "rknns/test.rknn"
def show_outputs(outputs):
output = outputs[0][0]
output_sorted = sorted(output, reverse=True)
top5_str = 'resnet50v2\n-----TOP 5-----\n'
for i in range(5):
value = output_sorted[i]
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
topi = '{}: {}\n'.format(index[j], value)
else:
topi = '-1: 0.0\n'
top5_str += topi
print(top5_str)
def readable_speed(speed):
speed_bytes = float(speed)
speed_kbytes = speed_bytes / 1024
if speed_kbytes > 1024:
speed_mbytes = speed_kbytes / 1024
if speed_mbytes > 1024:
speed_gbytes = speed_mbytes / 1024
return "{:.2f} GB/s".format(speed_gbytes)
else:
return "{:.2f} MB/s".format(speed_mbytes)
else:
return "{:.2f} KB/s".format(speed_kbytes)
def show_progress(blocknum, blocksize, totalsize):
speed = (blocknum * blocksize) / (time.time() - start_time)
speed_str = " Speed: {}".format(readable_speed(speed))
recv_size = blocknum * blocksize
f = sys.stdout
progress = (recv_size / totalsize)
progress_str = "{:.2f}%".format(progress * 100)
n = round(progress * 50)
s = ('#' * n).ljust(50, '-')
f.write(progress_str.ljust(8, ' ') + '[' + s + ']' + speed_str)
f.flush()
f.write('\r\n')
if __name__ == '__main__':
# Create RKNN object
rknn = RKNN()
# Load rknn model
print('--> Load RKNN model')
ret = rknn.load_rknn(RKNN_MODEL)
if ret != 0:
print('Load failed!')
exit(ret)
print('done')
# Set inputs
img = cv2.imread('assets/demo4.jpg')
img = np.expand_dims(img, 0)
if img is None:
print('Load img failed!')
exit(ret)
# init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
if ret != 0:
print('Init runtime environment failed')
exit(ret)
print('done')
# Inference
print('--> Running model')
outputs = rknn.inference(inputs=[img])
print(outputs)
x = outputs[0]
output = np.exp(x) / np.sum(np.exp(x))
outputs = [output]
show_outputs(outputs)
print('done')
rknn.release()
the procedure is like this
load rknn -> init environment -> load image -> infer -> output
But there is an error happens:
# python3 single_model_test.py
--> Load RKNN model
done
--> Init runtime environment
W init_runtime: target is None, use simulator!
done
--> Running model
Traceback (most recent call last):
File "single_model_test.py", line 95, in <module>
outputs = rknn.inference(inputs=[img])
File "/usr/local/lib/python3.6/dist-packages/rknn/api/rknn.py", line 350, in inference
inputs_pass_through=inputs_pass_through, get_frame_id=get_frame_id)
File "rknn/api/rknn_base.py", line 2539, in rknn.api.rknn_base.RKNNBase.inference
File "rknn/api/rknn_base.py", line 2376, in rknn.api.rknn_base.RKNNBase._inference_by_compiler
TypeError: list indices must be integers or slices, not str
Hope you can give me answer, thank you
Thanks for your report. Seems we got a bug here.
Could you upload your test_onnx_model and we can reproduce this result and check it closely.
Thanks for your report. Seems we got a bug here.
Could you upload your test_onnx_model and we can reproduce this result and check it closely.
@zen-xingle thank you for you reply.
More infor:
- Docker: rknn-toolkit2-ubuntu:1.0.0
- RKNN: rknn-toolkit2-1.0.0
Docker env:
# uname -a
Linux bc206be8464d 5.11.0-37-generic #41~20.04.2-Ubuntu SMP Fri Sep 24 09:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Host env:
(base) zj@youyou:~$ uname -a
Linux youyou 5.11.0-37-generic #41~20.04.2-Ubuntu SMP Fri Sep 24 09:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
I suffer from the same problem. Has the bug been fixed?
I suffer from the same problem. Has the bug been fixed?