边缘计算:万字长文详解高通SNPE inception_v3推理实战

news2024/12/22 16:51:32

本文主要讲解利用高通SNPE进行神经网络推理,主要参考:

上手SNPE-推理inception_v3 - 知乎

文中是容器做的,在conda环境下做一样的,没问题,已跑通。

在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch

上面的帖子主要是介绍如何安装tensorflow-gpu对应的cuda 和 cudnn版本

在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch_conda安装cuda_溯水襄陵_的博客-CSDN博客

主要步骤:

一、SNPE服务器环境部署 

二、tensorflow pb模型转化为dlc模型

三、服务器端利用SNPE推理

详细步骤前先说个疑问:

熟悉python的同学都喜欢利用conda建立虚拟环境,高通SNPE需要在虚拟环境中安装吗?说说我的理解,因为SNPE依赖于python的很多包,所以大体步骤可以先建立虚拟环境,然后下载高通SNPE,然后安装系统依赖和python依赖。

下面正式开始步骤:

使用高通SNPE 1.52.0

一、SNPE服务器环境部署 

结合conda 环境使用,因为使用不同的python版本

本文安装snpe版本:1.52.0

1、预备动作:安装python虚拟环境,mysnpe,python版本为3.6(基于snpe的版本对应)

2、SNPE SDK下载链接:

https://developer.qualcomm.com/downloads/qualcomm-neural-processing-sdk-ai-v1520

需要注册才可以正常下载,下载完成后为.zip文件,snpe-1.52.0.zip

利用MobaXterm工具(只要能连接服务器即可),将压缩包上传到服务器指定目录,我的目录:/home/winner/workspace/tutor,将snpe-1.52.0.zip上传至该目录,解压zip包,生成snpe-1.52.0.2724文件夹。

3、

进入该目录,执行source bin/dependencies.sh命令,检查安装依赖包是否安装,如果缺少安装即可,成功安装后如下图,有些warning,不处理好像没啥问题;

执行source bin/check_python_depends.sh命令,检查python依赖包是否安装完整,安装完成后如下图,有些warning,不处理好像没啥问题;

4、安装tensorflow-gpu 2.3版本

参考:

在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch_conda安装cuda_溯水襄陵_的博客-CSDN博客

此处注意与snpe版本对应安装,此处是对应1.52.0版本

在mysnpe环境下安装

pip install tensorflow-gpu==2.3

conda install cudatoolkit=10.1

(此处查看硬件是否支持,查看版本是否存在)

硬件是否支持:

执行nvidia-smi命令:

查看版本是否存在:

conda search cudatoolkit

conda install cudatoolkit=10.1

安装成功后如下界面

conda search cudnn

conda install cudnn=7.6

安装成功后如下界面

5、添加环境变量

添加SNPE_ROOT环境变量,

执行命令:

vim ~/.bashrc

在文件末尾添加:

export SNPE_ROOT=/home/winner/workspace/tutor/snpe-1.52.0.2724

export TENSORFLOW_HOME=/home/winner/anaconda3/envs/mysnpe/lib/python3.6/site-packages/tensorflow/

此处在文件末尾添加如下指令,可在新的shell窗口启动时自动加载执行:

source /home/winner/workspace/tutor/snpe-1.52.0.2724/bin/envsetup.sh -t /home/winner/anaconda3/envs/mysnpe/lib/python3.6/site-packages/tensorflow/

其中:/home/winner/anaconda3/envs/mysnpe/lib/python3.6/site-packages/tensorflow/这个是tensorflow目录,可用命令:

pip show -f tensorflow-gpu | grep Location

/home/winner/workspace/tutor/snpe-1.52.0.2724/bin/envsetup.sh这个是文件envsetup.sh的绝对目录

6、测试是否安装成功

执行以下命令,显示如下图所示,则为成功:

snpe-tensorflow-to-dlc -h

上面完成表示已成功部署安装,以下是模型下载转化推理部分。

二、tensorflow pb模型转化为dlc模型

7、pb模型下载

新建空目录,inceptionv3

进入该目录,依次执行以下3条命令:

​
wget https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz

tar -zxvf inception_v3_2016_08_28_frozen.pb.tar.gz

