深度学习模型部署RV1126准备工作(二)——初学者如何快速上手训练所需模型

模型部署RV11126的流程大致为:训练得到.pth模型、pth2onnx、onnx2rknn,最后在边缘计算设备上完成部署,本文旨在为零基础的初学者,训练所需模型提供一些借鉴。

一、所需条件

有以下两个条件之一即可:

  • GPU:pc自带
  • CPU:显卡(实验室提供或自购)

二、代码检索

开源代码,可以在github上进行检索(最好打开vpn),网站如下:
GitHub · Build and ship software on a single, collaborative platform · GitHub
在搜索框中,搜索想要训练的代码,就会出现各种相关项目:

下载需要的项目后,在pycharm、vscode自己喜欢的ide中打开,进行训练。

三、训练步骤

1、在pc端windows系统中,完成对目标网络的环境配置即训练

以手写数字识别为例,参考:

基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明)-优快云博客

(1)安装anaconda3,并创建环境:

打开cmd(命令提示符)conda create -n 设置的环境名字 python=X.X

conda create -n hand_written python=3.8         //创建环境
activate hand_written        //进入激活的环境
conda list                     //查看安装的文件信息
deactivate                   //退出环境

(2)下载相应的下载相应的pytorch,cuda与cudnn版本(本项目不需要cuda、cudnn)

下载链接:

Start Locally | PyTorch

查询cuda对应版本:

如何判断自己的电脑里有没有cuda以及查看cuda版本-优快云博客

pytorch下载链接:

Previous PyTorch Versions | PyTorch

查看自己显卡适合的cuda与cudnn版本并下载:

GPU驱动、CUDA和cuDNN之间的版本匹配与下载_cudacudnn配对-优快云博客

(3)下载手写数字识别的代码以及数据集等,放置于相应文件夹中

下载链接:

Hurri-cane/Hand_wrtten at master (github.com)

2、下载pycharm,打开下载好的文件包
下载链接:

Download PyCharm: The Python IDE for data science and web development by JetBrains

新建项目,打开下载的对应文件:

选择配置好的环境,然后创建:

运行hand_written_train.py,在此过程中在终端用pip install命令配置好相关文件并修改数据集路径,最终进行训练:(main_pthoto.py、predict.py、main.py等文件中的路径也需要修改)

四、pth文件

.pth文件为训练之后模型的保存形式之一,也可以保存为.pth.tar,代码示例片段如下:

个人建议保存为pth即可,便后续onnx的转化。

### 部署深度强化学习模型RV1126平台 #### RV1126硬件特性概述 RV1126是一款专为低功耗、高性能计算设计的嵌入式处理器,适用于边缘计算场景下的多种人工智能应用。该芯片集成了神经网络处理单元(NPU),能够高效支持卷积神经网络(CNN)和其他类型的机器学习模型推理。 #### 准备工作环境 为了顺利部署深度强化学习模型RV1126设备,在开发主机上需安装必要的软件包和配置相应的编译工具链。具体操作如下: - 安装交叉编译器GCC ARM Embedded Toolchain用于构建适合ARM架构的目标文件; - 下载并设置好RV1126 SDK,其中包含了针对特定硬件优化过的库函数以及示例程序; - 使用Python虚拟环境隔离项目依赖项,并通过pip命令安装额外所需的第三方模块如TensorFlow Lite等轻量化框架[^1]; ```bash # 创建并激活新的Python虚拟环境 python3 -m venv env_rv1126 source env_rv1126/bin/activate # 更新pip版本 pip install --upgrade pip setuptools wheel # 安装tensorflow-lite解释器以及其他辅助工具 pip install tflite-runtime numpy opencv-python matplotlib scikit-image ``` #### 转换训练好的模型 由于原始训练得到的是基于GPU服务器上的全精度浮点数表示形式(.h5,.pb),而RV1126内部NPU仅能识别整型或混合精度格式(TFLITE,ONNX).因此需要借助官方提供的转换脚本将源模型转化为适配目标平台的数据结构. 对于已经完成离线训练过程获得的最佳参数组合checkpoint file (.pth/.pt): ```python import torch from torchvision import models model = models.resnet18(pretrained=False) model.load_state_dict(torch.load('best_model.pth')) dummy_input = torch.randn(1, 3, 224, 224) torch.onnx.export(model,dummy_input,"resnet18.onnx",opset_version=11, do_constant_folding=True,input_names=['input'],output_names=['output']) ``` 接着利用`onnx-simplifier`, `tvm.relay.frontend.from_onnx()` 或者其他开源项目进一步简化Onnx graph定义,最终导出成TFlite FlatBuffer进制流供后续加载解析: ```shell !pip install onnxsim==0.3.9 !python -m onnxsim resnet18.onnx simplified_resnet18.onnx ``` 最后一步则是调用`tflite_convert`接口实现从Simplified Onnx Model向Target Format TFlite File转变: ```shell tflite_convert \ --saved_model_dir=simplified_resnet18.onnx \ --output_file=resnet18.tflite \ --input_shapes=1,3,224,224 \ --inference_type=FLOAT \ --input_arrays=input \ --output_arrays=output ``` #### 编写C++代码集成TFLite Interpreter API 当准备好经过量化的Lite版Model之后就可以着手编写实际运行于裸机端的应用逻辑了。这里给出一段简单的模板作为参考说明如何初始化解释器实例、分配张量内存空间并将输入数据填充进去等待预测结果返回。 ```cpp #include <iostream> #include "tensorflow/lite/interpreter.h" #include "tensorflow/lite/kernels/register.h" #include "tensorflow/lite/model.h" int main() { // 加载已保存下来的Flatbuffer Buffer对象 std::unique_ptr<tflite::FlatBufferModel> model = tflite::FlatBufferModel::BuildFromFile("resnet18.tflite"); if (!model){ fprintf(stderr,"Failed to mmap model\n"); return EXIT_FAILURE; } // 构建默认Op Resolver来注册内置算子集合 tflite::ops::builtin::BuiltinOpResolver resolver; // 新建Interpreter Builder负责组装整个Graph拓扑关系图谱 std::unique_ptr<tflite::Interpreter> interpreter; auto builder_status=model->NewInterpreter(&resolver,&interpreter); if(!builder_status.ok()){ printf("Failed to construct interpreter:%s\n", builder_status.message().c_str()); return EXIT_FAILURE; } // 设置Input Tensor Shape Info & Allocate Memory Space Automatically TfLiteStatus allocate_tensors_status=interpreter->AllocateTensors(); if (allocate_tensors_status != kTfLiteOk){ printf("Failed to allocate tensors.\n"); return EXIT_FAILURE; } float* input_tensor_data= interpreter->typed_input_tensor<float>(0); /* 填充具体的像素值 */ for(int i=0;i<224 * 224 * 3;++i){ input_tensor_data[i]=/* ... */; } // 执行前馈传播运算获取Output Feature Maps interpreter->Invoke(); const float* output_tensor_data= interpreter->typed_output_tensor<float>(0); /* 处理输出层产生的分类得分 */ } ``` #### 测试验证效果 上传上述工程产物至板级资源管理器后执行编译链接流程生成可执行映像文件`.elf`。连接串口调试助手监视日志打印情况确认无误后再断开电源重启进入正式测试环节观察实时性能指标变化趋势是否满足预期要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值