Android端 可使用Yolov5训练 路标识别

相信大家对于路标识别,红绿灯识别,图形识别opencv中也是一件烦人的事情,其参数是及其受到现实环境因素的影响的,那么今天我就给大家推荐一种方式,缺点是周期长,但其优点是如果训练效果好久对于环境的各种变化的适应性增强了。

目录

一、环境搭建

1.1 Python3.9

1.2 YOLOv5        

1.3 labelimg 

1.4 Cuda

1.4.1 安装Cuda

1.4.2 pytorch下载

1.4.3 运行

1.5可能遇到的问题

二、开始工作

2.1 训练模型

2.1.1 创建训练的数据集(图片+标记好的txt文件)

2.1.2 类别声明 以及 数据集目标指引

2.1.3 超参(根据自身需要注意改的地方即可)

2.2 预测模型

三、我们可以部署在安卓移动端 --tflite


一、环境搭建

1.1 Python3.9

我们需要使用Anaconda3创建一个Python3.9的环境,这是为了后续方便使用labelimg进行数据标记和yolov5中需要的pytorch对应需要的环境   

我的环境变量的导入信息

Py3.9的包

1.2 YOLOv5        

YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLiteicon-default.png?t=N7T8https://github.com/ultralytics/yolov5


 

下载好后在不包含中文目录的yolov5的cmd中运行下载其中指定包的版本

pip install -r requirements.txt -i  https://pypi.tuna.tsinghua.edu.cn/simple

1.3 labelimg 

在cmd中或者conda的管理员的控制台下,使用pip下载labelimg即可

pip install labelimg

如何标记标记顺序

1.4 Cuda

使用GPU训练项目(我们需要将YOLO中的框架修改下从默认的CPU训练转变成GPU训练模式)

或者这样查询

nvidia-smi

1.4.1 安装Cuda

CUDA Toolkit Archiveicon-default.png?t=N7T8https://developer.nvidia.com/cuda-toolkit-archive

为了稳定性和pytorch版本我选择的是11.8

我选择的是本地local安装然后一直点就对了,最终我们在Program Files中可以找见

在环境变量中关于英伟达的信息我有以下配置

1.4.2 pytorch下载

在这里我试过也看很多地方适配的是2.1.0版本

安装这2.7GB的pytorch最好和Cuda本地安装的时候找一个良好的网络环境进行安卓

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

1.4.3 运行

代码中的需要修改使得GPU才是训练的device

运行查看是不是已经是GPU了

1.5可能遇到的问题

Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized

在指定下载好环境的env下:删除..\Anaconda3\envs\指定下载好环境\Library\bin\libiomp5md.dll

可能存在两块GPU的情况

在网上找见对应的电脑怎么开启独显

二、开始工作

2.1 训练模型

更具上述所说过的我们需要训练一个权重模型pt

官方给的图片

2.1.1 创建训练的数据集(图片+标记好的txt文件)

我们先将所有的信息如图下图防止在一起

在data文件夹下创建datasets文件夹其分支下在创建images和labels,在这两个新分支下均创建test和train和val文件夹用于后续存放内容

datasets
    ├── images
    │   ├── test
    │   ├── train
    │   └── val
    └── labels
        ├── test
        ├── train
        └── val

将标记好的图片放置在images下的train和val中分别的两份;在labels下的train和val中放置txt文件

随后我们将需要预测的图片放置在data的images文件下

2.1.2 类别声明 以及 数据集目标指引

  • 我们在data的test.yaml(没有就自己创建一个)中写
train: ./data/datasets/images/train  # 训练集图像文件目录
val: ./data/datasets/images/val  # 验证集图像文件目录
test: ./data/datasets/images/test
# Classes
nc:   # 类别数
names: [ 
]

在上述的class.txt中找到补全nc和names,names切记是字符串形式的。

  • 在train.py文件中parse_opt
parser.add_argument("--data", type=str, default=ROOT / "data/test.yaml", help="dataset.yaml path")
parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/test.yaml", help="hyperparameters path")

注意好迭代次数

parser.add_argument("--epochs", type=int, default=5, help="total training epochs")

  • 同样的下面预测模型detect.py文件准确度中parse_opt的时候
parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)")

2.1.3 超参(根据自身需要注意改的地方即可)

