完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
rk3568 RKNN依赖配置
PC : Ubuntu 18.0+ rknn平台:RK3568 Python版本:3.6.x 安装rknn-toolkit2 1、下载RKNN_SDK或RK3568源码SDK,cd进入rknn-toolkit2目录 2、运行pip安装库:pip3 install - r doc/requirement.txt 3、pip安装轮子(.whl):pip3 install rknn_toolkit2-*-cp36-cp36m-linux_x86_64.whl 4、前两步完成后,运行python3,在python shell里输入from rknn.api import RKNN 安装成功则导入。否则就是安装失败 -出现-可能遇到的问题 requirement.txt 1、如果不是python3.6.x版本的话,可能会成功安装numpy.1.13.3安装问题,尝试使用python3.安装失败。 6.x版本,可以避免大量的问题。 2、pip3 install onnxoptimizer==0.1.0 报错: 命令 “/usr/bin/python3 -u -c ”import setuptools, tokenize;__file__=‘/tmp/pip-build-0mfmov8a/onnx/setup.py’;f=getattr(tokenize, ‘open’, open)( __file__);code=f.read().replace(‘rn’, ‘n’);f.close();exec(compile(code, __file__, ‘exec’))“ install --record /tmp/pip-fmzr5hzv-record/install-record.txt --single-version-externally-managed --compile --user --prefix=” 失败,错误代码 1 在 /tmp/pip-build-0mfmov8a/onnx / 解决方案: 试用安装依赖解决=》sudo apt-get install -y libprotobuf-dev protobuf-compiler python3-scipy sudo apt-get install libssl-dev libffi-dev python-dev build-essential libxml2-dev libxslt1- dev完成后,卸载(卸载)之前安装的库。 然后再重新安装:sudo pip3 install onnxoptimizer==0.1。0 3、p库提示错误没有解决方案(能安装,但安装能刷新):破解版本限制。 4、opencv- ip3:报错: 回溯(最后一次调用): 文件“《string》”,第 1 行,在 《module》 文件“/tmp/pip-build-ey0xc_0y/opencv-python/setup.py”,第 9 行,在 《module》 中 导入skbuild ModuleNotFoundError: No module named ‘skbuild’ Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-ey0xc_0y/opencv-python/ 解决:这里的skbuild全名为scikit_build,先安装这个库。 rknnkit2-*-cp36-cp36m-linux_x86_64.whl 安装,检查pip版本,否则可能没有版本。 pip3 --version 低(9或10) 升级pip pip3 install --upgrade pip 查看pip版本:pip 21.3.1 可以开始安装.whl文件了 安装完成requirement.txt和rknn_toolkit2-*-cp36-cp36m-linux_x86_64.whl之后,进入python shell测试 root@root:/$ 蟒蛇3 Python 3.6.9(默认,2021 年 12 月 8 日,21:08:43) Linux 上的 [GCC 8.4.0] 键入“帮助”、“版权”、“信用”或“许可证”以获取更多信息。 》》》 from rknn.api import RKNN ==》报错: ModuleNotFoundError: No module named ‘numpy.core._multiarray_umath’ ImportError: numpy.core.multiarray failed to import 以上异常是以下异常的直接原因: Traceback (最近一次调用最后): 文件“《frozen importlib._bootstrap》”,第 968 行,在 _find_and_load SystemError:《class ‘_frozen_importlib._ModuleLockManager’》 返回了带有错误集 RuntimeError 的结果: ImportError: numpy.core.umath 无法导入 ImportError: numpy.core.umath 无法导入 2021-12-17 09:13:32.275457: F tensorflow/python/lib/core/bfloat16.cc:675] 检查失败:PyBfloat16_Type .tp_base=nullptr 已放弃(核心已转储) =》解决:这是numpy版本与rknn当前不=检查,numpy版本 pip3 freeze | grep numpy1.16.6,则卸载重装 pip3 uninstall numpy pip3 install numpy==1.16.6 再次尝试用python导入rknn,应该就可以了。如果 在与PC相关的AIO-3568J NPU平台上测试 运行、部署AIO-3568J 环境:更新librknnrt.so及运行rknn_server --Linux PC端: adb push RKNN_SDK/Linux/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/ adb push RKNN_SDK/Linux/librknn_api/aarch64 /librknnrt.so /usr/lib/ adb push RKNNSDK/Linux/librknnapi/aarch64/librknn_api.so /usr/lib/ #板子的终端终端运行rknn_server chmod +x /usr/bin/rknn_server /usr/bin/rknn_server 2、然后在PC上修改examples/ tflite/mobilenet_v1/test.py文件,在其中添加目标平台 |+++++++++++++++++++++++++++++++++++| diff --git a/test.py b/test.py index 61ad668..51a01e2 100644 --- a/test.py +++ b/test.py @@ -62,7 +62,7 @@ if __name__ == ‘__main__’: |+++++++++++++++++++++++++++++++++++++| # 初始化运行环境 print(‘--》 初始化运行环境’) - ret = rknn.init_runtime() + ret = rknn.init_runtime(target=‘rk3568’) if ret != 0: print(‘初始化运行环境失败’ ) exit(ret) 3、PC端运行test.py (venv) firefly@T-chip:~/rknn-toolkit2-1.1.0b0/examples/tflite/mobilenet_v1$ python3 test.py 运行test.py会出现一些问题 1 、 Q:E build: ImportError: libprotobuf.so.10: cannot open shared object file: No such file or directory A:动态依赖库不存在,在/usr/lib/下找不到对应的依赖文件(.so)如果文件实际存在/lib/下,则如果自己添加usr/local/软连接到/lib/下即可,这样的文件实际不存在,可以自行安装 最新版本: 、编译安装解压、开始编译sudo apt install autoconf 。/autogen.sh 。/configure--prefix=/usrprotobuf #为了便于 进入目录管理二# -j4多核编译魔梯速度sudo make install三、建立软连接完成之后,动态库的安装位置在/usr/local/protobuf/lib/ sudo ln -s /usr/local/protobuf/lib/libprotobuf.so.30.0.1 /usr/lib/libprotobuf.so.30 2、 Q:E build: ImportError: /home/raysees/anaconda3/envs/rktool/ lib/python3.lib6/site-packages/rknn/api/lib/hardware/DOLPHIN/linux-x86_64/cp36/librknnc.so: undefined symbol: _ZNK6google8protobuf7Message9SpaceUsedEv A:(Ubuntu 20)暂时 可以解决问题 A:(Ubuntu 18)重装1系统后就没有出现问题,因为18自带的python环境是rknn-toolkit2/2系/这个的python3.6。 部署R模型到rk3566进行推演 自定义 脚本通过rknnSDK的程序编译脚本实现编译,可以通过各种模型的编译。以onnx下的YOLO模型 1、示例先修改这个文件: build- linux.sh:将把GCC_COMPILER修改为合适的交叉编译器,这里rk3568为aarch64-linux-gnu #for aarch64 GCC_COMPILER=aarch64-linux-gnu ‘rknn_yolov3_demo’可以替换为任意名称,这是编译后进行的程序名称。对,这只是一个名字,特别是这个字符串。 add_executable(rknn_yolov3_demo src/main.cc ) target_link_libraries(rknn_yolov3_demo “-Wl,--allow-shlib-Bundefined” ${RKNN_API_} ${OpenCV_LIBS} ) #和库 集(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov3_demo_${CMAKE_SYSTEM_NAME}) install(TARGETS rknn_yolov3_demo DESTINATION 。/) install(DIRECTORY model DESTINATION 。/) install(PROGRAMS ${RKNN_API_LIB} DESTINATION lib) install(PROGRAMS ${RKNN_RT_LIB } DESTINATION lib) 2、编写主程序main.cc 这是运行推演程序的入口,我们利用这个cpp文件来完成导入、导入模型、输入、输出、模型推演、以及演演结果数据处理等工作。 通用main.cc找到推演,提示opencv未完成。请将rknnSDK下的Linux放在build-linux.sh的。../。../路径下,即上两层目录父。 //includes #include 《stdio.h》 #include 《stdint.h》 #include 《stdlib .h》 #include 《fstream》 #include 《iostream》 #include 《sys/time.h》 #include 《string.h》 #include “opencv2/core/core.hpp” #include “opencv2/imgproc.hpp” # include “opencv2/imgcodecs.hpp” #include “rknn_api.h” #include 《chrono》 using namespace std; 使用命名空间简历; 使用命名空间计时; printf(“index=%d name=%s n_dims=%d dims=[%d %d %d %d] n_elems=%d size=%d fmt=%d type=%d qnt_type=%d fl=% d zp=%d scale=%fn”, attr-》index,attr-》name,attr-》n_dims,attr-》dims[0],attr-》dims[1],attr-》dims[ 2],attr-》dims[3], attr-》n_elems,attr-》size,0,attr-》type,attr-》qnt_type,attr-》fl,attr-》zp,attr-》scale); } //加载模型rknn static unsigned char* load_model(const char*filename,int* model_size){ FILE* fp = fopen(filename,“rb”); if(fp==nullptr){ printf(“foen %s fail n”,filename); 返回空值; } fseek(fp,0,SEEK_END); int model_len = ftell(fp); 无符号字符 * 模型 = (无符号字符 *)malloc(model_len); fseek(fp,0,SEEK_SET); if(model_len != fread(model,1,model_len,fp)){ printf(“fread %s failed n”,filename); 免费(模型); 返回空值; } *model_size = model_len; 如果(fp){ fclose(fp); } 返回模型; } int main(int argc, char** argv){ printf(“hello rknn”); 常量 int MODEL_IN_WIDTH = 640; 常量 int MODEL_IN_HEIGHT = 640; 常量 int MODEL_IN_CHANNELS = 3; rknn_context ctx;//rknn时间结构体,可以使用rknn模型的运行输出 诠释;// 记录API的运行结果,使用异常处理等 int model_len = 0; 无符号字符 * 模型; // 从需要处理外部图片nn的图片模型文件和。 constcharv* model_path = [1] const char * img_path = argv[2]; //载入图片文件 cv::Mat orig_img = imread(img_path , cv::IMREAD_COLOR); if(orig_img.empty()){ printf(“cv::imread %s failedn”,img_path); 返回-1; } cv::Mat img = orig_img.clone(); if(orig_img.cols != MODEL_IN_WIDTH || orig_img.rows != MODEL_IN_HEIGHT){ printf(“resize %d %d to %d %dn”,orig_img.cols,orig_img.rows,MODEL_IN_WIDTH,MODEL_IN_HEIGHT); cv::resize(orig_img,img,cv::Size(MODEL_IN_WIDTH,MODEL_IN_HEIGHT),(0,0),(0,0),cv::INTER_LINEAR); } //载入RKNN模型 model = load_model(model_path,&model_len); ret = rknn_init(&ctx,model,model_len,0&RKNN_FLAG_COLLECT_PERF_MASK,NULL); if(ret 《 0){ printf(“rknn_init failed !ret code:%dn”,ret); 返回-1; } //获取输入、输出信息 rknn_input_output_num io_num; ret = rknn_query(ctx,RKNN_QUERY_IN_OUT_NUM,&io_num,sizeof(io_num)); if(ret != RKNN_SUCC){ printf(“rknn_query get_in_out_num failed, ret code=%dn”,ret); 返回-1; } printf(“模型输入数量: %d, 输出数量: %d n”,io_num.n_input,io_num.n_output); // 获取输入张量, 》》 网络结构 printf(“输入张量:n”); rknn_tensor_attr input_attrs[io_num.n_input]; memset(input_attrs,0,sizeof(input_attrs)); for(int i = 0 ; i 《 io_num .n_input ; i++){ input_attrs .index = i; ret = rknn_query(ctx,RKNN_QUERY_INPUT_ATTR,&(input_attrs ),sizeof(rknn_tensor_attr)); if(ret != RKNN_SUCC){ printf(“rknn_query get_in failed !ret code : %dn”,ret); 返回-1; } printRKNNTensor(&(input_attrs)); } //获取输出tensor, 》》网络结构 printf(“output tensors:n”); rknn_tensor_attr output_attrs[io_num.n_output]; memset(output_attrs,0,sizeof(output_attrs)); for(int i = 0 ; i 《 io_num .n_output ; i++){ output_attrs.index = i; ret = rknn_query(ctx,RKNN_QUERY_OUTPUT_ATTR,&(output_attrs),sizeof(rknn_tensor_attr)); if(ret != RKNN_SUCC){ printf(“rknn_query get_in failed ! ret code : %dn”,ret); return -1; } printRKNNTensor(&(output_attrs)); } //设置输入值 rknn_input inputs[1]; memset(inputs,0,sizeof(inputs)); inputs[0].index = 0; inputs[0].type = RKNN_TENSOR_UINT8; inputs[0].size = img.cols * img.rows * img.channels(); inputs[0].fmt = RKNN_TENSOR_NHWC; inputs[0].buf = img.data; ret = rknn_inputs_set(ctx,io_num.n_input,inputs); if(ret 《 0){ printf(“rknn_input_set failed ! ret code:%dn”,ret); return -1; } //运行模型,跑模型 printf(“rknn run n”); ret = rknn_run(ctx,nullptr); if(ret 《 0){ printf(“rknn run failed ! ret code:%dn”,ret); return -1; } //模型跑完后,(计算完之后) //获取模型输出,tensor等 rknn_output outputs[1]; memset(outputs,0,sizeof(outputs)); outputs[0].want_float = 1; ret = rknn_outputs_get(ctx,1,outputs,NULL); if(ret 《0 ){ printf(“rknn_outputs_get failed! ret code=%dn”,ret); return -1; } printf(“######out : size:%d”,outputs[0].size); //统计模型运行时间 //释放rknn outputs rknn_outputs_release(ctx,1,outputs); //释放模型 if(ctx 》= 0){ rknn_destroy(ctx); } 如果(模型){ 免费(模型); } 返回 0; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
431 浏览 0 评论
524 浏览 1 评论
1789 浏览 1 评论
3043 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
3771 浏览 1 评论
OpenHarmony稳定性专项分享
12/12/2024, 11:00:00 AM 回顾干簧技术应用:汽车行业新视角
12/11/2024, 6:00:00 AM 回顾OpenHarmony Linux 6.6 内核升级移植分享
12/10/2024, 11:00:00 AM 回顾OpenHarmony性能优化分享
12/5/2024, 11:00:00 AM 回顾OpenHarmony轻量板级移植:STM32移植分享
11/28/2024, 11:00:00 AM 回顾0penHarmony板级移植:龙芯移植适配:DAYU400移植经验分享
11/21/2024, 11:00:00 AM 回顾开发者手机OH5.0切换实践分享
11/19/2024, 11:00:00 AM 回顾OpenHarmony板级移植:RK3568移植分享
11/14/2024, 11:00:00 AM 回顾数据智能系列讲座第4期:预训练的基础模型下的持续学习
10/30/2024, 12:00:00 PM 回顾2024开放原子开源生态大会——开鸿助力产业生态与人才培养分论坛
9/26/2024, 5:30:00 AM 回顾2024开放原子开源生态大会——OpenHarmony生态主题演讲
9/26/2024, 2:00:00 AM 回顾数据智能系列讲座第3期—交流式学习:神经网络的精细与或逻辑与人类认知的对齐
9/25/2024, 12:00:00 PM 回顾2024开放原子开源生态大会——开幕式
9/25/2024, 1:30:00 AM 回顾2024 RISC-V 中国峰会 Day 3 主会场A
8/23/2024, 1:00:00 AM 回顾2024 RISC-V 中国峰会 Day 3 主会场B
8/23/2024, 1:00:00 AM 回顾2024 RISC-V 中国峰会 Day 2 主会场A
8/22/2024, 1:00:00 AM 回顾2024 RISC-V 中国峰会 Day 2 主会场B
8/22/2024, 1:00:00 AM 回顾赛昉科技全场景RISC-V解决方案交流会
8/22/2024, 1:30:00 AM 回顾2024 RISC-V 中国峰会 Day 1 主会场
8/21/2024, 1:00:00 AM 回顾OpenHarmony标准系统: 树莓派移植①
12/19/2024, 11:00:00 AM报名中小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 12:29 , Processed in 0.664001 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号
|