《基于AidLux的自动驾驶智能预警应用方案》

news2024/12/26 11:25:08

YOLOP模型转ONNX

ONNX是开放式神经网络(Open Neural Network Exchange)的简称,ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型的框架有:Caffe2,PyTorch,MXNet,ML.NET,TensorRT和Microsoft CNTK,并且TensorFlow也非官方的支持ONNX。
在这里插入图片描述

YOLOP导出onnx模型

执行命令:
python3 export_onnx.py–height 640–width 640
执行完成后,会在weights文件夹下生成转换成功的onnx模型
onnx转换核心api:
在这里插入图片描述

onnx模型导出流程:

1.加载PyTorch模型,可以选择只加载模型结构;
也可以选择加载模型结构和权重。
2.定义PyTorch模型的输入维度,比如(1,3,640,640),
这是一个三通道的彩色图,分辨率为640x640.
3.使用torch.onnx.export()函数来转换,生产onnx
模型。
在这里插入图片描述

推理流程

1.加载模型
2.获取输入输出节点名
3.准备数据,如(n,c,h,w)或者
(n,h,w,c)
4.执行推断,获得输出
在这里插入图片描述

可视化ONNX模型

使用Netron,可视化ONNX模型,看一下
网络结构;查看使用了那些算子,以便开
发部署。
Netron是一个轻量级、跨平台的模型可
视化工具,支持多种深度学习框架的模型
可视化,包括TensorFlow、PyTorch、
ONNX、Keras、Caffe等等。它提供了可
视化网络结构、层次关系、输出尺寸、权
重等信息,并且可以通过鼠标移动和缩放
来浏览模型。Netron还支持模型的导出
和导入,方便模型的分享和交流。
在这里插入图片描述

YOLOP模型在AidLux上部署与应用

AidLux介绍

AidLux是一个构建在ARM硬件上,基于创新
性跨Android/鸿蒙+Linuxi融合系统环境的智
能物联网(AIoT)应用开发和部署平台。
AidLux软件使用非常方便,可以安装在手机、
PAD、ARM开发板等边缘端设备上。而且使用
AidLux开发的过程中,既支持在边缘设备的本
机开发,也支持通过Web浏览器访问边缘端桌
面进行开发。
各大应用商城都能下载AidLux,如右图,在手
机应用商城搜索、下载安装AidLux
在这里插入图片描述

AidLux:编程接口

AidLux接口介绍链接
https://docs.aidlux.com/#/intro/ai/ai-aidlite
在这里插入图片描述

连接AidLux

将手机的wifi网络和电脑的网络连接到一起,打开安装好的手机上的AidLuxa软件,点击第一排第二个Cloud_ip.
手机界面上会跳出可以在电脑上登录的1P网址,在电脑的浏览器上,随便输入一个P,即可将手机的系统投影到
电脑上,连接上后就可以利用手机的算力进行模型推理了。
在这里插入图片描述

上传项目到AidLux

1.点击文件浏览器,打开文件管理页面
2.找到home文件夹,并双击进入此文件夹
3.点击右上角往上的箭头“upload”,再选择Folder,将前面YOLOP的文件夹上传到home文件夹内。(也可以直接将文件夹拖进目录下。)
在这里插入图片描述

安装环境

1.打开终端,切换到项目目录
2.执行命令:pip install-r requirements.txt安装依赖环境
3.安装pytorch、torchvision、onnxruntime

pip install torch==1.8.1  torchvision==0.9.1 -i https://pypi.mirrors.ustc.edu.cn/simple/
pip install onnxruntime-i https://pypi.mirrors.ustc.edu.cn/simple/

其他包缺失可以直接使用pip install安装
在这里插入图片描述

运行demo.py

验证推理效果,执行命令:
python tools/demo.py --source inference/images
运行报错:module’cv2’has no attribute’_registerMatType’
解决办法:卸载opencv-python、opencv-contrib-python只安装低版本的opencv-contrib-python

pip install opencv_python==4.5.4.60 -i https://pypi.mirrors.ustc.edu.cn/simple/

运行成功后,会将结果文件存放到inference/output文件夹中,可以去该文件夹下查看推理结果
在这里插入图片描述

