基于YOLOv5的儿童睡眠检测

news2024/10/6 1:34:22

注意: 由于SOPHGO SE5微服务器的CPU是基于ARM架构,部分步骤将在 基于x86架构CPU的开发环境中完成
一、初始化开发环境(基于x86架构CPU的开发环境中完成)
二、模型转换 (基于x86架构CPU的开发环境中完成)
三、YOLOv5模型部署测试(在SOPHGO SE5微服务器上进行)

本实验代码和模型可在Connecting... 下载

一、初始化开发环境 (基于x86架构CPU的开发环境中完成)

1.1 初始化开发环境

1.2 配置Docker容器开发环境

以下步骤均在Docker容器中进行:
1. 安装nntc以及配置环境变量
# 切换成 root 权限
sudo -i
# 下载Docker镜像
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/07/19/10/x86_sophonsdk
_ubuntu18.04_py37_dev_22.06_docker.zip
# 确保环境安装unzip后解压
unzip x86_sophonsdk3_ubuntu18.04_py37_dev_22.06_docker.zip
# 进入文件夹并加载Docker镜像
cd x86_sophonsdk3_ubuntu18.04_py37_dev_22.06_docker
docker load -i x86_sophonsdk3_ubuntu18.04_py37_dev_22.06.docker
# 下载SOPHON SDK3.0.0
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/07/18/11/
sophonsdk_v3.0.0_20220716.zip
unzip sophonsdk_v3.0.0_20220716.zip
cd sophonsdk_v3.0.0
# 通过脚本文件创建并进入Docker容器
# 若您没有执行前述关于docker命令免root执行的配置操作,需在命令前添加sudo
./docker_run_sophonsdk.sh
cd /workspace/scripts/
./install_lib.sh nntc
# 设置环境变量-[有PCIe加速卡]
source envsetup_pcie.sh
# 设置环境变量-[无PCIe加速卡]
source envsetup_cmodel.sh

导出的环境变量只对当前终端有效,每次进入容器都需要重新执行一遍,或者可以将这些环境变量写入
~/.bashrc,这样每次登录将会自动设置环境变量

二、模型转换 (基于x86架构CPU的开发环境中完成)


由于BMNNSDK中的PyTorch模型编译工具BMNETP只接受PyTorchJIT模型(TorchScript模型),需要用户自行将训练好的Pytorch模型进行转换。JITJust-In-Time)是一组编译工具,用于弥合PyTorch研究与生产之间的差距。它允许创建可以在不依Python解释器的情况下运行的模型,并且可以更积极地进行优化。在已有PyTorchPython模型(基类为torch.nn.Module)的情况下,通过 torch.jit.trace 就可以得到JIT模型,如torch.jit.trace(python_model,torch.rand(input_shape)).save('jit_model') 。BMNETP暂时不支持带有控制流操作(如if语句或循环)的JIT模型,因此不能使用 torch.jit.script ,而要使用torch.jit.trace ,它仅跟踪和记录张量上的操作,不会记录任何控制流操作

2.1 将训练好的Pytorch模型转换为JIT模型
 

2.1.1 直接获取转换好的 JIT 模型 

在sleep/sleep-aug-640.yolov5pytorch/yolov5s6/weights/best.trace.pt 为转换好的JIT模型

2.1.2 自行将训练好的Pytorch模型转换为JIT模型

下载ultralytics官方YOLOv5源码
# 在容器里, python3.7docker为例
cd ${YOLOv5}
# 下载yolov5源码
git clone https://github.com/ultralytics/yolov5.git yolov5_github
# 切换到yolov5工程目录
cd yolov5_github
# 使用tag从远程创建本地v6.1分支
git branch v6.1 v6.1
git checkout -v6.1
# 将下载好的sleep导入yolov5_github

修改models/yolo.pyDetect类的forward函数的最后return语句,实现不同的输出

# 此模型为单输出
def forward(self, x):
    return x if self.training else (torch.cat(z, 1)) # 1个输出

#return x if self.training else x # 3个输出
# return x if self.training else (torch.cat(z, 1), x) # 4个输出

导出JIT模型

cd ${yolov5}/yolov5_github目录下

# 创建python虚拟环境virtualenv
pip3 install virtualenv
# 切换到虚拟环境
virtualenv -p python3 --system-site-packages env_yolov5
source env_yolov5/bin/activate
# 安装依赖
pip3 install -r requirements.txt
# 此过程遇到依赖冲突或者错误属正常现象
# 导出jit模型
python3 export.py --weights ${sleep}/ sleep-aug-640.yolov5pytorch/yolov5s6/weights/best.pt --include torchscript
# 退出虚拟环境
deactivate
# 将生成好的jit模型best.torchscript拷贝到${YOLOv5}/build文件夹下
mkdir ../build
cp best.torchscript ../build/sleep_best_1output.trace.pt
# 拷贝一份到${YOLOv5}/data/models文件夹下
mkdir ../data/models
cp best.torchscript ../data/models/sleep_best_1output.trace.pt

