一、项目背景

三角洲行动(Delta Force)是一款射击类游戏,游戏中包含了大量可供识别的UI元素(数字、字母、特殊符号)以及人物角色。如果你需要对这些游戏画面中的元素进行自动识别——例如检测血量数字、击杀信息、人物站位等——那么目标检测模型是一个很实用的方案。

本文记录了使用 Ultralytics YOLO26n 训练一个 目标检测模型的全过程,包括:

  • 数据集制作与划分
  • 模型训练
  • 效果评估(mAP50 达到 0.982)
  • 可视化检测工具(PyQt5)

二、数据集制作

2.1 数据来源

从三角洲行动游戏截图中采集了约 12,000 张 640×640 分辨率的图片,并使用 LabelImg 等工具标注。

2.2 数据划分

通过 split.py 脚本,按照 80% / 10% / 10% 的比例划分训练集、验证集和测试集:

数据集 图片数量
训练集 9,513
验证集 1,189
测试集 ~1,200
合计 ~11,890

数据划分脚本的主要逻辑:

  • 遍历 images/labels/ 目录,确保每张图片都有对应的标签文件
  • 随机打乱后按比例切分
  • 将图片和标签复制到对应的 train/val/test 目录
  • 自动生成 data.yaml 配置文件

三、模型训练

3.1 训练环境

硬件/软件 配置
GPU NVIDIA RTX 5060 Laptop (8GB)
Python 3.10.20
PyTorch 2.11.0 + CUDA 12.8
Ultralytics 8.4.89
训练图像尺寸 640 × 640
Batch Size 8
优化器 MuSGD (lr=0.01)
Epochs 100
训练总耗时 约 5.4 小时

3.2 模型结构

选用 YOLO26n(nano 版本),模型轻量高效:

YOLO26 summary:
  Layers:        260
  Parameters:    2,519,400  (约 2.5M)
  GFLOPs:        5.9

模型来自 Ultralytics 内置的 yolo26.yaml 配置文件,仅将 nc 从默认的 80 改为 40。

3.3 训练命令

from ultralytics import YOLO

model = YOLO("ultralytics/cfg/models/26/yolo26.yaml")

model.train(
    data="../sjz_data/data.yaml",
    epochs=100,
    imgsz=640,
    batch=8,
    device=0,
    workers=2,
    cache=True,
    project="runs",
    name="sjz_yolo26"
)

3.4 训练过程

训练期间使用了 Automatic Mixed Precision (AMP) 加速,测试通过。单 epoch 耗时约 3 分钟左右。

训练开始时(Epoch 1):

  • mAP50 = 0.362

训练结束时(Epoch 100):

  • mAP50 = 0.982
  • mAP50-95 = 0.820
  • Precision = 0.952
  • Recall = 0.939

从 loss 曲线可以看到,box_loss 从 2.79 下降到 0.71,cls_loss 从 6.34 下降到 0.30,dfl_loss 从 0.013 下降到 0.003,收敛效果良好。


四、训练结果

4.1 最终指标

指标 数值
Precision 0.952
Recall 0.939
mAP50 0.982
mAP50-95 0.820
参数量 2.5M
模型大小 5.4 MB
推理速度 1.5ms/张

4.2 推理速度

Speed: 0.2ms preprocess, 1.5ms inference, 0.0ms loss, 0.2ms postprocess per image

单张图片推理仅需 1.5ms,完全可以满足实时检测需求。


五、可视化检测工具

为了方便测试模型效果,基于 PyQt5 开发了一个桌面检测工具。

5.1 界面预览

工具采用现代简约的双栏布局设计:

  • 左侧深灰侧边栏:图片上传、开始检测按钮、置信度阈值滑块、检测结果文本区
  • 右侧浅色主内容区:左右并排展示"原图"和"检测结果",方便对比

5.2 功能特性

  • 支持上传 jpg / png / bmp / tif 等常见图片格式
  • 检测结果实时显示标注框、类别名称和置信度
  • 可调节置信度阈值(0.01 ~ 0.99),边调边测
  • 按类别统计检测数量,person 类单独高亮显示
  • 深色主题,科技感风格

5.3 项目结构

sjz/
├── UI/                      # PyQt5 检测工具
│   ├── main.py              # 启动入口
│   ├── detector.py          # YOLO 推理封装
│   └── ui_main.py           # 图形界面
├── sjz_data/                # 数据集
│   ├── train/images/        # 训练图片
│   ├── val/images/          # 验证图片
│   ├── test/images/         # 测试图片
│   └── data.yaml            # 数据集配置
├── ultralytics-main/
│   ├── train.py             # 训练脚本
│   └── runs/detect/runs/sjz_yolo26/weights/
│       ├── best.pt          # 最佳权重(5.4MB)
│       └── last.pt          # 最后一轮权重
├── split.py                 # 数据集划分脚本
└── train_result.txt         # 完整训练日志

5.4 启动方式

# 进入 UI 目录,确保已安装依赖
cd sjz/UI
python main.py

需要安装的依赖:

pip install ultralytics opencv-python PyQt5 numpy

六、项目总结

成果

  1. 成功训练了一个 40 类目标检测模型,最终 mAP50 达到 0.982
  2. 模型仅 2.5M 参数、5.4MB 大小,轻量到可以在笔记本 GPU 上实时运行
  3. 配套的 PyQt5 可视化工具方便了模型效果的直观测试
  4. 训练耗时仅 5.4 小时(RTX 5060),复现门槛低

可能的改进方向

  • 将模型导出为 ONNX / TensorRT 格式进一步加速推理
  • 增加视频流检测功能(model.predict(source="video.mp4") 即可)
  • 使用更大的 YOLO26s / YOLO26m 模型进一步提高精度
  • 增加数据增强策略,提高模型泛化能力

本文基于真实项目记录,数据来源于三角洲行动游戏截图,代码基于 Ultralytics YOLO26 实现。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