瑞芯微Rockchip开发者社区
直播中

梅利号

8年用户 1482经验值
擅长:可编程逻辑
私信 关注
[经验]

求一套基于RK3399Pro的神经网络NPU硬件加速方案

Rockchip提供了一套RKNN API SDK,该SDK为基于 RK3399Pro Linux/Android 的神经网络NPU硬件的一套加速方案,可为采用RKNN API 开发的AI相关应用提供通用加速支持。
Linux系统
应用程序只需要包含该头文件和动态库,就可以编写相关的AI应用。
Fedora
通过dnf安装rknn-api开发包
sudo dnf install –y rknn-api
使用方式如下:
a. 引用头文件:
#include
b. 在Makefile中添加如下语句链接库文件:
LDFLAGS += -lrknn_api
使用方式如下:
a. 将rknn_api目录拷贝到项目根目录
b. 引用头文件:
#include "rknn_api.h"
c. 在Makefile中添加如下语句设置链接库路径和头文件路径
CFLAGS += -Lrknn_api/lib64 -Irknn_api/include
d. 在Makefile中添加如下语句链接库文件:
LDFLAGS += -lrknn_api
最终参考目录结构如下:
...
├── Makefile
└── rknn_api
    ├── include
    │   └── rknn_api.h
    └── lib64
        └── librknn_api.so
...
Ubuntu
Android系统
RKNN API支持Android 8.1/Android9.0且由Firefly发布的系统(或从发布的源码中编译的系统)。
RKNN API的动态库路径为lib64/librknn_api.so和lib/librknn_api.so。应用程序只需要包含该头文件和动态库,就可以编写相关的AI应用的JNI库。目前Android上只支持采用JNI的开发方式。
Android Studio具体配置方式如下:
a. 将lib64/librknn_api.so复制到项目jniLibs/arm64-v8a目录下,将lib/librknn_api.so复制到jniLibs/armeabi-v7a目录下。结果目录结果如下:
├── jniLibs
│   └── arm64-v8a
│       └── librknn_api.so
│   └── armeabi-v7a
│       └── librknn_api.so
b. 将rknn_api.h复制到jni源码目录下,如下参考:
├── jni
│   ├── direct_texture.cc
│   ├── direct_texture.h
│   ├── rknn_api.h
│   ├── ssd_image.cc
│   ├── ssd_image.h
│   ├── ssd_native_c_api.cc
│   └── ssd_native_c_api.h
c. 配置CMakeLists.txt,链接librknn_api.so
...
set(link_libs ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/librknn_api.so
               ...
              ${log-lib}
)
target_link_libraries( rkssd4j
                       ${link_libs} )
...
d. 配置build.gradle只编译arm64-v8a和armeabi-v7a的jni库
android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        ...
        ndk {
            abiFilters "arm64-v8a", "armeabi-v7a"
        }
    }
    ...
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}
最终目录结构大致如下:
# pwd: $(project_root)/app
.
├── app.iml
├── build
...
├── build.gradle
├── CMakeLists.txt
└── src
    └── main
        ├── AndroidManifest.xml
        ...
        ├── jni
        │   ├── direct_texture.cc
        │   ├── direct_texture.h
        │   ├── rknn_api.h
        │   ├── ssd_image.cc
        │   ├── ssd_image.h
        │   ├── ssd_native_c_api.cc
        │   └── ssd_native_c_api.h
        ├── jniLibs
        │   └── arm64-v8a
        │       └── librknn_api.so
        │   └── armeabi-v7a
        │       └── librknn_api.so
        ...

原作者:Firefly Wiki

更多回帖

发帖
×
20
完善资料,
赚取积分