☰
Android端 可使用Yolov5训练 路标识别
2026/10/10 1:17:46 网站建设 项目流程

相信大家对于路标识别,红绿灯识别,图形识别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 > TFLitehttps://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 Archivehttps://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 效果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询