Npu: 模型量化问题,求帮助

是android. sdk里面没得gal. 只有jpeg和ovxlib @Frank

@Frank 我看了下、sdk. linux sdk是有libGAL.so的。 但是android 没得

@heaven7 安卓不一定把这个库添加进去了

关于安卓的你要咨询 @jasonl

@jasonl 求助。android npu sdk没得libGAL.so …

 static {
        System.loadLibrary("openpose_npu");
        System.loadLibrary("jpeg_t");
        System.loadLibrary("ovxlib");
    }

@Frank 改变顺序后报找不到libc++.so .
dlopen failed: library “libc++.so” not found

System.loadLibrary("jpeg_t");
        System.loadLibrary("ovxlib");
        System.loadLibrary("openpose_npu");

我拷贝了一个libc++_shared.so 改名过来。但是还是报dlopen failed: library “libGAL.so” not found

libGAL.so 这个库android 源码中是有的,可能不止缺这个库,你可以在源码中复制

@jasonl 源码哪个目录下 有, fff

@jasonl @Frank so我都可以加载了。问题是现在调用nnapi的时候就crash. 我怀疑是npu的sdk版本和 vim3系统源码版本不匹配。求npu sdk版本和源码版本的对应关系。

@heaven7 最新的安卓固件对应的是6.4.3的版本

@Frank 发现这个错误

 E/linker: library "/system/vendor/lib/libGAL.so" ("/vendor/lib/libGAL.so") needed or dlopened by "/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/lib/arm/libGAL.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/lib/arm:/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/base.apk!/lib/armeabi-v7a", permitted_paths="/data:/mnt/expand:/data/data/com.heaven7.android.vim3_npu"]
···

@heaven7 这个问题 @jasonl 会帮你看一下,安卓这边的问题

我查了一下。好像是说名称空间的问题。
Only the additional libraries added by silicon vendors or device manufacturers can be made accessible to apps. Starting from Android 8.0, vendor public libraries have the following additional restrictions and required setups: The native library in vendor must be properly labeled so it can be accessible to apps.

依赖的库

target_link_libraries(openpose_npu
     jpeg_t
     cutils
     GAL
     NNArchPerf
     archmodelSw
     OpenVX
     VSC
     ovxlib
     jnigraphics
     ${log-lib}
)

@jasonl

@heaven7 这种找不到库的问题,一般是库的位置放的不对,你可以尝试修改下,或者这个库依赖别的库,要保证所有依赖的库都有了

现在报这个错: ndroid.vim3_npu: type=1400 audit(0.0:185): avc: denied { execute } for path="/vendor/lib/libGAL.so" dev=“mmcblk0p16” ino=363 scontext=u:r:untrusted_app:s0:c47,c256,c512,c768 tcontext=u:object_r:vendor_file:s0 tclass=file permissive=1

@Frank @jasonl

单独跟踪发现在下面这行代码。setupGraph失败。

 status = vsi_nn_SetupGraph( graph, FALSE );

我刷了最新的固件 和 下载了最新的npu sdk. 加载 ovxlib就报错。
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “vxCreateTensorFromHandle2” referenced by “/data/app/com.heaven7.android.vim3_npu-ljZcs6aRY7sDnvik5s6rMQ==/lib/arm/libovxlib.so”…
@Frank @jasonl
android
npu 6.4.3 .
固件: VIM3_Pie_V201112

@Frank 求助~~ fffffffffffff

@heaven7 你把你的调试步骤详细列下,我们这边也试下

@jasonl
步骤:
1, 下载npu sdk (6.4.3)
2, 下载好固件(V201112),并刷到vim3上。
3, 将新的libjpeg.so. 和 libovxlib.so(包含include头文件) 替换掉, (目录在android 下面jniLibs/armeabi-v7a)
case 代码是用之前转换好的基础上修改的。
4, 编译native 代码。ok. 没有任何报错信息。
5, 在/vendor/etc/public.libraries.txt中增加libs.

libcutils.so,  libGAL.so, libNNArchPerf.so, libarchmodelSw.so, libOpenVX.so, libVSC.so

6., 运行时加载

```public static void loadLibs(){
        loadLib("jpeg");
        loadLib("cutils");
        loadLib("GAL");
        loadLib("NNArchPerf");
        loadLib("archmodelSw");
        loadLib("OpenVX");
        loadLib("VSC");
        loadLib("ovxlib");// 在使用新的npu sdk。加载这个就报错
        loadLib("openpose_npu");
    }

    private static void loadLib(String name){
        System.out.println("start load: " + name);
        System.loadLibrary(name);
        System.out.println("end load: " + name);
    }

ps: android cmake 文件大致是这样的。

project(TENSORFLOW_DEMO)
cmake_minimum_required(VERSION 3.4.1)

# openpose
set(LIB_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
include_directories(src/main/cpp/include/applib/ovxinc/include)
include_directories(src/main/cpp/include/service/ovx_inc)
aux_source_directory(src/main/cpp/openpose src_openpose)

add_library(ovxlib SHARED IMPORTED)
set_target_properties(ovxlib PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libovxlib.so)

add_library(jpeg_t SHARED IMPORTED)
set_target_properties(jpeg_t PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libjpeg_t.so)

add_library(cutils SHARED IMPORTED)
set_target_properties(cutils PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libcutils.so)

add_library(GAL SHARED IMPORTED)
set_target_properties(GAL PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libGAL.so)

add_library(NNArchPerf SHARED IMPORTED)
set_target_properties(NNArchPerf PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libNNArchPerf.so)

add_library(archmodelSw SHARED IMPORTED)
set_target_properties(archmodelSw PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libarchmodelSw.so)

add_library(OpenVX SHARED IMPORTED)
set_target_properties(OpenVX PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libOpenVX.so)

add_library(VSC SHARED IMPORTED)
set_target_properties(VSC PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libVSC.so)

add_library(openpose_npu SHARED ${src_openpose})
find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

target_link_libraries(openpose_npu
     jpeg_t
     cutils
     GAL
     NNArchPerf
     archmodelSw
     OpenVX
     VSC
     ovxlib
     jnigraphics
     ${log-lib}
)

npu 6.4.2.1 和 固件的哪个版本匹配?@Frank