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

190 阅读5分钟

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接口介绍链接 docs.aidlux.com/#/intro/ai/… 在这里插入图片描述

连接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 将输入尺寸19201080 resize+padding?到640640 2.2 归一化 2.3 6406403->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站视频基于AidLux的自动驾驶智能预警应用方案