data文件夹下的hyps的test.yaml中写,超参设置要合理,否则就会影响概率模型。

如左右和上下翻转的参数同时存在来说

比方说:数字9和数字6在一定程度上会识别成一个东西。

lr0: 0.01  # 初始学习率 (SGD=1E-2, Adam=1E-3)
lrf: 0.2  # 循环学习率 (lr0 * lrf)
momentum: 0.937  # SGD momentum/Adam beta1 学习率动量
weight_decay: 0.0005  # 权重衰减系数
warmup_epochs: 3.0  # 预热学习 (fractions ok)
warmup_momentum: 0.8  # 预热学习动量
warmup_bias_lr: 0.1  # 预热初始学习率
box: 0.05  # iou损失系数
cls: 0.5  # cls损失系数
cls_pw: 1.0  # cls BCELoss正样本权重
obj: 1.0  # 有无物体系数(scale with pixels)
obj_pw: 1.0  # 有无物体BCELoss正样本权重
iou_t: 0.20  # IoU训练时的阈值
anchor_t: 4.0  # anchor的长宽比(长:宽 = 4:1)
# anchors: 3  # 每个输出层的anchors数量(0 to ignore)
#以下系数是数据增强系数,包括颜色空间和图片空间
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015  # 色调 (fraction)
hsv_s: 0.7  # 饱和度 (fraction)
hsv_v: 0.4  # 亮度 (fraction)
degrees: 0.0  # 旋转角度 (+/- deg)
translate: 0.1  # 平移(+/- fraction)
scale: 0.5  # 图像缩放 (+/- gain)
shear: 0.0  # 图像剪切 (+/- deg)
perspective: 0.0  # 透明度 (+/- fraction), range 0-0.001
flipud: 0.5  # 进行上下翻转概率 (probability)
fliplr: 0.0  # 进行左右翻转概率 (probability)
mosaic: 1.0  # 进行Mosaic概率 (probability)
mixup: 0.0  # 进行图像混叠概率(即,多张图像重叠在一起) (probability)
copy_paste: 0.0

由于数据集作为实验需要不便展示所以就以yolo官方的来

2.2 预测模型

我们将上面训练好的模型取出best.pt吧,其为在迭代中遇到最好的模型了

我们将模型取出放置在文件夹下,替换我们的模型

三、我们可以部署在安卓移动端 --tflite

在export.py中parse_opt改造一下

