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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/396461.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品&#xff1f; b端产品是指面向企业或组织的经营管理问题&#xff0c;旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型&#xff0c;可以为企业带来深…

Parallels Desktop 可以做什么?

现在 Mac 电脑在全球越来越火&#xff0c;但是很多时候我们还是需要用win上的老物件&#xff0c;也就导致越来越多的用户都想在 Mac 上跑 Windows 软件和游戏。虽说 MacOS 本身有不少厉害的应用程序&#xff0c;可有些 Windows 专用的软件和游戏在 MacOS 里还是没法直接跑。 黑…

视觉SLAM ch3—三维空间的刚体运动

如果对于某些线性代数的知识不太牢固&#xff0c;可以看一下我的另一篇博客&#xff0c;写了一些基础知识并推荐了一些视频。 旋转矩阵 单元所需的线代基础知识https://blog.csdn.net/Johaden/article/details/141023668 一、旋转矩阵 1.点、向量、坐标系 在数学中&…

线程池总结

一.线程池的概念 线程池是一种管理和复用线程的设计模式&#xff0c;主要用于提高多线程编程中的效率。它通过维护一组线程来执行多个任务&#xff0c;从而避免频繁地创建和销毁线程所带来的性能开销。 线程池里取线程比从系统中申请线程更高效的原因&#xff0c;也是因为线程池…

基于深度学习的太阳暗条检测(2020年以来)

A universal method for solar filament detection from Hα observations using semi-supervised deep learning A&A, 686, A213 (2024) A universal method for solar filament detection from Hα observations using semi-supervised deep learning (aanda.org) ABS…

七夕特辑:用Ta的照片定制专属二维码,传递独一无二的爱

七夕火热进行中&#xff0c;有人还在纠结送啥礼物合适么&#xff1f; 围观可能是“全网第一人”的技术助力七夕之特别礼物 &#xff01;&#xff01;&#xff01; 欢迎扫码关注围观。 七夕特辑&#xff1a;扫码解锁爱情故事&#xff0c;让爱穿越时空 七夕特辑&#xff1a;用…

猫头虎推荐:人类通向AGI之路 史上最重磅的20篇论文你值得学习

猫头虎推荐&#xff1a;人类通向AGI之路 史上最重磅的20篇论文你值得学习 &#x1f44b; 大家好&#xff0c;我是猫头虎&#xff0c;今天我们为大家带来一篇穿越时空的AI研究大作&#xff01;这篇文章将带你领略过去15年推动人工智能&#xff08;AI&#xff09;发展的20篇经典…

【驱动篇】龙芯LS2K0300之RTC设备驱动

实验介绍 本次实验是关于pcf8563 RTC模块的驱动移植&#xff0c;大致流程如下&#xff1a; 注册i2c设备驱动编写RTC设备驱动将device和driver驱动部署到开发板并装载&#xff0c;通过hwclock命令来测试 模块连接 VCC接Pin2&#xff0c;GND接Pin1&#xff0c;SCL接Pin16&…

比OpenAI的Whisper快50%,最新开源语音模型

生成式AI初创公司aiOla在官网开源了最新语音模型Whisper-Medusa&#xff0c;推理效率比OpenAI开源的Whisper快50%。 aiOla在Whisper的架构之上进行了修改采用了“多头注意力”机制的并行计算方法&#xff0c;允许模型在每个推理步骤中预测多个token&#xff0c;同时不会损失性…

略谈set与map的pair封装与进入哈希

引子&#xff1a;之前我们讲了红黑树的自实现&#xff0c;与小小的接口实现&#xff0c;那set与map的pair封装是如何实现的呢&#xff1f;&#xff0c;今天我们来一探究竟&#xff0c;而且我们也要进入新章节--哈希 对于operator--()的封装&#xff1a; 注意&#xff1a;牢记思…

一款.NET开发的AI无损放大工具

一款.NET开发的AI无损放大工具 思维导航 前言项目功能支持语言系统要求项目源代码项目运行小图片进行无损放大项目源码地址优秀项目和框架精选 前言 今天大姚给大家分享一款由.NET开源&#xff08;GPL-3.0 license&#xff09;、基于腾讯ARC Lab提供的Real-ESRGAN模型开发的A…

Linux知识复习第2期

RHCE 远程登录服务-CSDN博客 Linux 用户和组管理_linux用户和组的管理-CSDN博客 Linux 文件权限详解-CSDN博客 目录 1、sshd 免密登录 (1)纯净实验环境 (2)生成密钥 (3)上锁 2、用户管理 (1)添加新用户 (2)删除用户 (3)修改用户信息 (4)为用户账号设…

【Linux:环境变量】

目录 命令行参数&#xff1a; 环境变量&#xff1a; 命令行参数&#xff1a; argv是一个char*类型的数组&#xff0c;里面存放着字符、字符串的指针地址&#xff0c;且该数组必定是以NULL结尾 命令行中启动的进程都是Bash的子进程&#xff0c;命令行参数的存在本质上就是通过…

[qt] 多线程应用01

源码: 点击此处 一 多线程应用 实现一个多线程的网络时间服务器&#xff0c;利用多线程功能的技术&#xff0c;为每个客户端返回当前的时间&#xff0c;并且在返回后自动退出。同时&#xff0c;服务器也会记录当前受到的请求次数。其实这相当于一个ntp时间服务器 二 服务器实…

职场中,这些事情是禁忌

越级打报告 身处职场&#xff0c;一定要清晰地明确自己所处的位置。要了解部门的运营架构和人事结构&#xff0c;这是身为职场人对自己的最基本的要求。以此确保一旦工作中出现什么问题时&#xff0c;你能找到相应的负责人。但是这里一定要注意&#xff0c;千万不要故作聪明越…

【数据结构】顺序表实现

0. 前言 小伙伴们大家好&#xff0c;从今天开始&#xff0c;我们就开始学习《数据结构》这门课程~ 首先想给大家讲讲什么是数据结构&#xff1f; 0.1 数据结构是什么&#xff1f; 数据结构是由“数据”和“结构”两词组合⽽来。 什么是数据&#xff1f; 比如常⻅的数值1、…

【Material-UI】Button 中的点击事件处理(Handling clicks)详解

文章目录 一、点击事件处理基础1. 基本用法2. 事件处理器的传递 二、实际应用中的注意事项1. 事件处理逻辑的优化2. 避免过多的状态更新3. 使用合适的事件类型 三、关于文档中未提及的原生属性四、最佳实践1. 无障碍性2. 视觉反馈3. 防止重复点击 五、总结 在现代前端开发中&am…

【竞品分析】竞品分析的步骤

在产品经理的工作实际中,对产品的设计离不开竞品分析。 竞品分析可以辅助我们进行可行性评估、制定产品战略、优化产品迭代等。 可以说,竞品分析是贯穿产品生命周期的,是产品经理的必备专业技能。 个人认为&#xff0c;做自己家的产品是单一的视角&#xff0c;多做竞品分析会…

【微信小程序开发】——奶茶点餐小程序的制作(二)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

HTML 元素提供的附加信息--属性 ——WEB开发系列03

HTML 属性是指用于描述 HTML 元素的额外信息&#xff0c;它们提供了元素的特定配置或行为&#xff0c;属性通常包含在 HTML 元素的开始标签中。 元素也可以拥有属性&#xff0c;属性看起来像这样&#xff1a; 属性是元素的附加信息&#xff0c;它们不会显示在实际内容中。在前述…