首页
智算服务
AI 生态大厅
算力商情政策资讯合作与生态场景方案关于我们
控制台

告别Labelme标注烦恼:一个Python脚本搞定YOLO11数据集制作与自动划分

发布日期:2026-03-28 来源:CSDN软件开发网作者:CSDN软件开发网

自动化脚本的核心设计思路

  优秀的自动化工具应该像瑞士军刀一样兼具功能完备和易用性。我们设计的脚本需要同时解决三个关键问题:

  • 格式转换:将Labelme的JSON多边形标注转换为YOLO格式的归一化坐标
  • 数据清洗:自动过滤未标注的图片文件
  • 智能划分:按比例随机分割训练集和验证集

脚本架构概览

def main():
    # 1. 初始化路径和参数
    config = load_config()
    # 2. 数据清洗阶段
    clean_data(config)
    # 3. 格式转换阶段
    convert_labelme_to_yolo(config)
    # 4. 数据集划分
    split_dataset(config)

  脚本设计采用模块化结构,每个功能独立成函数,方便后期维护和功能扩展。

关键技术实现细节

2.1 智能数据清洗机制

  原始数据中常混入未标注的图片,传统方法是人工筛选,我们的脚本通过自动配对机制解决:

def clean_data(config):
    img_files = glob.glob(f"{config.input_dir}/*.{config.img_ext}")
    for img_file in img_files:
        json_file = img_file.replace(f".{config.img_ext}", ".json")
        if os.path.exists(json_file):  # 只有配对的图片才会被保留
            shutil.copy(img_file, config.clean_dir)
            shutil.copy(json_file, config.clean_dir)

  文件处理流程:

  1. 扫描输入目录的所有图片文件
  2. 检查是否存在同名JSON标注文件
  3. 仅保留成对的图片和标注文件

2.2 精准的坐标转换算法

  Labelme使用像素坐标,而YOLO需要归一化的中心坐标,转换算法需要考虑边界情况:

def convert_bbox(size, box):
    """
    将[xmin, xmax, ymin, ymax]转换为[x_center, y_center, width, height]
    """
    dw, dh = 1. / size[0], 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    return (x * dw, y * dh, w * dw, h * dh)

  注意:转换后的坐标值必须在0-1之间,脚本会自动处理越界情况。

本文转载自CSDN软件开发网, 作者:CSDN软件开发网, 原文标题:《 告别Labelme标注烦恼:一个Python脚本搞定YOLO11数据集制作与自动划分 》, 原文链接: https://blog.csdn.net/weixin_30752699/article/details/159558884。 本平台仅做分享和推荐,不涉及任何商业用途。文章版权归原作者所有。如涉及作品内容、版权和其它问题,请与我们联系,我们将在第一时间删除内容!
本文相关推荐
暂无相关推荐