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 效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓开发日志采集和分析面面谈

日志面面谈 为什么需要日志 复现问题,回溯到问题产生时候的系统状态,有利于定位和分析问题。 安卓日志有哪些? cpu 关注的纬度: 单个应用使用系统cpu分配温度 有什么用: App卡顿、ANRApp异常退出 怎么用&…

记一次 .NET某企业数字化平台 崩溃分析

一:背景 1. 讲故事 前些天群里有一个朋友说他们软件会偶发崩溃,想分析看看是怎么回事,所幸的是自己会抓dump文件,有了dump就比较好分析了,接下来我们开始吧。 二:WinDbg 分析 1. 程序为什么会崩溃 win…

从0开始回顾ElasticSearch

1 elasticsearch概述 1.1 elasticsearch简介 官网: https://www.elastic.co/ ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的…

芯课堂 | 芯片抗干扰测试方案

MCU芯片对所在环境中存在的电磁干扰须具有一定程度的抗扰度,确保使用该芯片的设备能正常运行。国际电工委员会(IEC)制定了多项国际标准,其中与MCU芯片相关的有IEC61000-4-2 (静电), IEC61000-4-…

RK3568笔记二十六:音频应用

若该文为原创文章,转载请注明原文出处。 一、介绍 音频是我们最常用到的功能,音频也是 linux 和安卓的重点应用场合。 测试使用的是ATK-DLR3568板子,板载外挂RK809 CODEC芯片,RK官方驱动是写好的,不用在自己重新写。…

家居的3D交互展示用什么工具比较专业?

家居的3D交互展示可以使用多种专业工具来实现,这些工具不仅能够在手机和电脑上查看,还能在手机上进行交互操作,如放缩、旋转等,并且支持高清流畅的画面展示。以下是一些推荐的3D交互展示工具: 1、在线3D展示软件&…

牛客热题:寻找第K大

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:寻找第K大题目链接方法一&#…

Docker基础篇之Docker入门介绍

文章目录 1. 为什么要有Docker?2. Docker简介3. 容器和虚拟机的区别4. Docker下载 1. 为什么要有Docker? 假设我们现在正在开发一个项目,使用的是一台笔记本电脑而且开发环境具有特定的配置,其他开发人员身处的环境配置也各不相同…

ZeroTier+Nomachine远程

目录 前述:一、Zero二、Nomachine 前述: 需要远程控制时,服务端与客户端都必须下载这两个软件!远程主机(被控制的主机)和远程客户端(控制主机的用户)都必须具有网络连接,…

地铁判官:啥时候B端系统界面,也出个“判官”,讲好不准打脸。

小编所在的城市——山东青岛,出了个地铁判官,我看了视频,哈哈哈,俗世的判断标准就是那么简单直接,而放到B端系统那就难说啦。 如何判断B端系统的优劣,各位看官,各抒己见吧。 判断B端系统界面的…

如何深入理解、应用及扩展 Twemproxy?no.15

Twemproxy 架构及应用 Twemproxy 是 Twitter 的一个开源架构,它是一个分片资源访问的代理组件。如下图所示,它可以封装资源池的分布及 hash 规则,解决后端部分节点异常后的探测和重连问题,让 client 访问尽可能简单,同…

揭秘:如何使用Python统计女友生日还剩几天?

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要统计生日天数? 二、需求分析与准备 1. 用户输入格…

为什么我们会固执己见、为什么我们总认为自己是对的?

人为什么固执己见,是其所是,而非其所非?我们要有什么样的思维模式才能使自己有良好的判断力,才能作出恰当的预测和良好的决定呢?作者Julia Galef对TED发表演讲时提出自己的观点。以下是演讲的文字实录。 我想让你们想象…

spring boot 之 结合aop整合日志

AOP 该切面仅用于请求日志记录&#xff0c;若有其他需求&#xff0c;在此基础上扩展即可&#xff0c;不多逼逼&#xff0c;直接上代码。 引入切面依赖 <!-- 切面 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>sp…

如果查看svn的账号和密码

一、找到svn存放目录&#xff08;本地默认存放SVN用户信息的目录为&#xff1a;C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple&#xff09;每个人的电脑环境不一样&#xff0c;因人而异。 如果找不到直接搜索svn.simple 二、下载密码查看工具 链接: 百…

面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?

大家好&#xff0c;我是瑶琴呀。 面试被问到不懂的东西&#xff0c;是直接说不懂还是坚持狡辩一下&#xff1f;这个问题可以转变一下&#xff0c;如果你顺利拿到 offer&#xff0c;公司安排的工作跟你之前的技术和经验不匹配&#xff0c;你还愿意干下去吗&#xff1f; 转变一…

条款7:千万不要重载,||和,操作符

&&和|| 和C一样&#xff0c;C对于“真假值表达式”采用所谓的“骤死式”评估方式。意思是一旦该表达式的真假值确定&#xff0c;即使表达式中还有部分尚未检验&#xff0c;整个评估工作仍告结束。 举个例子&#xff0c;在下面情况中: char *p; ... if ((p!0)&&a…

单片机超声波测距+WTD588D语音播报的设计

第一章 绪论 1.1 课题设计目的及意义 1.1.1设计的目的 随着科学技术的快速发展&#xff0c;超声波在测距中的应用越来越广。但就目前的急速水平来说&#xff0c;人们可以具体利用的测距技术还十分有限&#xff0c;因此&#xff0c;这是一个正在蓬勃发展而又有无限前景的技术…

基于51单片机多功能太阳能充电器设计

1 绪论1.1 本课题研究背景及现状 当代社会随着一些不可再生资源如煤炭&#xff0c;石油等日益减少&#xff0c;使得各国社会经济越来越受能源问题的约制&#xff0c;因此许多国家开始逐渐的实行“阳光计划”&#xff0c;开发洁净的能源如太阳能&#xff0c;用以成为本国经济发…

C++多态总结与原理、菱形继承问题

文章目录 多态什么是多态 多态的定义及实现多态的构成条件虚函数 虚函数的重写虚函数重写的两个例外协变 重写C11 override 和 final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承小结 多态的原理虚函数表多态的原理动态绑定与静态绑定 单继承和多继承关…