mv inception_v3_2016_08_28_frozen.pb inception_v3.pb

​

8、pd转化为dlc格式

snpe-tensorflow-to-dlc -i inception_v3.pb -d input 1,299,299,3 --out_node InceptionV3/Predictions/Reshape_1

信息较长,截图有部分省略,显示如下界面则为转化成功:

……

执行下述命令,可以看到,dlc文件已经成功生成:

ls -al

三、 服务器端利用SNPE推理

9、准备input数据 和 验证脚本,测试在服务器端是否可以用SNPE进行推理

依次执行以下3条指令:

python3 $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a . -d

cp $SNPE_ROOT/models/inception_v3/data . -r

cp $SNPE_ROOT/models/inception_v3/scripts/show_inceptionv3_classifications.py .

执行ls -al命令:

10、在当前Ubuntu 环境下用SNPE推理inception_v3

执行以下命令查看版本:

snpe-net-run –version

执行以下命令:

snpe-net-run --container inception_v3.dlc --input_list data/cropped/raw_list.txt

执行:

ls output -la

11、查看推理结果

python show_inceptionv3_classifications.py -i data/cropped/raw_list.txt -o output/ -l imagenet_slim_labels.txt

本文到此结束,主要知识点归纳:

  • SNPE的安装;
  • snpe-tensorflow-to-dlc 模型转化工具的使用;
  • snpe-net-run 在Ubuntu环境下的inceptionv3模型是推理。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法系列之单链表

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 这里写目录标题test.hSList.h注意事项一级指针与二级指针的使用assert的使用空…

内大892复试真题19年

内大892复试真题19年 1. 统计低于平均分的人数2. 输出数组中最大值3. 一元二次方程求根4. 字符串数组平移(反转法)5. 矩阵乘法(分治+strassen思想)1. 统计低于平均分的人数 问题 代码 #include <iostream>using namespace std;// 函数声明 double avgFunc

0098 Mysql01

1.登录Mysql mysql -uroot -p密码 2.Mysql常用命令 退出:exit 查看mysql有哪些数据库&#xff1a;show databases;(以分号结尾) 选择使用某个数据库&#xff1a;use sys; (表示正在使用一个名叫sys得数据库) 创建数据库&#xff1a;create database bjpowernode; 查看某个数…

FFmpeg入门 - 格式转换

