当前位置: 首页 > news >正文

详细介绍:广告点击场景下的 YOLO-world 模型训练失败及其解决办法

广告点击场景下的 YOLO-world 模型训练失败及其解决办法

背景

我们要通过ADB指令,在局域网下控制手机行为(点击、滑动、启动app)。但要完成这样的控制,需要对于手机屏幕元素(关键文字、关键UI元素)的准确识别。文本识别,用paddleocr就不错(对比过3种ocr模型,paddleocr识别得更恰当些),能应对80%以上的场景;但不够随心所欲。

用YOLO识别UI元素,作为一种不可缺少的场景识别的补充。例如:

当我们认为 644个金币不值得点击观看广告,或,如果点击容易引导背后的算法逐步降低我们每次点击获取的金币量,我们就要点击底下这个 ×,来退出本次弹窗 。但很显然,文本识别 paddleocr 没办法认知这个 x。

类似这样的场景并不少。paddleocr无法解决,只能让yolo上。

在这里插入图片描述


当前面临的问题,是 YOLO-world 模型训练失败,评价参数没有值。
在这里插入图片描述
当前错误状态分析
日志中,​验证集指标全为 0 是核心异常点,需优先排查以下问题:
​1. 验证集加载失败:检查验证集路径是否正确、数据是否被正确读取(如文件路径错误、权限问题)。
2. ​标注格式错误:验证集标签(如 XML、JSON、TXT)是否与模型预期格式匹配(如类别 ID 超出范围、坐标格式错误)。
​3. 模型预测全错:训练初期模型参数随机,可能导致预测全错,但 mAP50 也应为 0?需检查代码中 mAP 计算逻辑是否有 Bug。
4. ​数据不均衡/无目标:验证集是否全是背景类(无目标)?或目标类别与训练集不匹配?

训练指标的优化方向(当前损失未下降的潜在原因)
若验证集指标修复后仍存在“损失震荡/不下降”,可参考以下方向:
5. ​学习率:学习率过高会导致损失震荡,过低则收敛慢。可尝试调整学习率策略(如余弦退火、分段下降)。
​6. 数据增强:增加数据增强(如旋转、缩放、马赛克)缓解过拟合,提升泛化能力。
​7. 模型结构:Backbone 过于简单(特征提取不足)或过于复杂(过拟合)都可能导致损失异常,需匹配任务难度。
​8. 损失函数超参数:YOLO 的损失包含权重系数(如 box_gain、cls_gain),需确保各损失权重平衡。
综上,当前训练的核心问题是验证集指标异常(全0)​,需先解决数据加载/验证流程问题;其次,训练损失的震荡也需结合学习率、数据增强等方向优化。


代码

import os
from ultralytics import YOLOWorld
model = YOLOWorld('yolov8s-worldv2.pt')
# 训练
results = model.train(
data=r"./ad.yaml",
epochs=100,
imgsz=640,
lr0=0.001  # 手动设置初始学习率为 0.001
)

样本标注与识别目标

标注格式用的YOLO的txt输出格式
在这里插入图片描述


样本构成

(1)负样本
共169张无目标图像,对应169个空的标注文件
在这里插入图片描述
在这里插入图片描述
(2)正样本
全量正样本
攒了2652张正样本,打算采取分批少量标注,训练模型后逐次自动标注,人工核对后逐步扩充样本集的半自动标注策略。
在这里插入图片描述
已标注正样本
目前只标注了28张
在这里插入图片描述
在这里插入图片描述
当前训练中,训练集和验证集均为28张正样本。试过添加169张负样本,训练后的模型评价一样无效。


解决思路