智能预警系统代码实战

智能预警

验证推理效果,执行命令:
python tools/demo.py --source inference/images
运行报错:module’cv2’has no attribute’_registerMatType’
解决办法:卸载opencv-.python、opencv-contrib-python只安装低版本的opencv-.contrib-python

pip install opencv_python==4.5.4.60 -i https://pypi.mirrors.ustc.edu.cn/simple/

运行成功后,会将结果文件存放到inference/output文件夹中,可以去该文件夹下查看推理结果
在这里插入图片描述
智能预警系统包含3个任务:
目标检测,可行驶区域检测,车道线检测
传感器:前视相机
目标检测任务:检测车辆
可行驶区域检测:主要是检查出可以行驶的
区域,为自动驾驶提供路径规划辅助
车道线检测:是一种环境感知应用,其目的
是通过车载相机或激光雷达来检测车道线
在这里插入图片描述
在这里插入图片描述
1.输入:
读取视频图像作为输入,图像尺寸19201080
在这里插入图片描述
2.预处理
2.1 将输入尺寸1920
1080 resize+padding?到640640
2.2 归一化
2.3 640
6403->13640640
在这里插入图片描述
在这里插入图片描述
3.使用onnx模型进行推理
读取模型->准备数据->推理
得到det_out,da_seg_out,ll_seg_out,shape:分别为:(1,n,6)(1,2,640,640)(1,2,640,640)
在这里插入图片描述
4.后处理
4.1将检测结果,可行驶区域检测结果,车道线检测结果,合并到一张图像上,分别用不同的颜色标记出来
4.2将检测的帧数,帧率,车辆数等信息显示在图像上
在这里插入图片描述
5.输出
获取最终融合的图像,并保存成视频,图像尺寸、率、编码是原视频尺寸、帧率和编码
在这里插入图片描述

预警代码

forewarning.py为智能预警代a码,执行命令:python forewarning.py
显示中文时,如果报错,请参照以下解决办法
报错:OSError:cannot open resource缺少中文字体
解决办法:将simsun.ttc上传到/usr/share/fonts/文件夹下(simsun.ttc已存放在百度云盘)
在这里插入图片描述

最终推理过程以及结果

推理结果如b站视频:https://www.bilibili.com/video/BV1LV4y1m7v9/?spm_id_from=autoNext&vd_source=5871c24543e410e4d3a2d0ee955591e3

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

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

相关文章

记录实现QT和qml model/view 交互时候遇到的坑

使用QT的model/view 建立全局静态变量 打印发现有值输出 但是界面无日志显示 原因是一开始使用调用函数传参传的logModel参数加了const参数修饰 这个错误太傻了,找了半天一直怀疑外部类的问题 其实setContextProperty是这么用的 传QObject类型的引用之后它内部会…

【无标题】下载redis工具RESP.app(RedisDesktopManager)

1、安装前提: Windows: 1、Install Microsoft Visual C 2015-2019 x64 (If you have not already). 2、Download Windows Installer from http://redisdesktop.com/download. (Requires subscription)指导手册地址: https://docs.resp.app/…

DataSecurity Plus金融行业案例

摘要:DataSecurity Plus是一款强大的数据安全解决方案,为金融机构提供全面的数据保护和合规性监控。本文将介绍DataSecurity Plus在金融行业的使用案例,包括文件审计、数据分类和合规性报告等功能的应用。 DataSecurity Plus 文件审计&#…

《The book of why》读书笔记 -- introduction:mind over data

最近在浅学causal learning,拜读《The Book of Why》,记录一些笔记,下为书的introduction部分 下面这段话我觉得写得非常好 This book tells the story of a science that has changed the way we distinguish facts from fiction and yet ha…

性能测试如何做?资深10年测试带你揭秘,测试之路进阶...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在做功能测试、自…

医学访问学者面试技巧注意

医学访问学者面试是获得进一步学术发展和研究机会的重要环节。在面试过程中,准备充分并注意一些关键技巧可以帮助你增加成功的机会。以下是知识人网小编整理的一些建议和技巧,希望对你在医学访问学者面试中取得好成绩有所帮助。 1. 提前了解研究机构&…

LeetCode——找出中枢整数

