零基础导入自己YOLOv3或YOLOv3-Tiny模型

非常感谢你的回复。
我周末又试了yolov3,weights和cfg用的官方的,我只是按官方教程跑了一遍流程,转模型是在PC虚拟机Ubuntu18.04里执行的 bash 0&1&2那个3个脚本,编译是在VIM3板子上(Ubuntu20.04)里的 aml_npu_app 下编译的yolov3.so,运行推理同样是在VIM3上的aml_npu_demo_binaries下替换了yolov3.so,运行结果是:Model_create_fail, file_path=nn_data,dev_type = 1, det_set_model fail. ret = -4,如果使用ndk-build编译出的android yolov3.so 在android上运行就会闪退。我稍后把yolov3的全部流程和附件贴上来,帮忙看下哪里出的问题。非常感谢

@guofq 你可能搞混了,android与ubuntu的npu使用是不同的。我这个文档是android的,所以请完全按照我写的步骤来操作,都在虚拟机上转换与编译。


@goenjoy 感谢。是我没有表述清楚。我其实在2个系统下都遇到了问题。
首先Android系统下,我完全按照你的这边文章跑下来,转换和编译确实都是在虚拟机下进行的,其中转换脚本跟你的完全一直,编译是在 khadas_android_npu_library 下对应的model_code里对应的模型执行 ndk-build编译的android so库,然后拷贝到android app工程运行时程序会闪退。因抓不到log所以无法提供更多的信息;
于是,我周末将vim3板子重新刷成了ubuntu系统,完全参考官方指导:https://docs.khadas.com/linux/zh-cn/vim3/ConvertToUseNPU.html( 转换并通过NPU调用自己的模型)
在虚拟下进行了转换,并在vim3板测进行编译。但是推理时提示如下错误:
khadas@Khadas:~/workspace/aml_npu_demo_binaries/detect_demo_picture$ ./detect_demo_x11 -m 2 -p 1080p.bmp
W Detect_api:[det_set_log_level:19]Set log level=1
W Detect_api:[det_set_log_level:21]output_format not support Imperfect, default to DET_LOG_TERMINAL
det_set_log_config Debug
#productname=VIPNano-QI, pid=0x88
I [vsi_nn_CreateGraph:478]OVXLIB_VERSION==1.1.27
D [setup_node:441]Setup node id[0] uid[0] op[NBG]
D [print_tensor:146]in(0) : id[ 0] vtl[0] const[0] shape[ 416, 416, 3, 1 ] fmt[i8 ] qnt[DFP fl= 7]
D [print_tensor:146]out(0): id[ 1] vtl[0] const[0] shape[ 13, 13, 255, 1 ] fmt[i8 ] qnt[DFP fl= 2]
D [print_tensor:146]out(1): id[ 2] vtl[0] const[0] shape[ 26, 26, 255, 1 ] fmt[i8 ] qnt[DFP fl= 2]
D [print_tensor:146]out(2): id[ 3] vtl[0] const[0] shape[ 52, 52, 255, 1 ] fmt[i8 ] qnt[DFP fl= 2]
D [optimize_node:385]Backward optimize neural network
D [optimize_node:392]Forward optimize neural network
I [compute_node:327]Create vx node
D [compute_node:350]Instance node[0] “NBG” …
generate command buffer, total device count=1, core count per-device: 1,
current device id=0, AXI SRAM base address=0xff000000
vxoBinaryGraph_CheckInputOutputParametes[3377]: quant dfp=1, run time dfp=2
nn patch output failed, please check your output format, output 2
fail to initial memory in generate states buffer
fail in import kernel from file initializer
Failed to initialize Kernel “yolov3_88” of Node 0x5589447eb0 (status = -1)E [model_create:64]CHECK STATUS(-1:A generic error code, used when no other describes the error.)
E Detect_api:[det_set_model:225]Model_create fail, file_path=nn_data, dev_type=1
det_set_model fail. ret=-4

@guofq 我这个案例没有在ubuntu下验证过。建议你用android来验证。
你可以把步骤详细记录下来。或者你可以用排除法,定位是哪里出了问题,比方通过替换库文件(.so或者nb文件)来查找是哪个出了问题。

这个问题你还没有回复呢?要先确认。。。。

老哥,请问可以用这个A311d来部署两个深度学习模型进行同时检测吗,目标检测的

一个模型不能实现你的需求吗?为啥要两个深度模型?

@liuyifa 模型需要裁剪,只要分配的内存够你使用,是可以同时使用两个模型的,带宽是够的

1 Like

你好,请问/aml_npu_sdk/acuity-toolkit/bin下面的转换工具怎么获得,没有的话第一步导入模型都不能进行(从 https://github.com/khadas/aml_npu_sdk里下载的bin文件夹里为空)

@purplepetal 该文件夹是作为子仓库存在的,你可以参考文档的命令,clone时带上参数

1 Like

@goenjoy 你好,我把自己yolov3模型生成的so和nb文件替换进demo app里运行,出现画面就立即卡住了,过一会闪退

卡住时运行终端显示的信息是:
E/linker: library “/system/vendor/lib/libGAL.so” ("/vendor/lib/libGAL.so") needed or dlopened by “/data/app/com.khadas.npudemo-XY8hNYAHZMZtNmUlk3xdIA==/base.apk!/lib/armeabi-v7a/libGAL.so” is not accessible for the namespace: [name=“classloader-namespace”, ld_library_paths="", default_library_paths="/data/app/com.khadas.npudemo-XY8hNYAHZMZtNmUlk3xdIA==/lib/arm:/data/app/com.khadas.npudemo-XY8hNYAHZMZtNmUlk3xdIA==/base.apk!/lib/armeabi-v7a", permitted_paths="/data:/mnt/expand:/data/data/com.khadas.npudemo"]
I/gralloc: ddebug, pair (share_fd=95, user_hnd=d, ion_client=64)


绿线下面是闪退后出现的

附1:我用的是今天从github上新下载的khadas_android_npu_app项目,没替换nb和so之前是能正常运行的。
附2:报错中的libGAL.so在项目里存在

(我在另一个问题下问过编译so库那个改版本的问题,将vnn_yolov3.h中的VNN_VERSION_PATCH 改回26 ,编译成功了,但现在这个报错不知道是不是因为生成的so库有问题

如果之前的so 是正常的,那说明是so的问题,你重新编译库修改了什么东西?

是按 上面操作步骤 将生成case代码里的文件拿来进行替换以及修改

还有编译不成功,将vnn_yolov3.h中的VNN_VERSION_PATCH 改成26了,我自己生成case代码里vnn_yolov3.h的VNN_VERSION_PATCH是30(library里原本是26,但上面操作步骤里让替换vnn_yolov3.h的)。之后so库编译成功了
Android导入yolov3中:NDK编译JNI so库出错 求助 - VIM3 - Khadas Community

换了个模型操作,没有画面卡住和闪退问题了

@goenjoy 你好,按您的步骤操作,那置信度是设置的多少呢?这个置信度我可以在哪里调吗

@Frank 麻烦回复下,谢谢!!!!!!

@purplepetal 置信度在你的模型训练过程中去设置就可以了。这里的转换应用,不需要设置置信度

@Frank 我使用的pytorch版的yolov3( github.com),在train时并没有置信度,在test和detect里才有,而且我运行这个模型也就是detect,是可以调整它的置信度呀

@purplepetal 以我们的yolov3 demo为例,配置位置在这里

你根据你自己的模型修改你的代码。

好的,非常感谢!!!!!!!!!!!!!!!!!!!!!!