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 将输入尺寸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站视频:https://www.bilibili.com/video/BV1LV4y1m7v9/?spm_id_from=autoNext&vd_source=5871c24543e410e4d3a2d0ee955591e3