news 2026/5/4 12:13:30

从YOLOv3到YOLOv5s6:我的《明日之后》自动采集脚本升级实录(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从YOLOv3到YOLOv5s6:我的《明日之后》自动采集脚本升级实录(附完整代码)

从YOLOv3到YOLOv5s6:我的《明日之后》自动采集脚本升级实录

三年前用YOLOv3写的《明日之后》自动采集脚本,最近打开GitHub发现居然还有人在提issue。看了眼游戏官网——好家伙,这游戏居然还活着!趁着周末把代码翻出来重跑了一遍,结果在RTX 3060上帧率还不到20fps。这性能放在2023年实在说不过去,于是决定用YOLOv5s6彻底重构这个项目。

1. 为什么要从YOLOv3升级到YOLOv5s6

去年帮朋友部署一个工业质检系统时第一次接触YOLOv5,当时就被它的易用性震惊了。相比YOLOv3需要手动编译Darknet的折腾,YOLOv5开箱即用的体验简直像从DOS时代跳到了macOS。

性能对比实测数据

指标YOLOv3-608YOLOv5s6-1280提升幅度
mAP@0.552.3%63.7%+21.8%
推理延迟(ms)48.223.5-51.2%
内存占用(MB)1872896-52.1%

更惊喜的是模型兼容性。原本担心要重新标注数据集,结果发现YOLOv5完全兼容v3的标注格式(中心点+宽高归一化坐标),我的旧数据集直接就能用。PyTorch生态也比Darknet友好太多,想加个TensorBoard监控训练进度?pip install tensorboard就搞定了。

实际测试发现YOLOv5s6在1280x720分辨率下的检测精度,比YOLOv3在608x608下还高出11.4个百分点

2. 训练环境搭建与数据准备

我的开发环境配置:

  • GPU: RTX 3060 12GB
  • CUDA: 11.7
  • PyTorch: 1.13.1
# 创建conda环境 conda create -n yolo5 python=3.8 conda activate yolo5 # 安装依赖 pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117 pip install opencv-python matplotlib pandas seaborn tqdm pyyaml

数据集结构保持与v3时代一致:

datasets/ └──明日之后/ ├── images/ # 存放所有游戏截图 │ ├── scene1.png │ └── scene2.png └── labels/ # 对应标注文件 ├── scene1.txt └── scene2.txt

标注文件示例(class_id center_x center_y width height):

0 0.512 0.723 0.124 0.156 3 0.112 0.456 0.078 0.342

3. 模型训练实战记录

3.1 配置文件详解

创建data/game.yaml配置文件:

# 数据集路径配置 path: ../datasets/明日之后 train: images # 训练集路径(相对path) val: images # 验证集路径 test: # 测试集路径(可选) # 类别定义 nc: 11 # 类别数量 names: ['树', '石头', '草药', '狼', '僵尸', '鹿', '熊', '直升机', '浆果', '蘑菇', '煤']

3.2 启动训练的关键参数

python train.py --img 1280 \ --batch 16 \ --epochs 100 \ --data data/game.yaml \ --weights yolov5s6.pt \ --device 0 \ --optimizer AdamW \ --cache ram

遇到的坑与解决方案

  1. CUDA内存不足:将batch size从32降到16,启用--cache ram将数据集预加载到内存
  2. 过拟合问题:添加--rect参数启用矩形训练,减少图像填充带来的噪声
  3. 类别不平衡:使用--cls 0.5增加分类损失权重

3.3 训练过程监控

YOLOv5内置的TensorBoard日志太香了,实时查看各项指标:

tensorboard --logdir runs/train

重点关注三个指标曲线:

  1. metrics/mAP_0.5- 置信度阈值0.5时的平均精度
  2. metrics/precision- 识别结果的精确率
  3. val/obj_loss- 验证集的目标检测损失

4. 部署优化与性能调优

4.1 模型导出为ONNX格式

import torch model = torch.hub.load('ultralytics/yolov5', 'custom', 'best.pt') model.eval() torch.onnx.export(model, torch.randn(1, 3, 1280, 1280), "game_model.onnx")

4.2 OpenCV加速推理方案

import cv2 net = cv2.dnn.readNetFromONNX("game_model.onnx") blob = cv2.dnn.blobFromImage(img, 1/255.0, (1280,1280), swapRB=True) net.setInput(blob) outs = net.forward()

性能对比

推理方式帧率(fps)GPU占用
PyTorch原生4278%
ONNX+OpenCV5365%
TensorRT加速6852%

4.3 游戏窗口实时捕获方案

import mss import win32gui def capture_game_window(): hwnd = win32gui.FindWindow(None, "明日之后") left, top, right, bottom = win32gui.GetWindowRect(hwnd) with mss.mss() as sct: monitor = {"left": left, "top": top, "width": right-left, "height": bottom-top} img = np.array(sct.grab(monitor)) return img[:,:,:3] # 去除alpha通道

5. 完整代码实现

核心检测类封装:

class GameDetector: def __init__(self, model_path): self.model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_path) self.model.conf = 0.6 # 置信度阈值 self.model.iou = 0.45 # NMS阈值 def detect(self, img): results = self.model(img, size=1280) return results.pandas().xyxy[0] # 返回DataFrame格式结果 def filter_targets(self, results, target_types): targets = [] for _, row in results.iterrows(): if row['name'] in target_types and row['confidence'] > self.model.conf: targets.append({ 'type': row['name'], 'x1': int(row['xmin']), 'y1': int(row['ymin']), 'x2': int(row['xmax']), 'y2': int(row['ymax']) }) return targets

