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

news2024/9/22 9:58:18

一、前言

公司最近有个项目是安防领域的,主要用在边缘结点,虽然已做成形,但是还是存在一些缺陷,例如:算力问题,开发板的成熟问题,已经各种技术的解决方案落地问题。目前我们集成了很多功能,主要是拉取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:$PYTHONPATH

if [ $# -eq 1 ];then
    jupyter lab --ip $1 --allow-root --no-browser
else
    jupyter 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.coloradmin.cn/o/1925293.html

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

相关文章

在家上网IP地址是固定的吗?

在数字化时代,互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都离不开网络的支持。然而,当我们在家中接入互联网时,可能会产生这样一个疑问:在家上网IP地址是固定的吗?下面一…

春招冲刺百题计划|双指针

Java基础复习 Java数组的声明与初始化Java ArrayListJava HashMapJava String 类Java LinkedListJava Deque继承LinkedListJava SetJava 队列优先队列:第二题用到了Java数组划分Java数组转ArrayListString 转数字String 这一部分,代码随想录写得超级好&#xff01…

哪些场景下适合使用人工智能作词软件来写歌词

以下是一些适合使用人工智能作词软件的场景: 软件我们选用“妙笔生词”智能写歌词软件(veve299)来操作。 1.创作灵感枯竭时:当创作者陷入思维困境,找不到新的创意和方向,人工智能作词软件可以快速提供一些…

Learning vtkjs之hello vtk

学习vtkjs 最近由于工作需要,开始学习vtkjs的相关内容,发现其实在医疗和工业领域,这个vtk的库的example还是非常有帮助,但是实际用的一些开发工具,或者研发生态却没有three的好,也就是能抄写的东西不多&am…

PanTools v1.0.27 多网盘批量管理、遍历分享、转存、重命名、复制...

一款针对多个热门网盘的文件管理、批量分享、批量转存、批量重命名、批量复制、批量链接检测、跨账号移动文件、多账号文件搜索等,支持不同网盘的不同账号的资源文件操作。适用于网站站长、资源爱好者、网盘拉新等,对于管理名下具有多个网盘多个账号具有…

昇思25天学习打卡营第20天|CycleGAN图像风格迁移互换

模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。…

3D问界-深入理解骨骼绑定与蒙皮绑定在三维动画中的角色

问题提出:什么是蒙皮绑定,什么是骨骼绑定 蒙皮绑定(Skinning)和骨骼绑定(Bone Binding)通常是在计算机图形学和动画制作中使用的术语,用来描述将模型或角色的几何形状与骨骼系统相关联的过程。这…

层序遍历及其应用

我们先看一道问题,将一棵树按照层序遍历将他列出来,如下图所示: 我们想一下,按照层序遍历的顺序应该是 1243567 。按照这个设想,我给大家讲解一下这个整体过程。 层序遍历介绍 层序遍历就是将树放入队列中&#x…

springboot社区垃圾回收处理小程序-计算机毕业设计源码71905

摘要 在数字化高速发展的今天,随着Spring Boot等轻量级框架的广泛应用,各种小程序、微服务如雨后春笋般涌现,极大地丰富了我们的软件生态系统。然而,伴随着这些应用的迅速增加,垃圾回收处理成为了一个不可忽视的问题。…

TensorFlow系列:第四讲:MobileNetV2实战

一. 加载数据集 编写工具类,实现数据集的加载 import keras""" 加载数据集工具类 """class DatasetLoader:def __init__(self, path_url, image_size(224, 224), batch_size32, class_modecategorical):self.path_url path_urlself…

PostgreSQL日志文件配置,记录所有操作记录

为了更详细的记录PostgreSQL 的运行日志,我们一般需要修改PostgreSQL 默认的配置文件,这里整理了一些常用的配置 修改配置文件 打开 PostgreSQL 配置文件 postgresql.conf。该文件通常位于 PostgreSQL 安装目录下的 data 文件夹中。 找到并修改以下配…

1.10-改进CBOW模型的学习

文章目录 0引言1 cupy包的安装2解决VScode中matplotlib绘图不显示的问题3 CBOW模型学习的实现4 CBOW模型对更复杂模式的捕捉5单词向量的评价方法6总结 0引言 本节将前面实现的改进的CBOW模型在PTB数据集上跑一遍由于希望跟书上一样调用GPU,因此需要安装cupy包&…

前端Canvas入门——一些注意事项

创建渐变的三种方法: createLinearGradient() - 线性渐变 createRadialGradient() - 径向渐变(放射性渐变) createConicGradient() - 锥形渐变 这三种的核心观点都是: 创建一个gradient对象,然后调用addColorStop()方法…

【软件测试】自动化测试常用函数 -- 详解

一、WebDriver API 一个简单自动化脚本的构成: 脚本解析 # coding utf-8 from selenium import webdriver import time browser webdriver.Firefox() time.sleep(3) browser.get("http://www.baidu.com") time.sleep(3) browser.find_element_by_id(…

Photoshop

彩色转灰度:ctrlshiftu 背景转黑色: 魔术棒容差10 shift连选 shiftF5(填充)钢笔选择 路径 工作路径 将路径作为选区载入 点回图层 按ctrlx删除选区 待更新

[C++]——同步异步日志系统(5)

同步异步日志系统 一、日志消息格式化设计1.1 格式化子项类的定义和实现1.2 格式化类的定义和实现 二、日志落地类设计2.1 日志落地模块功能实现与测试2.2 日志落地模块功能功能扩展 一、日志消息格式化设计 日志格式化模块的作用:对日志消息进行格式化&#xff0c…

Windows 子系统WSL2 Ubuntu使用事项

Windows 子系统WSL2 Ubuntu使用事项 要使外部设备能够访问运行在 Windows 上的 WSL2 实例,你可以端口转发的方法。由于 WSL2 是在虚拟化环境中运行,直接访问比 WSL1 更为复杂. 1 如何实现子系统可以被外部系统SSH 1.1 端口转发: 通过windows代理WSL2的…

微信视频号的视频怎么下载到本地?快速教你下载视频号视频

天来说说市面上常见的微信视频号视频下载工具,教大家快速下载视频号视频! 方法一:缓存方法 该方法来源早期视频技术,因早期无法将大量视频通过网络存储,故而会有缓存视频文件到手机,其目的为了提高用户体验…

stm32入门-----初识stm32

目录 前言 ARM stm32 1.stm32家族 2.stm32的外设资源 3.命名规则 4.系统结构 5.引脚定义 6.启动配置 7.STM32F103C8T6芯片 8.STM32F103C8T6芯片原理图与最小系统电路 前言 已经很久没跟新了,上次发文的时候是好几个月之前了,现在我是想去学习st…

C++继承和多态

目录 继承 继承的意义 访问限定符、继承方式 赋值兼容规则(切片) 子类的默认成员函数 多继承 继承is a和组合has a 多态 什么是多态 形成多态的条件 函数重载,隐藏,重写的区别 override和final 多态原理 继承 继承的…