1、音频分⽚(plane)与打包(packed)解码出来的AVFrame,它的data字段放的是视频像素数据或者音频的PCM裸流数据,linesize字段放的是对齐后的画面行长度或者音频的分片长度:/*** For video, size in bytes of each picture line.* For audio, size in bytes of each plane.** For …

Python3 入门教程||Python3 条件控制||Python3 循环

Python3 条件控制 if语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 Python 中 if 语句的一般形式如下所示&#xff1a; if condition_1:statement_block_1 流程图如下所示&#xff1a; 这种if语句只有在符合条件的时候才会执行代…

华大Flash檫写导致重启异常问题

一、华大Flash写入注意事项由Flash操作说明我们可以看出重要一点&#xff0c;就是檫写Flash函数地址需要定义在32K之前&#xff08;即0x8000之前&#xff09;&#xff0c;否则将写入失败。二、先上的错误的源代码这个代码是我应用中导致硬件卡死重启的&#xff0c;其实也不算错…

FreeSWITCH 呼入系统的简要设计

文章目录1. 呼入处理方案2. 细节处理1. a-leg 的拨号计划2. originate 呼叫坐席1. 呼入处理方案 使用 FreeSWICTH 的 ESL 模块&#xff0c;一个简单的呼入处理时序如下图所示&#xff0c;关键步骤做如下补充: 用户呼入到 FreeSWITCH 实例&#xff0c;a-leg 创建FreeSWITCH 根据…

DC真实数据都有哪些?Filecoin为DC数据存储的解决方案又是什么?

对于生活在数字时代的我们而言&#xff0c;数据或许就和平日呼吸的空气一样&#xff0c;已经不需要我们再去思考其概念。我们的日常生活中无时无刻都有数据的身影&#xff0c;日常的购物消费、出行、学习、记录&#xff0c;当我们每天生活有数字化加持的小区里&#xff0c;工作…

网上图书资料管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;Internet带给我们的不仅是无穷的信息&#xff0c;更为我们带来了很多的便利。在这个科技高速发展的时代&#xff0c;网络应用十分广泛&#xff0c;所以许多人愿意通过网络来使他们的生活变得更加的方便。网上图书资料管理系统的出现…

Spring Cloud(微服务)学习篇(五)

Spring Cloud(微服务)学习篇(五) 1 nacos配置文件的读取 1.1 访问localhost:8848/index.html并输入账户密码后进入nacos界面并点击配置列表 1.2 点击右侧的号 1.3 点击加号后,进入新建配置界面,并做好如下配置 1.4 往下翻动,点击发布按钮 1.5 发布成功后的界面 1.6 在pom.xml…

ChatGPT解答:PYQT5 的mwindow源码文件里面写了很多的函数方法,随着时间的推移越来越多,代码行数太多,影响了性能,如何解决

ChatGPT解答&#xff1a; PYQT5 的mwindow源码文件里面写了很多的函数方法&#xff0c;随着时间的推移越来越多&#xff0c;代码行数太多&#xff0c;影响了性能&#xff0c;如何解决 以下为可复制的内容与实例&#xff1a; PYQT5 的mwindow源码文件里面写了很多的函数方法&a…

第一道pwn栈溢出题

代码和解题思路来自启明星辰的《ctf安全竞赛入门》&#xff0c;当然还有好多热心的师傅们的指导。1.代码&#xff1a;#include "stdio.h" void shell() {system("/bin/sh"); } void vuln() {printf("Please input your name:\n");char s[8];gets…

实现pdf文件预览

前言 工作上接到的一个任务&#xff0c;实现pdf的在线预览&#xff0c;其实uniapp中已经有对应的api&#xff1a;uni.openDocument(OBJECT)&#xff08;新开页面打开文档&#xff0c;支持格式&#xff1a;doc, xls, ppt, pdf, docx, xlsx, pptx。&#xff09;**实现了相关功能…

冬奥会信息管理系统

摘 要伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;系统管理这一名词已不陌生&#xff0c;越来越多的体育馆等机构都会定制一款属于自己个性化的管…

【小程序】盒模型笔记

边框样式参数border中solid是实线&#xff0c;dotted是点状&#xff0c;dashed是虚线。还有其它一些&#xff0c;double(双边框)&#xff0c;groove,ridge,inset,outset等3D边框。可单独拎出来定义边框宽度&#xff0c;border-width由前篇可知&#xff0c;padding\margin上下左…

Python 元类编程实现一个简单的 ORM

概述 什么是ORM?    ORM全称“Object Relational Mapping”&#xff0c;即对象-关系映射&#xff0c;就是把关系数据库的一行映射为一个对象&#xff0c;也就是一个类对应一个表&#xff0c;这样&#xff0c;写代码更简单&#xff0c;不用直接操作SQL语句。 现在我们就要实…

白盒测试重点复习内容

白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…

简单介绍编程进制

十进制 十进制的位权为 10&#xff0c;比如十进制的 123&#xff0c;123 1 * 10 ^ 2 2 * 10 ^ 1 3 * 10 ^ 0。 二进制 二进制的位权为 2&#xff0c;比如十进制的 4&#xff0c;二进制为 100&#xff0c;4 1 * 2 ^ 2 0 * 2 ^ 1 0 *2 ^ 0。 Java7 之前&#xff0c;不支…

【PyTorch】教程:torch.nn.Hardshrink

torch.nn.Hardshrink CLASS torch.nn.Hardshrink(lambd0.5) 参数 lambd ([float]) – the λ\lambdaλ 默认为 0.5 定义 HardShrink(x){x,if x>λx,if x<−λ0,otherwise \text{HardShrink}(x) \begin{cases} x, & \text{ if } x > \lambda \\ x, & \text{…

1528. 重新排列字符串

1528. 重新排列字符串https://leetcode.cn/problems/shuffle-string/ 难度简单52收藏分享切换为英文接收动态反馈 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s &#xff0c;其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新…