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

YOLOv8实例分割(多边形标注)位置数据增强技术问询

针对YOLOv8多边形标注的数据增强方案

一、直接用YOLOv8内置增强(最简便)

YOLOv8的ultralytics库原生支持多边形标注(格式为每行class_id x1 y1 x2 y2 ... xn yn)的自动增强,无需手动修改坐标。只需在训练时配置对应参数即可:

  • 训练命令中直接指定增强:
    yolo segment train data=your_data.yaml model=yolov8n-seg.pt epochs=100 augment=True
    
  • 也可在your_data.yaml中定制增强细节:
    augment:
      rotate: 0.5       # 最大旋转弧度(≈28.6度)
      flipud: 0.5       # 上下翻转概率
      fliplr: 0.5       # 左右翻转概率
      scale: 0.5        # 缩放范围(原图的0.5-1.5倍)
      translate: 0.1    # 平移范围(相对图像尺寸的比例)
    

YOLOv8会自动同步处理图像和多边形坐标,所有旋转、翻转、缩放、平移操作都会实时映射到标注点上。

二、自定义增强脚本(灵活控制)

如果需要更定制化的逻辑,可使用Albumentations库实现图像与多边形坐标的同步变换:

  1. 安装依赖:
    pip install albumentations opencv-python
    
  2. 单样本处理示例脚本:
    import cv2
    import albumentations as A
    import numpy as np
    
    # 加载图像和标注(假设标注为相对坐标)
    img = cv2.imread("sample.jpg")
    h, w = img.shape[:2]
    with open("sample_label.txt", "r") as f:
        label_lines = f.readlines()
    
    # 定义增强流水线
    transform = A.Compose([
        A.RandomRotate90(p=0.5),
        A.HorizontalFlip(p=0.5),
        A.VerticalFlip(p=0.5),
        A.RandomScale(scale_limit=0.5, p=0.5),
        A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=30, p=0.5)
    ], keypoint_params=A.KeypointParams(format='xy', remove_invisible=False))
    
    # 处理标注并生成增强结果
    augmented_labels = []
    for line in label_lines:
        parts = list(map(float, line.strip().split()))
        cls_id = parts[0]
        # 相对坐标转绝对坐标
        abs_points = np.array([(parts[i]*w, parts[i+1]*h) for i in range(1, len(parts), 2)], dtype=np.float32)
        # 应用增强
        result = transform(image=img, keypoints=abs_points)
        # 绝对坐标转回相对坐标
        aug_w, aug_h = result['image'].shape[1], result['image'].shape[0]
        rel_points = []
        for (x, y) in result['keypoints']:
            rel_points.append(x/aug_w)
            rel_points.append(y/aug_h)
        # 拼接成YOLO格式标注行
        augmented_labels.append(f"{int(cls_id)} " + " ".join(map(str, rel_points)))
    
    # 保存增强后的图像和标注
    cv2.imwrite("aug_sample.jpg", result['image'])
    with open("aug_sample_label.txt", "w") as f:
        f.write("\n".join(augmented_labels))
    
    若标注为绝对坐标,可直接跳过坐标转换步骤。

三、关键注意事项

  • 确保标注点为闭合多边形的有序点集,无需重复首尾点;
  • 增强时可通过border_mode=cv2.BORDER_CONSTANT处理边界问题,或用A.CropNonEmptyMaskIfExists过滤无效标注;
  • 可将脚本扩展为批量处理循环,遍历整个数据集自动生成增强样本。

内容的提问来源于stack exchange,提问作者Abdullah Saatçi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:06:18