2.2 模型转换:生成FP32 BModel
 

Python命令生成FP32 BModel

BMNETP是针对pytorch的模型编译器,可以把pytorch模型直接编译成BMRuntime所需的执行指令。
通过以下命令可以实现FP32 BModel模型的直接生成(确保生成的JIT模型拷贝至
${YOLOv5}/data/models 路径下):

cd ${YOLOv5}/data/models/
python3 -m bmnetp --mode="compile" \
--model=sleep_best_1output.trace.pt \
--outdir=sleep_best_1output \
--target="BM1684" \
--shapes=[[1,3,640,640]] \
--net_name=yolov5s_fp32_b1 \
--opt= 2 \
--dyn=False \
--cmp=True \
--enable_profile=True

上述脚本会在 ${YOLOv5}/data/models/sleep_best_1output 下生成 compilation.bmodel 文件

使用如下命令查看模型具体信息:
bm_model.bin –info compilation.bmodel


bmrt_test --bmodel compilation.bmodel

三、YOLOv5模型部署测试(在算能云开发平台进行)

3.1 准备示例程序
 

以下步骤在基于x86架构CPU的开发环境中进行
一、初始化开发环境

https://cloud.sophgo.com/developer

参考云开发平台手册学习使用

云空间文件系统对应命令行 /tmp 目录

二、模型转换处理好的YOLOv5项目文件拷贝至云开发平台上:

将sleep文件模型拷贝到云开发平台。

3.2 BModel测试(Python例程)

cd ${sleep}/bmodel/python
# BModel和图片路径名仅供参考,具体根据各自的路径进行修改

python3 yolov5_opencv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../../ sleep-aug-640.yolov5pytorch/test/images/

python3 yolov5_bmcv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../../ sleep-aug-640.yolov5pytorch/test/images/

输出结果

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

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

相关文章

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机openEuler 操作系统假死测试用例2

前文: https://hknaruto.blog.csdn.net/article/details/130408240 测试程序 /** tcti.cpp参考: https://www.cnblogs.com/organic/p/17321523.htmlg -stdc11 -lpthread trigger_cgroup_timer_inactive.cpp -o inactive_timer ./inactive_timer 100000…

linux内核网络子系统初探---概述

linux内核网络子系统初探—概述 一、网络模型 简单介绍 学习网络时,必定能在各种教材资料里见到以下三种网络模型: 三种模型间的差异: OSI七层模型是理论上的网络模型,从功能方面分成了相对独立的7个层次,由于太复…

如何通过 Rancher 轻松实现多云部署

“多云”通过不同的云厂商分发应用程序提高了弹性,能够帮助企业强化自身的竞争力。此外,多云还降低了被云厂商锁定的可能性,让企业避免过于依赖某个云厂商。 虽然多云的优势很多,但是管理多云 Kubernetes 的困难还是让人望而却步…

MCU自动化测量单元—峟思工程仪器仪表的智能助力

随着科技的不断发展,峟思工程仪器仪表在工程测量领域不断创新,其中MCU自动化测量单元作为一项颇具潜力的技术,正逐渐引起行业的广泛关注。MCU自动化测量单元作为峟思工程仪器仪表的重要组成部分,其应用带来了许多正面影响&#xf…

用右雅克比对旋转矩阵进行求导

考虑一个向量 a \bold{a} a对其进行旋转, 旋转用旋转矩阵 R \bold{R} R表示, 用朴素的倒数定义进行求导而不是用扰动模型, 我得到了这个过程与结果 和高博的新书结果 − R J r a ∧ -\bold{R}\bold{J}_{r}\bold{a}^{\wedge} −RJr​a∧结果不一样, 雅克比矩阵位置不同, 是不是…

神经网络结构搜索NAS

推荐课程:神经网络结构搜索 感谢博主ShusenWang提供的课程讲解! 目录 1. 为什么要学习神经网络结构搜索NAS? 2. 什么是神经网络结构搜索NAS? (1)随机搜素Random Search 1. 为什么要学习神经网络结构搜…

位图的简单实现和使用

文章目录 1. 什么是位图2. 位图的简单实现3. 测试位图代码 1. 什么是位图 位图, 是一种非常常见的结构, 它使用每个二进制位来存放一个值的状态, 就类似于 Java 当中 HashSet 存储元素的功能. 在 Java 当中, 可以使用HashSet完成如下操作: add(T v): 添加一个元素到 HashSet…

