Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Microchip Micro 3588 rknn_ Npu2 problem #186

Open
corner4world opened this issue Dec 20, 2023 · 7 comments
Open

Microchip Micro 3588 rknn_ Npu2 problem #186

corner4world opened this issue Dec 20, 2023 · 7 comments

Comments

@corner4world
Copy link

I am using Purego to call Microchip Micro 3588 rknn_ Npu2, after registering the corresponding function, use rknn_query function returns an error in uint32 when querying model input:

Expected: Model input num: 1, output num: 1

Result: Model input num: 508, output num: 4294967295

The code is as follows:
package main

import (
"fmt"
"github.com/ebitengine/purego"
"io"
"os"
"unsafe"
)

func openLibrary(name string) (uintptr, error) {
return purego.Dlopen(name, purego.RTLD_NOW|purego.RTLD_GLOBAL)
}

func load_model(model_path string) (model []byte, model_len int64, err error) {
file, err := os.Open(model_path)
if err != nil {
panic(err)
}

defer file.Close()

model_len, err = file.Seek(0, io.SeekEnd)
if err != nil {
	panic(err)
}

file.Seek(0, io.SeekStart)

buf := make([]byte, model_len)
file.Read(buf)

return buf, model_len, err

}

func main() {
var ctx rknn_context
librknn, err := openLibrary("/userdata/rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn_api.so")
if err != nil {
panic(err)
}

var rknn_init func(*rknn_context, []byte, int64, uint32, uint8) int
purego.RegisterLibFunc(&rknn_init, librknn, "rknn_init")

var rknn_query func(*rknn_context, rknn_query_cmd, unsafe.Pointer, uintptr) int
purego.RegisterLibFunc(&rknn_query, librknn, "rknn_query")

model, model_len, err := load_model("/userdata/rknpu2/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn")
if err != nil {
	panic(err)
}

ret := rknn_init(&ctx, model, model_len, 0, 0)
if ret < 0 {
	fmt.Printf("rknn_init fail! ret=%d\n", ret)
}

var version rknn_sdk_version
fmt.Printf("rknn RKNN_QUERY_SDK_VERSION=%d\n", RKNN_QUERY_SDK_VERSION)
ret = rknn_query(&ctx, RKNN_QUERY_SDK_VERSION, unsafe.Pointer(&version), uintptr(unsafe.Sizeof(version)))
if ret != RKNN_SUCC {
	fmt.Printf("rknn_query fail! ret=%d\n", ret)
}

fmt.Printf("rknn_api/rknnrt version: %s, driver version: %s\n", string(version.api_version[:]), string(version.drv_version[:]))
fmt.Println("rknn_input_output_num:")

fmt.Printf("rknn RKNN_QUERY_IN_OUT_NUM=%d\n", RKNN_QUERY_IN_OUT_NUM)
io_num := rknn_input_output_num{0, 0}
fmt.Printf("nsafe.Sizeof(io_num): %d\n", uint32(unsafe.Sizeof(io_num)))
fmt.Printf("model input num: %d, output num: %d\n", io_num.n_input, io_num.n_output)
ret = rknn_query(&ctx, RKNN_QUERY_IN_OUT_NUM, unsafe.Pointer(&io_num), uintptr(unsafe.Sizeof(io_num)))
if ret != RKNN_SUCC {
	fmt.Printf("rknn_query fail! ret=%d\n", ret)
}
fmt.Printf("model input num: %d, output num: %d\n", io_num.n_input, io_num.n_output)

}

@corner4world
Copy link
Author

@TotallyGamerJet
Copy link
Collaborator

You linked an unmaintained project. Also it looks like the function you are calling returns an int32 not a uint32. https://github.com/airockchip/rknn-toolkit2/blob/b25dadacc24b88eb7dfcaa47c9c525ecca89b319/rknpu2/examples/rknn_yolov5_android_apk_demo/app/src/main/cpp/rknn_api.h#L460 int in C is 32bit signed not unsigned. Using int in Go for this is not correct. Use int32

@corner4world
Copy link
Author

rknn_query The return value only proves that the execution was successful. A pointer was passed in the parameter, and the function changed the value of the pointer, which is also required by the program. The function was executed twice, with the first execution result being correct and the second failure to obtain the correct io_num

@TotallyGamerJet
Copy link
Collaborator

@corner4world is this still happening with the latest commit?

@corner4world
Copy link
Author

@corner4world is this still happening with the latest commit?

Hello, I am using v0.5.1image
@TotallyGamerJet

@TotallyGamerJet
Copy link
Collaborator

Are you saying it's still happening? If so, can you try the latest commit? 33b97fd

@corner4world
Copy link
Author

corner4world commented Jan 7, 2024

Yes, it's not the expected outcome either

image

This is my project code:
rknn.zip
@TotallyGamerJet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants