rknn-toolkit icon indicating copy to clipboard operation
rknn-toolkit copied to clipboard

load_rknn error: TypeError: list indices must be integers or slices, not str

Open zjykzj opened this issue 3 years ago • 4 comments

@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

zjykzj avatar Oct 09 '21 07:10 zjykzj

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 avatar Oct 11 '21 07:10 zen-xingle

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:

  1. Docker: rknn-toolkit2-ubuntu:1.0.0
  2. 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

test.zip

zjykzj avatar Oct 12 '21 10:10 zjykzj

I suffer from the same problem. Has the bug been fixed?

jinheena avatar Mar 18 '22 10:03 jinheena

I suffer from the same problem. Has the bug been fixed?

xingkongliang avatar Apr 25 '23 05:04 xingkongliang