算法:递归启蒙-汉诺塔

基本所有的讲递归的书和视频都会以汉诺塔作为开始,因为它足够经典 汉诺塔问题要求整个挪动的过程中都符合小压大的原则,就是如果同一个柱子上有超过1个的话,那必须下面是最大的,上面依次变小,不能出现大盘压小盘的情况…

Element Plus的Pagination 组件用法

5.2 Pagination 组件 分页组件通常与表格组件一同使用,在数据量很大的时候,通常不会在表格中一次性显示所有的数据,因为如果所有数据都展示在一个页面,数据量庞大,容易造成浏览器崩溃,就算数据可以完全展…

【CV2NLP】Chinese-Vicuna 中文小羊驼

学习一个短语! gain proficiency in 熟练掌握 (用我最爱的文心一言造个句子) 最近羊驼家族百花齐放,赶紧学习一下 ChatBot 的背后细节。Chinese-Vicuna 中文小羊驼是基于 Vicuna 模型使用中文数据 LORA 方案来微调的一种中文对…

数值分析-牛顿-柯特斯公式的概念、推导与应用

目录 一、引言 二、牛顿-柯特斯公式的基本概念 三、牛顿-柯特斯公式的推导 四、牛顿-柯特斯公式的应用 五、牛顿-柯特斯公式的优缺点 六、总结 一、引言 数值分析是数学中的一个重要分支,它研究如何利用数值方法来解决实际问题。在数值分析中,牛顿…

Redux 学习系列(一) —— 基础概念入门篇

简介 Redux 是一个可预测的 JavaScript 应用状态管理容器,也可以说是一个应用数据流框架。 作用 Redux 主要是用作应用状态的管理。它抽离所有组件的状态,构造一个中心化的单独常量状态树(对象)来保存这一整个应用的状态。这棵…

Java经典笔试题—day02

Java经典笔试题—day02 🔎选择题🔎编程题🥝排序子序列🥝倒置字符串 🔎结尾 🔎选择题 (1)A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明: A a0new A(…

HTTPS协议介绍

文章目录 一、HTTPS协议的认识二、常见的加密方式1.对称加密2.非对称加密 三、数据摘要四、HTTPS的工作过程探究1.只使用对称加密2.只使用非对称加密3.双方都使用非对称加密4.非对称加密对称加密5.中间人攻击6.引入证书7.非对称加密对称加密证书认证 一、HTTPS协议的认识 HTTP…

【数据库】面试高频问题汇总及详细解答

【C语言部分】面试高频问题汇总及详细解答 【操作系统(Linux)】面试高频问题汇总及详细解答 【计算机网络】面试高频问题汇总及详细解答 本文目录 1. SQL1.1 介绍一下数据库分页1.2 介绍一下SQL中的聚合函数1.3 表跟表是怎么关联的1.4 说一说你对外连接的了解1.5 说说SQL中怎么…

VM虚拟机安装Ubuntu server 22.04网络问题

在使用vm虚拟机安装ubuntu server 22.04的时候会遇到一些网络问题,例如虚拟机内的Ubuntu不能上网,ping www.baidu.com不通,主机使用远程工具不能建立远程连接,Ubuntu ping本地主机不通,本地主机ping虚拟机也不通的问题…

vue3+vite项目优化。

最近开发的一个vue3vitets项目,build后发现体积过大,所以针对于项目体积进行一次优化。 一: 使用rollup-plugin-visualizer 可视化分析包 npm i rollup-plugin-visualizer -S 在vite.config.js中引入 在 plugins里面 然后执行npm run build就自动打开…

最新开源Chatgpt人工智能对话源码系统如何搭建?含详细安装教程分享和源码

人工智能对话系统市场需求正在不断增长。随着人们对智能化、自动化服务的需求不断提高,人工智能对话系统成为越来越多企业和组织的首选解决方案,可以有效提升用户体验、降低成本、提高效率。 一、Chatgpt人工智能对话源码系统定义 ChatGPT是一种基于深…

流量挂机赚钱项目Traffmonetizer

利用闲置电脑/服务器/安卓手机/树莓派来赚点电费 简介 Traffmonetizer是一个来自欧洲的流量挂机平台,类似Peer2profit,满10刀可提现(Paypal、BTC、Payoneer),注册好像就送5刀,Traffmonetizer不怎么占用CPU和内存以及流量&#x…

初学容器化

1.docker build,ship,run,any app anywhere docker类似运输中的集装箱,可以装任何应用(镜像文件),运行到各种服务器上。 docker提供的是进程上的隔离,虚拟机提供的是操作系统资源…