weights是需要被转化你的权重
imgsz是320才是被支持的
parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path")
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "这里是指定的模型名称.pt", help="model.pt path(s)")parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[320, 320], help="image (h, w)")
parser.add_argument("--batch-size", type=int, default=1, help="batch size")
parser.add_argument("--device", default="0", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")parser.add_argument("--include",nargs="+",default=["tflite"],help="torchscript, onnx, openvino, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle",)

同样的用官方的资源最终

3.1 效果

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

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

相关文章

django在线考试系统-计算机毕业设计源码78268

摘 要 本论文主要论述了如何使用python语言、Django框架开发一个在线考试系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的&#xf…

阿里云产品DTU评测报告(三)

这阿里云产品DTU评测报告(三) 连接物联网平台创建项目 连接物联网平台 在开始连接物联网平台之前,首先需要下载开发工具Visual Studio Code 开发工具,开发工具可以到https://code.visualstudio.com/ 去查找下载,下载完…

安泰电子:功率放大器的选择方法有哪些

选择适合的功率放大器是实现电子系统中的关键步骤之一。以下是一些选择功率放大器的常用方法和考虑因素: 功率需求:首先确定你的系统需要多大的功率输出。功率输出需求通常由被驱动设备的功率要求决定。计算出所需功率后,选择一个具有适当功率…

GaussDB数据库的备份与恢复

1.逻辑备份-gs_dump gs_dump是一款用于导出数据库相关信息的工具,支持导出完整一致的数据库对象(数据库、模式、表、视图等)数据,同时不影响用户对数据库的正常访问。 备份sql语句 gs_dump是openGauss用于导出数据库相关信息的工…

Redis使用Set实现点赞功能

文章目录 set 数据类型介绍不排序实现排序实现 set 数据类型介绍 Redis中的set类型是一组无序的字符串值。 set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令: SADD key member1 [member2]&a…

不可错过的数据存储指南:JVS物联网平台存储策略详解

在物联网时代,数据的采集、存储和分析成为了关键环节。随着设备点位不断生成大量数据,如何高效地管理和保存这些数据,同时考虑存储成本和后续的数据分析价值,成为了亟待解决的问题。JVS物联网平台提供了灵活多样的存储策略&#x…

【BI 可视化插件】怎么做? 手把手教你实现

背景 对于现在的用户来说,插件已经成为一个熟悉的概念。无论是在使用软件、 IDE 还是浏览器时,插件都是为了在原有产品基础上提供更多更便利的操作。在 BI 领域,图表的丰富性和对接各种场景的自定义是最吸引人的特点。虽然市面上现有的 BI 软…

常见web安全漏洞

一、信息泄露 概念 信息泄露是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信 息,如用户名、密码、源代码、服务器信息、配置信息等。 造成信息泄露主要的三个原因: ①Web服务器配置存在问题,导致一些系统…

爬山算法教程(个人总结版)

背景与简介 爬山算法(Hill Climbing Algorithm)是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法,通过不断尝试从当前解出发,在其邻域内寻找更优的解,直到无法找到更优解为止。该算法得名于其类似于登山…

油猴(Tampermonkey)如何实现网站的自动化操作

1. 安装油猴插件:首先,在你使用的浏览器上安装油猴插件。油猴支持多种浏览器,如Chrome、Firefox等。你可以在对应的插件商店中搜索并安装油猴插件。 2. 创建用户脚本:打开油猴插件的管理界面,点击"新建脚本"…

外贸电商数据分析实战指南

亮数据浏览器https://www.bright.cn/proxy-types/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie 引言 在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而…

kyuubi/spark3的catalog 多个数据源配置

在使用kyuubi 的时候,有多个集群,老集群上是hive2,新集群hive3 ,想通过一个网关访问多个集群,或者通过jdbc访问mysql,oracle的数据,这样不用来回数据导入导出。spark 支持跨库访问数据,在spark 中提供两种方…

QtXlsx库编译使用

文章目录 一、前言二、Windows编译使用2.1 用法①:QtXlsx作为Qt的附加模块2.1.1 检验是否安装Perl2.1.2 下载并解压QtXlsx源码2.1.3 MinGW 64-bit安装模块2.1.4 测试 2.2 用法②:直接使用源码 三、Linus编译使用3.1、安装Qt5开发软件包:qtbas…

【权威出版】2024年城市建设、智慧交通与通信网络国际会议(UCSTCN 2024)

2024年城市建设、智慧交通与通信网络国际会议 2024 International Conference on Urban Construction, Smart Transportation, and Communication Networks 【1】会议简介 2024年城市建设、智慧交通与通信网络国际会议即将盛大召开,这是一次聚焦城市建设、智慧交通与…

四轮麦轮平衡车四个轮子安放位置要求,以及编码器测速注意事项(强调,否则无法正常平移)——基于STM32F103ZET6

轮子推荐ABBA,当然BAAB也可以 如图安放: 这两种安防位置可以实现平移效果 若要实现平移则需要先实现PID控制平衡,这里用到520编码电机,相较于370电机他的动力更足,在调节PID时能节约不少时间而且更加容易。 需要注意…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库,老git库上部分提交用户在新git库上没有,解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选,保存配置即可。

qt实现秒表功能

最近项目里需要一个计时功能,可以实现暂停,继续,结束,开始的功能,如同秒表一样,我就写了一个demo,效果如图: 代码如下: #ifndef WIDGET_H #define WIDGET_H#include &l…

深入解析与实现:变分自编码器(VAE)完整代码详解

VAE理论上一篇已经详细讲完了,虽然VAE已经是过去的东西了,但是它对后面强大的生成模型是很有指导意义的。接下来,我们简单实现一下其代码吧。 1 VAE在minist数据集上的实现 完整的代码如下,没有什么特别好讲的。 import cv2 im…

【代码随想录】【算法训练营】【第20天】 [654]最大二叉树 [617]合并二叉树 [700]二叉搜索树中的搜索 [98]验证二叉搜索树

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 19,一个愉快的周日~ day 20,一个悲伤的周一~ 题目详情 [654] 最大二叉树 题目描述 654 最大二叉树 解题思路 前提:构造二叉树 思路:寻找根节…

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…