当前位置: 首页 > news >正文

OrangePi AIpro学习4 —— 昇腾AI模型应用

目录

一、ATC模型转换

1.1 模型

1.2 ATC工具

1.3 实操模型转换

1.4 使用ATC工具时的一些关键注意事项

1.5 ATC模型转换命令举例

二、运行昇腾AI模型应用样仓程序

2.1 程序目录

2.2 下载模型和模型转换

2.3 下载图片和编译程序

2.4 解决报错

2.5 运行程序

三、运行其他程序

3.1 sampleCarColor

3.2 sampleCrowdCounting

3.3 sampleLlama

3.4 sampleResnetAIPP

3.5 sampleResnetDVPP

3.6 sampleResnetRtsp

3.7 sampleYOLOV7MultiInput

3.8 sampleYOLOV7NMSONNX


前言

昇腾AI模型应用,解释这个词汇就是,别人现在训练好了一个模型,我们利用这个模型对原始数据进行识别、预测。例如别人训练好了识别动物种类的模型,我们将一张图片传入进入,这个模型就能给我们传出图片的属于狗、猫还是兔子

一、ATC模型转换

第一章是讲理论的,看的浑身难受的小伙伴可以先从第二章开始看

1.1 模型

首先经过TensorFlow、Pytrouch训练之后会得到一个模型,这个模型类似于一个函数,有输出和输入。

我们输入图片,动物分类模型(函数)会输出一个动物类别给我们,我们通过这个动物类别就能找到图片是属于哪一个动物

我们可以下载一个.onnx后缀的模型文件,进入网站中查看:

Netron

模型要求输入一个下面这样格式的Tenser(矩阵)。下面0011位置或其他位置里面的数据就是该位置图片像素值,模型要求这个像素值的类型是float32类型的数据

模型跟函数不同的是,模型的输入输出都是矩阵,方便NPU运算。下面是模型输出的Tenser(矩阵):

1.2 ATC工具

ATC工具用于将Caffe、TensorFlow、ONNX、MindSpore深度学习框架训练出来的模型转换为昇腾生态能看懂的模型格式

(1) Caffe生成 .om需要两个模型文件:.prototxt (Caffe网络模型的网络结构)、.caffemodel (Caffe网络模型的权重文件);

(2) TensorFlow生成 .om需要模型文件 .pb (包含计算图和权重),如果是 .index和 .meta两个文件,则需要使用TensorFlow的私有api来把这两个文件合并成 .pb。

(3) ONNX代表的是pytorch生成的模型。pytorch能训练出 .pth和 .tar,pytorch可以用 .pth和 .tar来生成 .onnx,这是ATC需要的格式

(4) 华为自家的MindSpore框架训练出来的模型是 .air后缀的文件,另一种训练出来的格式后缀为 .mindir,.air可以转成 .om做离线推理 .mindir只能使用MindSpore做在线推理

1.3 实操模型转换

1. 软件安装

MindStudio下载:

MindStudio全流程开发工具链-特性-课程-案例-昇腾社区 (hiascend.com)

解压 

启动

进入界面:

进入界面后,远程工具好像是有点不堪重负,于是换成使用下面的工具进行远程:

【远程桌面】nomachine下载安装使用教程、zerotier下载安装使用教程超详细-CSDN博客

但是我发现两个工具都很差劲,有能接屏幕的小伙伴可以接一下屏幕看一下,或者在自己的电脑上安装这个软件,模型转换完成后上传到虚拟机中

这里学习的部分可以去看老师的视频了:

昇腾CANN系列教程——ATC模型转换_哔哩哔哩_bilibili

2. 这是我做的笔记:

打开软件后点击下面的选项

弹出了下面的小窗口,这个小窗口就可以配置模型转换的各种参数。首先是模型文件.prototxt和.caffemodel,模型文件可以去这里下载:ResNet-50 prototxt_resnet50 prototxt-CSDN博客

模型名就是模型文件去除后缀名后的名字。香橙派昇腾芯片的SoC Version是Ascend310B4。下面的三个输入格式是根据模型要求的输入来配置的,具体怎么看模型要求输入格式,我后面模型训练的课程会再介绍

