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

YOLO训练自定义数据集出现Wrong annotation标签越界报错排查

问题根本原因
  • 核心触发源是标签坐标完全不符合YOLO框架的格式规范。YOLO全系列训练框架要求标签遵循 class_id x_center_norm y_center_norm width_norm height_norm 的存储格式,坐标为图像像素尺寸归一化后的浮点数,取值严格限定在[0,1]区间。当前所有标签文件内的坐标是未做归一化的原始像素绝对值,数值范围从个位数到两千多,完全超出合法取值区间,因此被合法性校验拦截。
  • 之前的批量替换操作完全没有触碰到报错根因:仅修改类别ID的字符串替换逻辑,没有完成像素坐标到归一化坐标的换算流程,因此改完类别ID后依然会触发同类越界报错。
  • 原替换脚本存在次生风险:脚本直接匹配字符串 '101 ' 做替换,很可能误把坐标值中恰好出现的"101 "字符串片段替换为 '0 ',进一步打乱原有标注的数值结构。
落地解决方案
  • 第一,终止使用已经被错误脚本批量修改过的标签文件,重新从Open Images数据集的原始标注文件导出数据,避免之前的字符串替换带来的标注错乱问题。
  • 第二,严格按照YOLO格式要求完成标注转换,流程如下:
    1. 逐张匹配对应图像的实际像素尺寸(图像宽度W、图像高度H)
    2. 将Open Images原始的绝对像素边界框坐标(通常存储为xmin、ymin、xmax、ymax,即左上角、右下角的像素位置)换算为YOLO要求的中心坐标+宽高格式:
      • 归一化中心点x = (xmin + xmax) / 2 / W
      • 归一化中心点y = (ymin + ymax) / 2 / H
      • 归一化框宽度 = (xmax - xmin) / W
      • 归一化框高度 = (ymax - ymin) / H
    3. 对换算后的坐标值做边界截断处理:所有小于0的坐标值直接修正为0,所有大于1的坐标值直接修正为1,消除越界触发的校验报错。
    4. 按照自定义类别的索引列表重新映射类别ID,禁止使用简单的全局字符串替换处理类别值。
  • 第三,正式启动训练前,运行批量校验脚本扫描所有标签文件:逐行读取每个txt内的5个字段,校验除类别ID外的4个坐标值是否全部落在[0,1]区间,输出所有不满足要求的文件路径,修正完成后再启动训练流程。

注意:YOLO框架的标签校验逻辑只会拦截坐标越界的问题,不会主动替你完成像素值到归一化值的换算,必须在标签生成阶段就保证格式合规。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 17:54:04