OrangePi AIpro在安防领域的深思和实战(旷视科技CNN模型ShuffleNetV1开发案例测试)

一、前言

公司最近有个项目是安防领域的,主要用在边缘结点,虽然已做成形,但是还是存在一些缺陷,例如:算力问题,开发板的成熟问题,已经各种技术的解决方案落地问题。目前我们集成了很多功能,主要是拉取rtsp等流媒体协议的实时视频流,例如:可以拉取海康相机的rtsp,然后针对这个相机做AI识别以及分析。

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB 两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛用于教育、机器人、无人机等场景。

今天香橙派AIpro这块板子终于到了,先来探索下在安防领域的应用。

在这里插入图片描述

二、搭建开发环境

梳理这篇文章之前整理了很多篇,这里直接写总结吧,太冗余的废话就不多说了。总结下来,香橙派AIpro的开发环境并没有太复杂的地方,主要是下载好交叉编译工具,配置好环境变量就OK了。

在这里插入图片描述

官网提供了多个下载的资源,在官方工具这个地址中可以下载到交叉编译工具

在这里插入图片描述

还提供了一些额外的辅助工具,远程工具,图片查看工具等:

在这里插入图片描述

下载好,配置环境变量:

 export PATH=$PATH:/你的位置/toolchain/bin/

如果你是windows就加到自己的PATH环境变量中即可,这个就不需要多说了吧。


如何验证安装成功了呢:

1.使用which命令
which aarch64-target-linux-gnu-g++2.如果能查到说明成功了
/位置/toolchain/bin//aarch64-target-linux-gnu-g++

通过putty的串口连接:

在这里插入图片描述

登录成功:
在这里插入图片描述

三、识别案例

咱们可以参考samples:

(base) HwHiAiUser@orangepiaipro:~$ 
(base) HwHiAiUser@orangepiaipro:~$ cd samples/
(base) HwHiAiUser@orangepiaipro:~/samples$ ls
01-SSD  02-CNNCTC  03-ResNet50  04-HDR  05-CycleGAN  06-Shufflenet  07-FCN  08-Pix2Pix  start_notebook.sh
(base) HwHiAiUser@orangepiaipro:~/samples$ 

可以看到有个启动脚本:

(base) HwHiAiUser@orangepiaipro:~/samples$ cat start_notebook.sh 
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATHif [ $# -eq 1 ];thenjupyter lab --ip $1 --allow-root --no-browser
elsejupyter lab --ip 127.0.0.1 --allow-root --no-browser
fi(base) HwHiAiUser@orangepiaipro:~/samples$ 

通过if [ $# -eq 1 ]可以知道,这个脚本可以接收一个IP参数:

在这里插入图片描述

然后把这一串URL复制到浏览器地址栏把127.0.0.1改成自己的IP即可访问:

在这里插入图片描述

访问效果:

在这里插入图片描述

ShuffleNet v1 是由国产旷视科技团队在 2018 年提出的一种计算高效的CNN模型,其和 MobileNet、SqueezeNet 等一样主要是想应用在移动端。

ShuffleNet 的设计目标也是如何利用有限的计算资源来达到最好的模型精度,这需要很好地在速度和精度之间做平衡。目前移动端CNN模型主要设计思路主要是两个方面:模型结构设计和模型压缩。ShuffleNet 和MobileNet 一样属于前者,都是通过设计更高效和轻量化的网络结构来实现模型变小和变快,而不是对一个训练好的大模型做压缩或者迁移。

ShuffleNet 的核心是采用了两种操作:pointwise group convolution 和 channel shuffle,这在保持精度的同时大大降低了模型的计算量。ShuffleNet 的核心设计理念是对不同的 channels 进行 shuffle 来解决 group convolution 带来的弊端。

对这个比较感兴趣,看到有这个案例就研究下跑个试试:

进入到相应的目06-Shufflenet目录:
打开main_shufflenet.ipynb文件,可以打开在线编辑。
在这里插入图片描述

跑自己的模型的话,可以使用香橙派提供的模型转换工具把模型转换一下:

atc --output_type=FP32 --input_format=NCHW--output="./shufflenet" --soc_version=Ascend310B4 --framework=1 --save_original_model=false --model="./shufflenet.air" --precision_mode=allow_fp32_to_fp16

参数含义:

  * --output_type:指定网络输出数据类型。* --input_format:输入Tensor的内存排列方式。* --output:输出的模型文件路径。* --soc_version:昇腾AI处理器型号,此处为"Ascend310B4"。* --framework:原始框架类型,  0: Caffe, 1: MindSpore, 3: TensorFlow, 5: ONNX。* --save_original_model:转换后是否保留原始模型文件。* --model:原始模型文件路径。* --precision_mode:选择算子精度模式。

官方的案例中使用python写了4部分的代码:

在这里插入图片描述

运行后就可以得到该模型跑后的结果:

在这里插入图片描述

从提供的日志中可以看到,整个流程涉及初始化、资源释放和模型加载阶段的日志记录。以下是各个阶段的分析:

初始化资源阶段 (init resource stage)

  • Init resource success: 表示初始化资源阶段成功完成。
  • Init model resource start…: 开始初始化模型资源。

初始化模型资源阶段 (Init model resource start…)

  • [AclLiteModel] create model output dataset:
    • malloc output 0, size 40: 为模型输出分配了大小为40的内存。
    • Create model output dataset success: 成功创建了模型输出数据集。
  • Init model resource success: 模型资源初始化成功。

释放资源阶段 (acl resource release all resource)

  • AclLiteModel release source success: 释放模型资源成功。
  • acl resource release stream: 释放ACL流资源。
  • acl resource release context: 释放ACL上下文资源。
  • Reset acl device 0: 重置ACL设备0。
  • Release acl resource success: 成功释放ACL资源。

该算法逻辑梳理:

1. 初始化资源:

  • 成功完成基础资源的初始化。

2. 初始化模型资源:

  • 成功开始并完成模型资源的初始化。
  • 为模型输出分配内存并成功创建输出数据集。

3. 释放资源:

  • 成功释放了所有模型相关资源、ACL流资源和ACL上下文资源。
  • 重置了设备并确认所有ACL资源释放成功。

这些日志信息表明整个流程从初始化到释放资源均顺利完成,没有出现错误或警告。

四、总结

整个过程分为三个主要阶段:初始化资源、初始化模型资源和释放资源。每个阶段的日志显示了操作的开始和结束,所有操作均成功完成。

香橙派Aipro提供的案例完美的执行成功了,学习起来很适合企业开发者用户。往外继续延伸,如果单纯的使用香橙派Aipro做模型的测试也是很可以的,可惜了我这边内存不太够,没办法做太多太消耗内存的东西。总之就是学习起来毫不费劲,官方文档一应俱全。

跑这个模型时挺快的,只是不知道跑上多路流然后实时检测的情况如何,还有待验证!在边缘计算设备中性能还是足够的。

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

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

相关文章

Facebook 开源计算机视觉 (CV) 和 增强现实 (AR) 框架 Ocean

Ocean 是一个独立于平台的框架,支持所有主要操作系统,包括 iOS、Android、Quest、macOS、Windows 和 Linux。它旨在彻底改变计算机视觉和混合现实应用程序的开发。 Ocean 主要使用 C 编写,包括计算机视觉、几何、媒体处理、网络和渲染&#x…

实现多层感知机

目录 多层感知机: 介绍: 代码实现: 运行结果: 问题答疑: 线性变换与非线性变换 参数含义 为什么清除梯度? 反向传播的作用 为什么更新权重? 多层感知机: 介绍:…

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行(RCE)漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统(CMS),用于创建和管…

【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow

一、项目介绍 眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练(‘白内障’, ‘糖尿病性视网膜病变’, ‘青光眼’, ‘正常’&…

jenkins系列-05-jenkins构建golang程序

下载go1.20.2.linux-arm64.tar.gz 并存放到jenkins home目录: 写一个golang demo程序:静态文件服务器:https://gitee.com/jelex/jenkins_golang package mainimport ("encoding/base64""flag""fmt""lo…

window下安装go环境

一、go官网下载安装包 官网地址如下:https://golang.google.cn/dl/ 选择对应系统的安装包,这里是window系统,可以选择zip包,下载完解压就可以使用 二、配置环境变量 这里的截图配置以win11为例 我的文件解压目录是 D:\Software…

力扣32.最长有效括号

力扣32.最长有效括号 class Solution {public:int longestValidParentheses(string s) {int n s.size();int res0;int start -1;vector<int> st;for(int i0;i<n;i){if(s[i] ()st.push_back(i);else{//前面没有( , (开启下一段)下一段的开始更新为当前下标if(st.emp…

机器学习和人工智能在农业的应用——案例分析

作者主页: 知孤云出岫 目录 引言机器学习和人工智能在农业的应用1. 精准农业作物健康监测土壤分析 2. 作物产量预测3. 农业机器人自动化播种和收割智能灌溉 4. 农业市场分析价格预测需求预测 机器学习和人工智能带来的变革1. 提高生产效率2. 降低生产成本3. 提升作物产量和质量…

探索JT808协议在车辆远程视频监控系统中的应用

一、部标JT808协议概述 随着物联网技术的迅猛发展&#xff0c;智能交通系统&#xff08;ITS&#xff09;已成为现代交通领域的重要组成部分。其中&#xff0c;车辆远程监控与管理技术作为ITS的核心技术之一&#xff0c;对于提升交通管理效率、保障道路安全具有重要意义。 JT8…

TensorBoard ,PIL 和 OpenCV 在深度学习中的应用

重要工具介绍 TensorBoard&#xff1a; 是一个TensorFlow提供的强大工具&#xff0c;用于可视化和理解深度学习模型的训练过程和结果。下面我将介绍TensorBoard的相关知识和使用方法。 TensorBoard 简介 TensorBoard是TensorFlow提供的一个可视化工具&#xff0c;用于&#x…

尚品汇-(十七)

目录&#xff1a; &#xff08;1&#xff09;获取价格信息 &#xff08;2&#xff09;获取销售信息 前面的表&#xff1a; &#xff08;1&#xff09;获取价格信息 继续编写接口&#xff1a;ManagerService /*** 获取sku价格* param skuId* return*/ BigDecimal getSkuPrice…

『 Linux 』匿名管道应用 - 简易进程池

文章目录 池化技术进程池框架及基本思路进程的描述组织管道通信建立的潜在问题 任务的描述与组织子进程读取管道信息控制子进程进程退出及资源回收 池化技术 池化技术是一种编程技巧,一般用于优化资源的分配与复用; 当一种资源需要被使用时这意味着这个资源可能会被进行多次使…

mqtt.fx连接阿里云

本文主要是记述一下如何使用mqtt.fx连接在阿里云上创建好的MQTT服务。 1 根据MQTT填写对应端口即可 找到设备信息&#xff0c;里面有MQTT连接参数 2 使用物模型通信Topic&#xff0c;注意这里的post说设备上报&#xff0c;那也就是意味着云端订阅post&#xff1b;set则意味着设…

【轻松拿捏】Java-final关键字(面试)

目录 1. 定义和基本用法 回答要点&#xff1a; 示例回答&#xff1a; 2. final 变量 回答要点&#xff1a; 示例回答&#xff1a; 3. final 方法 回答要点&#xff1a; 示例回答&#xff1a; 4. final 类 回答要点&#xff1a; 示例回答&#xff1a; 5. final 关键…

搭建hadoop+spark完全分布式集群环境

目录 一、集群规划 二、更改主机名 三、建立主机名和ip的映射 四、关闭防火墙(master,slave1,slave2) 五、配置ssh免密码登录 六、安装JDK 七、hadoop之hdfs安装与配置 1)解压Hadoop 2)修改hadoop-env.sh 3)修改 core-site.xml 4)修改hdfs-site.xml 5) 修改s…

【进阶篇-Day9:JAVA中单列集合Collection、List、ArrayList、LinkedList的介绍】

目录 1、集合的介绍1.1 概念1.2 集合的分类 2、单列集合&#xff1a;Collection2.1 Collection的使用2.2 集合的通用遍历方式2.2.1 迭代器遍历&#xff1a;&#xff08;1&#xff09;例子&#xff1a;&#xff08;2&#xff09;迭代器遍历的原理&#xff1a;&#xff08;3&…

排序——交换排序

在上篇文章我们详细介绍了排序的概念与插入排序&#xff0c;大家可以通过下面这个链接去看&#xff1a; 排序的概念及插入排序 这篇文章就介绍一下一种排序方式&#xff1a;交换排序。 一&#xff0c;交换排序 基本思想&#xff1a;两两比较&#xff0c;如果发生逆序则交换…

jenkins系列-09.jpom构建java docker harbor

本地先启动jpom server agent: /Users/jelex/Documents/work/jpom-2.10.40/server-2.10.40-release/bin jelexjelexxudeMacBook-Pro bin % sh Server.sh start/Users/jelex/Documents/work/jpom-2.10.40/agent-2.10.40-release/bin jelexjelexxudeMacBook-Pro bin % ./Agent.…

达梦数据库的系统视图v$sessions

达梦数据库的系统视图v$sessions 达梦数据库&#xff08;DM Database&#xff09;是中国的一款国产数据库管理系统&#xff0c;它提供了类似于Oracle的系统视图来监控和管理数据库。V$SESSIONS 是达梦数据库中的一个系统视图&#xff0c;用于显示当前数据库会话的信息。 以下…

全自主巡航无人机项目思路:STM32/PX4 + ROS + AI 实现从传感融合到智能规划的端到端解决方案

1. 项目概述 本项目旨在设计并实现一款高度自主的自动巡航无人机系统。该系统能够按照预设路径自主飞行&#xff0c;完成各种巡航任务&#xff0c;如电力巡线、森林防火、边境巡逻和灾害监测等。 1.1 系统特点 基于STM32F4和PX4的高性能嵌入式飞控系统多传感器融合技术实现精…