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

如何快速将YOLOv5数据集转换为Mask-RCNN可用的自定义数据集?

YOLOv5 → Mask-RCNN 数据集快速转换方案

首先必须明确:YOLOv5的标签仅包含目标边界框(类别、中心坐标、宽高),但Mask-RCNN训练需要实例分割掩码——这是核心缺口,直接转换的前提是补全掩码信息,以下是能快速落地的方法:

一、自动生成分割掩码(最快路径)

用预训练的分割模型批量生成掩码,无需手动标注:

  • 推荐用Meta的SAM(Segment Anything Model),它能基于图像或边界框自动生成高精度分割掩码
  • 核心步骤:
    1. 遍历YOLO数据集的图片和标签,把YOLO的相对坐标边界框转换成原图的绝对坐标(x1, y1, x2, y2)
    2. 把每个边界框作为SAM的提示,生成对应目标的分割掩码
    3. 将掩码保存为单通道PNG文件(像素值0为背景,255为目标)
  • 示例代码(简化版):
    import cv2
    import numpy as np
    import os
    from segment_anything import sam_model_registry, SamPredictor
    
    # 加载SAM预训练模型(可根据需求选择vit_b/vit_l/vit_h)
    sam = sam_model_registry["vit_b"](checkpoint="sam_vit_b_01ec64.pth")
    predictor = SamPredictor(sam)
    
    def yolo_to_abs_bbox(yolo_line, img_w, img_h):
        cls, x, y, w, h = map(float, yolo_line.strip().split())
        x1 = int((x - w/2) * img_w)
        y1 = int((y - h/2) * img_h)
        x2 = int((x + w/2) * img_w)
        y2 = int((y + h/2) * img_h)
        return int(cls), (x1, y1, x2, y2)
    
    # 数据集路径配置
    img_dir = "your_yolo_images"
    label_dir = "your_yolo_labels"
    mask_save_dir = "mask_output"
    os.makedirs(mask_save_dir, exist_ok=True)
    
    # 批量处理
    for img_name in os.listdir(img_dir):
        img_path = os.path.join(img_dir, img_name)
        label_path = os.path.join(label_dir, img_name.replace(".jpg", ".txt"))
        if not os.path.exists(label_path):
            continue
        img = cv2.imread(img_path)
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        predictor.set_image(img_rgb)
        img_h, img_w = img.shape[:2]
    
        with open(label_path, 'r') as f:
            lines = f.readlines()
        for idx, line in enumerate(lines):
            cls, bbox = yolo_to_abs_bbox(line, img_w, img_h)
            # 用边界框提示生成掩码
            masks, _, _ = predictor.predict(
                box=np.array([bbox[0], bbox[1], bbox[2], bbox[3]]),
                multimask_output=False
            )
            # 保存掩码文件
            mask = masks[0].astype(np.uint8) * 255
            mask_name = f"{os.path.splitext(img_name)[0]}_cls{cls}_mask{idx}.png"
            cv2.imwrite(os.path.join(mask_save_dir, mask_name), mask)
    

二、转换为Mask-RCNN标准格式

Mask-RCNN常用COCO JSON格式,需要包含图片信息、标注(边界框、掩码RLE编码)、类别映射:

  1. 收集所有图片的尺寸、文件名,为每张图片分配唯一ID
  2. 对每个标注,将YOLO格式的边界框转换为COCO格式(x1, y1, width, height),用pycocotools库将掩码转换为RLE编码
  3. 把所有信息组装成符合COCO规范的JSON文件

三、半自动标注备选(精度优先)

如果自动生成的掩码精度不满足要求,用LabelMe做快速补标:

  1. 用脚本把YOLO的边界框导入LabelMe作为预标注框
  2. 仅需要在预标注框内快速绘制分割掩码(比从头标注快3-5倍)
  3. 导出LabelMe的JSON文件后,用工具转换为COCO格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:40:19