一、题目 2485. 找出中枢整数 - 力扣(Leetcode) 给你一个正整数 n ,找出满足下述条件的 中枢整数 x : 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 …

统一移动门户对政企级办公来说有哪些优势?

政府机构和企业在数字化转型后,内部常使用多套不同的信息系统和应用程序。然而,这些系统和应用之间存在信息和数据隔离的问题,导致内部员工需要频繁切换登录,并容易出现信息遗漏和处理延误。这不仅妨碍了工作效率的提升&#xff0…

QML Canvas 裁剪

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 开发中,Canvas 是一个很强大的绘图元素,可以实现各种复杂的图形效果,其中一个重要的特性就是裁剪。它的原理是使用路径或其他形状定义一个封闭区域,将绘图操作限制在该区域内,并隐藏掉超出该区域…

[k8s] arm64架构下k8s部署的坑

本次测试在华为kunpeng-920机器上,cpu配置如下: [rootmaster ~]# lscpu 架构: aarch64 CPU 运行模式: 64-bit 字节序: Little Endian CPU: …

软考--操作系统之文件系统多级索引

目录 概念索引结构索引表索引方式一级索引多级索引 真题分析题目1-存储文件最大长度解析题目2-多级索引占用物理块号解析题目3-综合解析总结 概念 索引结构 一个文件的信息存放在若干不连续物理块中 系统为每个文件建立一个专用数据结构——索引表,并将这些物理块…

快速部署K8s仪表板,助力管理轻松搞定!

https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/ Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使…

【运维工程师学习三】Linux中Shell脚本编写

【运维工程师学习三】shell编程 Shell程序分类1、系统中sh命令是bash的软链接2、Shell脚本标准格式之文件后缀3、Shell脚本标准格式之文件内容首行4、Shell脚本的运行方法一、作为可执行程序解释 二、作为解释器(bash)参数 5、find、grep、xargs、sort、…

C++ 中的字符串类

历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型,因此无法获得字符串类型 解决方案 从 C 到 C 的进化过程引入了自定义类型 在 C 中可以通过类完成字符串类型的定义 问题: C 中的…

华为云CodeArts实践初体验活动即将结束,抓紧报名,赢华为耳机!

【活动简介】 CodeArts是华为自研一站式软件开发生产线,软件开发全流程覆盖:支持需求管理、代码托管、流水线、代码检查、编译构建、部署、测试、制品仓库等全生命周期软件开发服务;开箱即用,云上开发。本次实践体验活动带你初步…

项目——学生信息管理系统4

目录 学生模块的功能实现 1. 创建Student实体类型 编写StudentDao 提供添加学生的方法 创建 学生添加页面 创建 AddStudentFrm 页面 注意创建成JInternalFrame类型 注意:把main方法注释掉 回到 MainFrm.java 页面 给添加学生按钮绑定事件 当打开 AddStudentF…

从裸机启动开始运行一个C++程序(五)

先序文章请看 从裸机启动开始运行一个C程序(四) 从裸机启动开始运行一个C程序(三) 从裸机启动开始运行一个C程序(二) 从裸机启动开始运行一个C程序(一) 把MBR和内核源码拆开 拆分M…

实现表格合并单元格、在表格做输入处理以及数值统计

需求:表格样式涉及到合并单元格,功能上可以在表格最后一列输入分数,并自动统计总分。 大体样式 代码: 表格: :span-method 属性用来合并单元格 :summary-method 属性用来实现自动统计 // 合并单元格操作 objectSpa…

头文件的使用,什么是头文件?

*## 头文件的使用*为什么要加这个#include include表示包含的意思,就是把iostream这个文件拷贝到main.c这里 有什么意义呢? 有什么意义呢?都是明星同时也是小卡 所以需要包含头文件去查找一下 所以头文件就是相对应功能函数的集合。要想使用…

java实现布隆过滤器(手写和Guava库提供的)

目录 前言 布隆过滤器的原理 插入​编辑 查询 删除 布隆过滤器优缺点 优点: 缺点: 代码实现 方式一: Google Guava 提供的 BloomFilter 类来实现布隆过滤器 到底经过几次哈希计算 解决缓存穿透 方式二:手写 前言 在学…