点击下一步后。下图是高级配置,如果点击了,后续会在模型上就把数据预处理做了

 下图是软件根据你前面的配置,生成出来的执行语句,这个语句会再Linux中执行,实现模型转换

点击Finish开始执行,程序开始运行,得到下面结果: 

经过上面这么一通操作,在/home/ascend/modelzoo/resnet50/Ascend310目录下生成了一个resnet50.om的模型文件,这个就是昇腾生态需要的模型文件

1.4 使用ATC工具时的一些关键注意事项

 ● 支持原始框架类型为Caffe、TensorFlow、MindSpere、QNNX的模型转换;

(1) 当原始框架类型为Caffe、MindSpore、ONNX时,输入数据类型为FP32 (单精度浮点)、FP16 (半精度浮点) (通过设置入参 —— input_fp16_nodes实现,MindSpore框架不支持该参数)、UINT8 (通过配置数据预处理实现);

(2) 当原始框架类型为TensorFlow时,输入数据类型为FP16、FP32、 UINT8、 INT32、BOOL (原始框架类型为TensorFlow时,不支持输入输出数据类型为INT64,需要用户自行将INT64的数据类型修改为INT32类型)。

● 当原始框架类型为Caffe时,模型文件 (.prototxt) 和权重文件 (.caffemodel) 的op name、op type必须保持名称一致 (包括大小写)。

● 当原始框架类型为TensorFlow时,只支持FrozenGraphDef格式。

● 不支持动态shape的输入,例如:NHWC输入为[?,?,?,3]多个维度可任意指定数值。模型转换时需指定固定数值

● 对于Caffe框架网络模型:输入数据最大支持四维,转维算子 (reshape、expanddim等) 不能输出五维。

● 模型中的所有层算子除const (常量) 算子外,输入和输出需要满足dim!=0 (维度!=0)。

● 只支持算子规格参考中的算子,并需满足算子限制条件。

1.5 ATC模型转换命令举例

--model

原始网络模型、网络结构

--weiget

权重文件位置

--output

模型转换完成之后,输出到哪里去

--soc_version

模型转换完成之后,是要跑在那一种型号处理器上

--input_shape

指定输入形状,输入节点的名字:输入的形状

--framework

原始网络模型框架类型,0表示Caffe框架

上面四个模型转换过程最大的不同的地方是下图红色的部分:

二、运行昇腾AI模型应用样仓程序

2.1 程序目录

inference/modelInference · Ascend/samples - 码云 - 开源中国 (gitee.com)

下面是以运行sampleResnetQuickStart程序为例子,讲解一下使用样仓程序的流程

2.2 下载模型和模型转换

cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/model 

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx

atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224"  --soc_version=Ascend310B4

注意:第三步获取到的昇腾芯片型号,要应用在第四步模型转换过程中的--soc_version=Ascend310B4,这个参数中,一定要修改,否则后面推理的时候会出错

2.3 下载图片和编译程序

cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/data 

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg

cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/scripts 

bash sample_build.sh

2.4 解决报错

报错内容1:报错找不到opencv2

解决报错:把opencv2拷贝到系统目录下:

mv /usr/include/opencv4/opencv2 /usr/include/opencv2

rm -rf opencv4

报错内容2:找不到ascendcl动态库

解决报错:把ascendcl动态库添加到cmake查找路径中

env发现无输出,使用find查找动态库的位置

然后根据cmake编写的内容修改cmake中的路径,CMAKE中,如果没有定义环境变量就用我们填入的内容,很显然没有定义,所以使用我们刚刚填写的地址

2.5 运行程序

bash sample_run.sh

这个程序成功的给狗狗分类了

三、运行其他程序

运行其他程序和sampleResnetQuickStart类似,下面只说不同的点

3.1 sampleCarColor

问题1

报错和解决方法:

error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope_‘cvloadimage’ was not declared in this scope-CSDN博客

问题2:又提示下面这个错误了:

这次编辑一下启动配置文件:vim ~/.bashrc 

source ~/.bashrc

问题3:程序运行没有结果,经过检查是例程是错的,我正在尝试修改

3.2 sampleCrowdCounting

这个程序的库函数有问题,修改库函数jpegd的这里,如果是Ascend310B4芯片,就让它宽度按照64字节对齐

