AI项目十六:YOLOP 训练+测试+模型评估

news2024/11/26 2:33:52

若该文为原创文章,转载请注明原文出处。

通过正点原子的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
 

如有侵权,或需要完整代码,请及时联系博主。

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

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

相关文章

2023软件测试面试题(亲身经历)

在职,5年测试经验,坐标广州,有点想666。于是进行了几场线上面试… 1、python有哪些数据类型 数字型:int/float/bool/complex 字符串:str 列表:list 元组:tuple 字典:dict 集合&…

云原生应用安全性:解锁云上数据的保护之道

文章目录 云原生应用的崛起云原生应用安全性挑战1. **容器安全性**:容器技术如Docker和Kubernetes已成为云原生应用的核心组成部分。容器的安全性变得至关重要,以防止恶意容器的运行和敏感数据泄漏。2. **微服务安全性**:微服务架构引入了多个…

从零开始使用webpack搭建一个react项目

先做一个正常编译es6语法的webpack demo 1. 初始化package.json文件 npm init一路enter下去 2. 添加插件 {"name": "demo","version": "1.0.0","description": "","main": "index.js",&q…

Springboot利用CompletableFuture异步执行线程(有回调和无回调)

目录 背景 实现 一、异步线程配置类 二、自定义异步异常统一处理类 三、实现调用异步(无回调-runAsync()) 四、实现调用异步(有回调-supplyAsync()) 五、异步执行错误异常示例 背景 项目中总会有需要异步执行来避免浪费…

Windows中将tomcat以服务的形式安装,然后在服务进行启动管理

Windows中将tomcat以服务的形式安装,然后在服务进行启动管理 第一步: 在已经安装好的tomcat的bin目录下: 输入cmd,进入命令窗口 安装服务: 输入如下命令,最后是你的服务名,避免中文和特殊字符 service.…

Redis数据类型及命令

目录 (一)通用命令(二)String类型(三)Hash类型(四)List类型(五)Set类型(六)SortedSet类型 在redis命令行查询redis通用命令&#xff1…

如何使用摩尔信使MThings连接网络设备

帽子: 摩尔信使MThings支持Modbus-TCP、Modbus-RTU Over TCP、Modbus-TCP Over UDP、Modbus-RTU Over UDP。 TCP链接中,摩尔信使MThings支持灵活的连接方式,主机可作为客户端也可以作为服务端,同时支持模拟从机以客户端方式向远…

1600*C. Add One(数位DP找规律)

Problem - 1513C - Codeforces 解析: 考虑DP,DP[ i ] 为从 0 开始执行 i 次操作,此时数字的位数。 我们发现当一个9再操作一次就会变成1和0,并且相邻的大部分长度都不会变化,0会影响10次操作之后的位数,1会…

开源自动化测试框架优缺点对比

1. Robot Framework Robot Framework(RF)是用于验收测试和验收测试驱动开发(ATDD)的自动化测试框架。 基于 Python 编写,但也可以在 Jython(Java)和 IronPython(.NET) 上…

网页版微信CRM系统,让微信管理更方便!

微信,作为现在热门的社交软件之一,已经成为商家和消费者交流的主要渠道。但对于客服这类人群来说,一个得管理多个微信号,耗费了他们大量时间精力。 因此,微信CRM 系统应运而生。它可以将多个微信聚合在一个界面中&…

PPO算法逐行代码详解

前言:本文会从理论部分、代码部分、实践部分三方面进行PPO算法的介绍。其中理论部分会介绍PPO算法的推导流程,代码部分会给出PPO算法的各部分的代码以及简略介绍,实践部分则会通过debug代码调试的方式从头到尾的带大家看清楚应用PPO算法在car…

三、静态路由实验

拓扑图: 两个路由器分了三个网段出来,首先对两台PC机进行配置 进入R1路由器对两边链路进行ip配置 对AR2进行相同的配置,然后我们查看R1的路由表,里面有一些直连的信息。 三个网段的设备现在可以互通,我们要实现跨网段…

[数据结构]——单链表超详细总结

带你走进链表的世界 目录:一、线性表的概念二、顺序表三、链表3.1 链表的概念3.2 链表的分类3.3 无头单向非循环链表的实现3.4 带头双向循环链表的实现 四、顺序表和链表的区别和联系 目录: 链表是个优秀的结构,没有容量概念,可以…

Python接口测试 requests.post方法中data与json参数区别

引言 requests.post主要参数是data与json,这两者使用是有区别的,下面我详情的介绍一下使用方法。 Requests参数 1. 先可以看一下requests的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 def post(url, dataNone, jsonNone, **kwargs): r&quo…

STM32CUBEMX_DMA串口空闲中断接收+接收发送缓冲区

STM32CUBEMX_DMA串口空闲中断接收接收发送缓冲区 前言: 我了解的串口接收指令的方式有:在这里插入图片描述 1、接收数据中断特定帧尾 2、接收数据中断空闲中断 3、DMA接收空闲中断 我最推荐第三种,尤其是数据量比较大且频繁的时候 串口配置 …

Vmware Linux虚拟机安装教程(Centos版)

文章目录 1.Vmware-workstation安装软件2.双击下载的安装包开始安装3.打开VMware-workstation,输入密钥4.Centos7.6安装软件5.新建虚拟机6.为虚拟机配置映像文件7.开启虚拟机,配置环境7.1 Install Centos 77.2 选择简体中文字体7.3 软件选择7.4 安装位置…

LeetCode【20】 有效的括号

题型:栈 题目: 代码: public boolean isValidReview(String s) {//(1)从s的i0位置一次开始压栈,遇到左括号压栈,不管是大中小三种,左括号,压//(2&#xf…

基于 EventBridge 轻松搭建消息集成应用

作者:昶风 前言 本篇文章主要介绍基于阿里云 EventBridge 的消息集成能力,结合目前消息产品的需求热点,从能力范围到场景实战,对 EventBridge 的消息集成解决方案进行了概要的介绍。 从消息现状谈起 消息队列作为应用解耦&…

Redis 基础—Redis Desktop Manager(Redis可视化工具)安装及使用教程

Redis Desktop Manager 是一个可视化的 Redis 数据库管理工具,可以方便地查看和操作 Redis 数据库。使用 Redis Desktop Manager 可以大大提高 Redis 数据库的管理效率。 RDM的安装和配置 首先,您需要下载和安装Redis Desktop Manager。 安装完成后&am…

高校教务系统密码加密逻辑及JS逆向——皖南医学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…