AI项目十六:YOLOP 训练+测试+模型评估
若该文为原创文章,转载请注明原文出处。
通过正点原子的ATK-3568了解到了YOLOP,这里记录下训练及测试及在onnxruntime部署的过程。
步骤:训练->测试->转成onnx->onnxruntime部署测试
一、前言
YOLOP是华中科技大学研究团队在2021年开源的研究成果,其将目标检测/可行驶区域分割和车道线检测三大视觉任务同时放在一起处理,并且在Jetson TX2开发板子上能够达到23FPS。
论文标题:YOLOP: You Only Look Once for Panoptic Driving Perception
论文地址: https://arxiv.org/abs/2108.11250
官方代码: https://github.com/hustvl/YOLOP
网络结构
相比于其它论文,YOLOP的论文很容易阅读。YOLOP的核心亮点就是多任务学习,而各部分都是拿其它领域的成果进行缝合,其网络结构如下图所示:

三个子任务共用一个Backbone和Neck,然后分出来三个头来执行不同的任务。
二、环境搭建
1、平台
使用的是AutoDL平台,配置如下:

2、环境创建
# 创建虚拟环境
conda create -n yolop_env python=3.8 -y
# 激活环境
conda activate yolop_env
# 安装pytorch
根据官网Previous PyTorch Versions | PyTorch安装pytorch,这里选择1.7版本,其他版本测试时,在转换成onnx时出错,所以在这里直接安装1.7版本。
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# 下载源码,代码地址:
https://github.com/hustvl/YOLOP
# 安装yolop环境
pip install -r requirements.txt
# 测试
python tools/demo.py --source ./inference/images/0ace96c3-48481887.jpg
运行 python tools/demo.py --source ./inference/videos/1.mp4
测试图片:–source 图片路径 (或存放图片的文件夹路径)
测试视频:–source 视频路径 (或存放视频的文件夹路径)
相机实时:–source 0
默认用cpu测试效果,如果想改成gpu,修改demo.py 198行。
三、onnxruntime测试
先安装onnxruntime
pip install onnxruntime
测试
python test_onnx.py --weight yolop-640-640.onnx --img ./inference/images/adb4871d-4d063244.jpg
四、训练
训练前需要下载数据集,可以根据YOLOP里的readme.md里的地址下载,也可以下载下面的网盘地址,把数据解压到YOLOP目录下。
链接:https://pan.baidu.com/s/1DJirasFncnnf4auI-BxEHA
提取码:1234
在Train之前修改相关参数,修改文件./lib/config/default.py
1、修改第9行:
_C.WORKERS = 0
2、修改第51-56行,这是数据集的路径
_C.DATASET = CN(new_allowed=True)
_C.DATASET.DATAROOT = '/root/YOLOP-main/datasets/images' # the path of images folder
_C.DATASET.LABELROOT = '/root/YOLOP-main/datasets/det_annotations' # the path of det_annotations folder
_C.DATASET.MASKROOT = '/root/YOLOP-main/datasets/da_seg_annotations' # the path of da_seg_annotations folder
_C.DATASET.LANEROOT = '/root/YOLOP-main/datasets/ll_seg_annotations' # the path of ll_seg_annotations folder
3、修改ATCH_SIZE
修改96行,121行_C.TRAIN.BATCH_SIZE_PER_GPU 为合适大小
修改完后,就可以训练了,执行下面命令开始训练:
python tools/train.py
训练时间很久,根据default.py文件,epoch共240轮,大概8小时左右,在训练过程中有一点要注意,每训练一轮结束后,模型和一些图片都会保存下来,造成磁盘空间不够,有可能训练失败,我只是测试所以只训练了100轮。
五、转onnx模型及测试
转换成onnx模型前,先安装环境
pip install onnxruntime
pip install onnx
pip install onnx-simplifier
pip install onnxoptimizer
pip install numpy==1.20.0
安装完后,运行python export_onnx.py转成onnx模型
onnxruntime测试和上面一样,执行下面命令测试
python test_onnx.py --weight yolop-640-640.onnx --img ./inference/images/adb4871d-4d063244.jpg
onnx转换并测试成功,接下来就是把模型转成rknn并在rk3568上部署。
遇到的问题:
[ONNXRuntimeError] : 1 : FAIL : Node (Mul_948) Op (Mul) [ShapeInferenceError]
处理:把torch降成1.7
如有侵权,或需要完整代码,请及时联系博主。
相关文章:
AI项目十六:YOLOP 训练+测试+模型评估
若该文为原创文章,转载请注明原文出处。 通过正点原子的ATK-3568了解到了YOLOP,这里记录下训练及测试及在onnxruntime部署的过程。 步骤:训练->测试->转成onnx->onnxruntime部署测试 一、前言 YOLOP是华中科技大学研究团队在2021年…...
Flink报错could not be loaded due to a linkage failure
文章目录 1、报错2、原因3、解决 1、报错 在Flink上提交作业,点Submit没反应,F12看到接口报错信息为: 大概意思是,由于链接失败,无法加载程序的入口点类xx。没啥鸟用的信息,去日志目录继续分析:…...
网络工程师--网络安全与应用案例分析
前言 需要网络安全学习资料的点击链接:【282G】网络安全&黑客技术零基础到进阶全套学习大礼包,免费分享! 案例一: 某单位现有网络拓扑结构如下图所示,实现用户上网功能,该网络使用的网络交换机均为三…...
了解油封对汽车安全的影响?
油封也称为轴封或径向轴封,是车辆发动机、变速箱和其他各种机械系统中的重要部件。它们的主要功能是阻止重要发动机部件的液体(例如油或冷却剂)泄漏,同时防止污染物进入。这些看似简单的任务,但对汽车的安全性和可靠性有着深远的影响。 油封…...
创邻科技Galaxybase—激活数据要素的核心引擎
10月11日下午,创邻科技创始人张晨博士受杭州电子科技大学邀请,前往杭电校园开展交流分享。交流会中,张晨博士为现场的师生带来一场题为《图数据库——激活数据要素的新基建》的精彩分享,探讨数字经济时代底层技术的创新价值与图技…...
【Rust笔记】浅聊 Rust 程序内存布局
浅聊Rust程序内存布局 内存布局看似是底层和距离应用程序开发比较遥远的概念集合,但其对前端应用的功能实现颇具现实意义。从WASM业务模块至Nodejs N-API插件,无处不涉及到FFI跨语言互操作。甚至,做个文本数据的字符集转换也得FFI调用操作系统…...
玻璃生产过程中的窑内压力高精度恒定控制解决方案
摘要:在玻璃生产中对玻璃窑炉中窑压的要求极高,通常需要控制微正压4.7Pa(表压),偏差控制在0.3Pa,而窑炉压力还会受到众多因素的影响,所以实现高稳定性的熔窑压力控制具有很大难度,为…...
创意营销:初期推广的多种策略!
文章目录 🍊 预热🎉 制定预热计划和目标🎉 利用社交媒体传播🎉 创造独特的体验🎉 利用口碑营销🎉 定期发布更新信息🎉 案例说明 🍊 小范围推广🎉 明确目标用户群体&#…...
【小黑嵌入式系统第一课】嵌入式系统的概述(一)
文章目录 一、嵌入式系统基本概念计算机发展的三大阶段CPU——计算机的核心什么是嵌入式系统嵌入式系统的分类 二、嵌入式系统的特点三、嵌入式系统发展无操作系统阶段简单操作系统阶段实时操作系统阶段面向Internet阶段 四、嵌入式系统的应用工业控制 工业设备通信设备信息家电…...
RK平台使用MP4视频做开机动画以及卡顿问题
rk平台android11以后系统都可以使用MP4格式的视频做开机动画,系统源码里面默认使用的是ts格式的视频,其实使用mp4的视频也是可以的。具体修改如下: diff --git a/frameworks/base/cmds/bootanimation/BootAnimation.cpp b/frameworks/base/cmds/bootanimation/BootAnimat…...
通讯网关软件023——利用CommGate X2HTTP实现HTTP访问Modbus TCP
本文介绍利用CommGate X2HTTP实现HTTP访问Modbus TCP。CommGate X2HTTP是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口,现在…...
Python性能测试框架Locust实战教程!
01、认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思:作者的想法是在测试期间,放…...
c++视觉处理---仿射变换和二维旋转变换矩阵的函数
仿射变换cv::warpAffine cv::warpAffine 是OpenCV中用于执行仿射变换的函数。仿射变换是一种线性变换,可用于执行平移、旋转、缩放和剪切等操作。下面是 cv::warpAffine 函数的基本用法: cv::warpAffine(src, dst, M, dsize, flags, borderMode, borde…...
uiautomator2遍历子元素.all()
当你获取了页面某个元素之后 elements d(’//*[clickable“true”]’).all() 返回的是一个list,其中是<uiautomator2.xpath.XMLElement>类型的变量。 可以通过以下方式获取它所有子类的信息。 for ele in elements:children ele.elem.getchildren()注意…...
【手写数据库toadb】SQL字符串如何被数据库认识? 词法语法分析基础原理,常用工具
词法语法分析 专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段…...
手把手教你基于windows系统使用GNVM进行node切换版本
GNVM是什么? GNVM 是一个简单的 Windows 下 Node.js 多版本管理器,类似的 nvm nvmw nodist 。 安装 进入官网,下载你所需要的包,直达链接 下载完成 放到我们的node环境包下,点击运行 请注意区分: 不存在 Node.js 环…...
c#画五角星
c#画一个五角星,最重要的就是计算哪些坐标点出来,也是最难的一部分,这要涉及到一些数学方面的知识.对数学坐标知识不是很熟的人,如果想学画图,我建议多去看一下数学书,对我们写程序的人来说是没有什么坏处可言的. 想学习的朋友可以一起学习,我觉得分享学习是一种快乐,所以把自…...
第三章 数据链路层 | 计算机网络(谢希仁 第八版)
文章目录 第三章 数据链路层3.1 使用点对点信道的数据链路层3.1.1 数据链路和帧3.1.2 三个基本问题 3.2 点对点协议PPP3.2.1 PPP协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP协议的工作状态 3.3 使用广播信道的数据链路层3.3.1 局域网的数据链路层3.3.2 CSMA/CD协议3.3.3 使用集线…...
李沐机器学习环境配置相关
李沐机器学习环境配置相关 condapython环境安装指令安装miniconda安装cpu版本torch安装jupyter测试GPU是否可以使用 conda 退出 conda 环境 conda deactivate进入都d2l环境 conda activate d2l启动jupyter notebook: jupyter notebookpython 列出所有安装的包 pip lsit环…...
零基础Linux_16(基础IO_文件)笔试选择题:文件描述符+ionde和动静态库
目录 一. 文件描述符等 1. Linux下两个进程可以同时打开同一个文件,这时如下描述错误的是: 2. 以下关于标准输入输出错误的描述正确的是 3. 以下描述正确的是 4. 以下描述正确的是 [多选] 5. 在bash中,在一条命令后加入”1>&2”…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