同时修改函数jpegd下面return出去的图片宽高

3.3 sampleLlama

1. 安装transformers

下载transformers-4.29.2包

wget https://codeload.github.com/huggingface/transformers/zip/refs/tags/v4.29.2

unzip v4.29.2

pip3 install SentencePiece

pip3 install -e transformers-4.29.2

后续两个命令我都执行不了了,我不太会装这个transformers,有知道怎么装的兄弟可以在评论区说一声

2. 下载数据和模型

cd $HOME/samples/inference/modelInference/sampleLlama

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/llama_weight/llama_weight.zip --no-check-certificate

unzip llama_weight.zip

mkdir data & cd data

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/llama_weight/data.zip --no-check-certificate

unzip data.zip

3. 运行程序

cd $HOME/samples/inference/modelInference/sampleLlama/scripts

export ASCEND_CUSTOM_PATH=/usr/local/Ascend/ascend-toolkit/latest

bash run_llama.sh

因为前面transformers没有安装程序,最后程序一定是会报错的,这一块先跳过,我研究一下再修改

3.4 sampleResnetAIPP

● 注意不要使用下面两句话添加环境变量,因为我们前面已经设置好了

export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

● 报错添加头文件#include <opencv2/imgproc/types_c.h>

python版本代码需要修改一下.sh里面的命令

3.5 sampleResnetDVPP

运行下面python程序的时候提示缺少acllite_imageproc这个包

经过查找,发现acl封装的库函数是在/root/samples/python/common/acllite目录下,将这个目录配置到环境变量中:vim ~/.bashrc

然后保存一下:source ~/.bashrc

3.6 sampleResnetRtsp

1.给程序提供视频流

cd /

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleResnetRtsp/live.2023.05.10.tar.gz --no-check-certificate

tar -zxvf live.2023.05.10.tar.gz

cd ./live

./genMakefiles linux

make -j8

cd /live/testProgs

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleResnetRtsp/test.264 --no-check-certificate

./testOnDemandRTSPServer

让程序能从下面的地址获取视频一帧一帧的内容:

上面的程序视频流一直开着,我们用vscode进入程序执行

3.7 sampleYOLOV7MultiInput

需要安装json解析库:apt install libx11-dev

3.8 sampleYOLOV7NMSONNX

路径不存在,然后需要修改程序中的文件名

这边报错,暂时先不排查原因了(这两天看的头晕,后面有机会再排查一下)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码随想录算法训练营Day33 | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯
  • C++——模板进阶
  • 卷积神经网络 - 结构化输出篇
  • 【Linux】编译器gcc/g++ 、程序翻译过程、动静态库
  • springboot引入redis
  • UML建模-测试用例
  • c++的异常处理机制(try、catch、throw)
  • PDF——分割pdf的10个工具
  • 基于STC89C52单片机的U盘设计
  • SVN工作原理和使用示例
  • conda pack迁移环境
  • leetcode-121-买卖股票的最佳时机
  • Java数组1
  • 数据库篇--八股文学习第十七天| 什么是慢查询?原因是什么?可以怎么优化?;undo log、redo log、binlog 有什么用?
  • 笔记:简单介绍WPF中RenderTransform,LayoutTransform, VisualTransform区别
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Android Volley源码解析
  • Codepen 每日精选(2018-3-25)
  • ECS应用管理最佳实践
  • iOS编译提示和导航提示
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • PHP 7 修改了什么呢 -- 2
  • python docx文档转html页面
  • scrapy学习之路4(itemloder的使用)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue学习第二天
  • 创建一个Struts2项目maven 方式
  • 记一次用 NodeJs 实现模拟登录的思路
  • 简单数学运算程序(不定期更新)
  • 前端面试之CSS3新特性
  • 想写好前端,先练好内功
  • 正则学习笔记
  • 正则与JS中的正则
  • 终端用户监控:真实用户监控还是模拟监控?
  • 走向全栈之MongoDB的使用
  • nb
  • # 数仓建模:如何构建主题宽表模型?
  • (1)Hilt的基本概念和使用
  • (4)(4.6) Triducer
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (笔记)M1使用hombrew安装qemu
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (小白学Java)Java简介和基本配置