错误状态分析给出的思路中,个人认为问题更有可能出在如下几个点:样本少 + 不均衡、标注不正确(类别混乱)、模型参数量大小不匹配、学习率设置不当。

  1. 排除“标注不正确(类别混乱)”:打开labelImg重新查看标注类别和框选区域,也深入查看标注文件中的类别标注数据,看不出来有什么问题;“标注不正确”的情况 先做排除;
  2. 排除“模型参数量大小不匹配”
    前面的模型训练代码针对的是开放世界 YOLO-world 模型,一般参数量就是大一些。所以,我们要减少参数量,首要的,是要整体上换成普通的yolo模型,我们换个参数量最小的模型试试:
    在这里插入图片描述
    yolov5n卡死无法下载(可能路径不维护了),换成yolov8n后模型可以下载了。
    相应的,我们的代码修改如下:
from ultralytics import YOLO  # 注意这里是 YOLO,不是 YOLOWorld
# 加载 YOLOv8n 模型(标准目标检测模型)
model = YOLO('yolov8n.pt')  # 这是官方 YOLOv8n 检测模型
# 开始训练
results = model.train(
data=r"./ad.yaml",      # 你的数据集配置文件
epochs=100,             # 训练 100 轮
imgsz=640,              # 输入图像尺寸
lr0=0.005               # 初始学习率(你可以根据需要调整)
)

效果:
在这里插入图片描述
虽然训练结果看起来还不太稳定,但关键参数是都有了。
就这么简单??就是参数量与样本量不匹配的问题?
回看训练过程,参数至少看起来已能达到很好的效果了。看来是对症结一抓一个准了。
在这里插入图片描述
增加训练到 10000 epoch,750早停了,效果较好。看来深层原因是找到了。
在这里插入图片描述


小结

换了一个模型后,效果已达标。所以,基本确定,本次模型训练失败的原因, 是模型结构和参数与样本数据量、复杂度不匹配的问题。
可能仍存在别的问题,但当前效果已可用,暂不做其它增强,先往下做样本的自动标注

http://www.jsqmd.com/news/2190/

相关文章:

  • 【深度学习计算机视觉】06:目标检测内容集
  • c语言数组与指针
  • 开发微信机器人/微信协议/个人微信api接口
  • 二维差分模板
  • 深入解析:frp实现内网穿透,公网服务器或云服务器配置frps,本地内网配置frpc
  • HDFS读写机制深度解析:分布式存储的核心奥秘 - 指南
  • debian13 无法正常从休眠中恢复
  • 【五行】根据天干、地支、生肖起姓名(9月出生的宝宝可参考)
  • 全差分放大器(FDA)电路设计计算问题及电压范围估算[原创www.cnblogs.com/helesheng]
  • 详细介绍:Java与Vue构建资产设备全周期管理系统,覆盖采购、入库、使用、维护至报废全流程,支持移动端实时操作与后台智能管理,提供完整源码便于二次开发
  • 使用WTAPI开发智能微信机器人文档
  • [Android]自定义view - 详解
  • 【GPT入门】第58课 感性认识Imdeploy介绍与实践 - 详解
  • 不定高元素动画实现方案(下)
  • Zabbix7 监控USG6300E 并发IPv4会话数 - 教程
  • F010 Vue+Flask豆瓣图书推荐大素材可视化平台系统源码
  • 记一次debian13 进入紧急模式
  • 详细介绍:C 语言:第 20 天笔记:typedef(类型重命名规则、应用场景与实战案例)
  • 企业如何选择适合自身行业的ERP系统?
  • Rust 登堂 之 Sized和不定长类型 DST(七) - 实践
  • Screaming Architecture:让架构自己说话
  • BOE(京东方)携手UNESCO联合主办WCBR“科学十年”分会 彰显中国科技企业可持续发展实力
  • 使用Cyclops.PdfKit根据pdf模板生成pdf文件
  • 二级制流量算法熵值计算,N-Gram 算法(二:改进) - 教程
  • 一款文本编辑器的介绍
  • 随笔-决战保研篇
  • 科研人必知:293F与HEK293细胞在蛋白表达中的不同“超能力”
  • 面试讲解
  • 如何使用C语言实现Vigenre密码加解密
  • 嵌入式硬件工程师每日提问 - 指南