主循环控制逻辑:

def main(): detector = GameDetector("best.pt") while True: start_time = time.time() # 捕获游戏画面 img = capture_game_window() # 执行目标检测 results = detector.detect(img) trees = detector.filter_targets(results, ['树', '石头']) # 显示检测结果 show_detection(img, trees) # 计算帧率 fps = 1 / (time.time() - start_time) print(f"当前帧率: {fps:.2f}")

6. 效果对比与优化建议

升级前后的关键指标对比:

采集效率测试(10分钟)

版本采集次数误采率平均帧率
YOLOv38712.6%18.2fps
YOLOv5s61425.3%47.5fps

几个实用优化技巧:

  1. 启用--half参数使用FP16精度,推理速度提升20%+
  2. 对于固定场景,使用--rect矩形推理减少图像变形
  3. 调整--conf-thres--iou-thres平衡精度与速度

在Mumu模拟器上最终实现了稳定50fps的检测速度,比旧版本快近3倍。最让我意外的是YOLOv5s6的功耗控制——GPU温度始终保持在65℃以下,风扇噪音比v3时代小多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 12:10:38

暗黑破坏神2存档修改终极指南:d2s-editor完全使用手册

暗黑破坏神2存档修改终极指南:d2s-editor完全使用手册 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备的无尽循环?是否想要快速测试不同的角色build却受限于等级&a…

作者头像 李华
网站建设 2026/5/4 12:03:39

R3nzSkin国服换肤工具完整指南:零风险解锁英雄联盟全皮肤体验

R3nzSkin国服换肤工具完整指南:零风险解锁英雄联盟全皮肤体验 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否曾羡慕别人拥有的稀有英…

作者头像 李华
网站建设 2026/5/4 12:03:28

内容创作场景下如何利用Taotoken多模型能力优化文案生成效果

内容创作场景下如何利用Taotoken多模型能力优化文案生成效果 1. 多模型选型在内容创作中的价值 内容创作者在日常工作中需要应对多种文案风格需求,从社交媒体短文到深度行业分析,不同场景对语言风格、知识广度和创意水平的要求差异显著。传统单一模型方…

作者头像 李华
网站建设 2026/5/4 12:02:38

为什么Awesome Bootstrap Checkbox比JavaScript解决方案更优秀?

为什么Awesome Bootstrap Checkbox比JavaScript解决方案更优秀? 【免费下载链接】awesome-bootstrap-checkbox ✔️Font Awesome Bootstrap Checkboxes & Radios. Pure css way to make inputs look prettier 项目地址: https://gitcode.com/gh_mirrors/aw/aw…

作者头像 李华