You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YOLOv8模型检测游戏中小鱼类物体的技术求助

解决YOLOv8检测细小带阴影移动鱼类的问题(含切片预处理配合方案)

问题背景

刚入门AI图像识别,自己截游戏截图做数据集,用Roboflow标注、YOLOv8训练模型,但始终没法正确检测游戏里细小、带阴影且移动的鱼类。试过Roboflow的切片(tiling)操作,但不知道代码端怎么配合,求技术帮助。

现有配置

  • 数据集:自行截取的游戏鱼类截图,已在Roboflow完成标注
  • 训练环境:使用官方YOLOv8训练Colab笔记本
  • 当前检测代码(原版本):
import cv2
from ultralytics import YOLO
import supervision as sv
import mss
import numpy as np
import pyautogui
import time

model = YOLO('best.pt')
sct = mss.mss()
monitor = sct.monitors[1]

while True:
    screenshot = sct.grab(monitor)
    img = np.array(screenshot)

    # RGB (3 CHANNEL)
    img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)

    results = model(img)

    for result in results:
        for bbox in result.boxes:
            
            if bbox.cls == 0:  # "fish" 
                x1, y1, x2, y2 = bbox.xyxy[0]

核心问题分析

细小目标本身特征量少,加上阴影干扰、运动模糊,YOLOv8默认逻辑很难捕捉足够特征;切片操作能放大细小目标,但训练与推理阶段的切片逻辑不统一,会导致模型无法正确识别。

解决方案

1. Roboflow端的预处理与增强配置

针对目标特性调整数据集处理逻辑:

  • 预处理:
    • 启用切片(Tiling):设置切片尺寸为640x640(和YOLOv8默认输入尺寸匹配),重叠率10%-20%,确保鱼类被完整包含在子图中
    • 颜色增强:添加HSV通道转换或灰度化,强化鱼类与阴影、背景的区分度
    • 降噪:启用高斯模糊/中值滤波,减少游戏画面的噪点干扰
  • 数据增强:
    • 运动模糊:添加随机运动模糊(角度0-10,模糊度5-15),模拟鱼类移动的动态效果
    • 阴影适配:添加随机亮度/对比度调整、局部阴影覆盖,让模型适应不同阴影强度的目标
    • 常规增强:随机翻转、缩放、平移,避免模型过拟合

2. 代码端配合切片的训练与推理

训练阶段

从Roboflow导出数据集时,选择YOLOv8格式,切片后的标注文件会自动适配子图坐标,直接用原Colab笔记本流程训练即可,无需额外修改训练代码。

推理阶段(检测代码优化)

必须和训练时的切片逻辑对齐,直接用YOLOv8内置的tile参数自动处理切片推理,修改后的代码如下:

import cv2
from ultralytics import YOLO
import supervision as sv
import mss
import numpy as np
import pyautogui
import time

model = YOLO('best.pt')
sct = mss.mss()
monitor = sct.monitors[1]

while True:
    screenshot = sct.grab(monitor)
    img = np.array(screenshot)
    img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)

    # 启用内置切片推理,参数和Roboflow设置的切片尺寸、重叠率一致
    results = model(img, tile=True, tile_size=640, overlap_ratio=0.2)

    # 用supervision简化检测结果处理,避免手动遍历出错
    detections = sv.Detections.from_yolov8(results[0])
    # 筛选鱼类类别(cls=0)
    fish_detections = detections[detections.class_id == 0]

    # 可选:可视化检测框,方便调试
    box_annotator = sv.BoxAnnotator()
    annotated_img = box_annotator.annotate(scene=img.copy(), detections=fish_detections)
    cv2.imshow("Fish Detection", annotated_img)
    
    # 处理检测到的鱼类bbox
    for x1, y1, x2, y2 in fish_detections.xyxy:
        # 这里添加你的业务逻辑,比如自动点击
        # pyautogui.click((x1+x2)/2, (y1+y2)/2)

    # 按q退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

额外优化建议

  • 模型选型:优先用YOLOv8n或YOLOv8s小模型,小模型对小目标响应更快;还可以修改hyp.yaml,增大obj损失权重,让模型更关注小目标
  • 标注检查:确保Roboflow里的标注框完整包裹鱼类(包括阴影部分),不要只框主体
  • 数据集扩充:多收集不同光照、姿态、阴影强度的鱼类样本,提升模型泛化能力

内容的提问来源于stack exchange,提问作者zafer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:15:14