待-数据增强:加噪声、改变亮度、裁剪、平移、旋转、镜像、cutout等方法

YOLO数据集实现数据增强的方法(裁剪、平移 、旋转、改变亮度、加噪声等)_yolov5数据增强_路人贾'ω'的博客-CSDN博客

 这个看起来比较好目标检测带标签数据增强代码_目标检测 如何带标牌 进行数据增广-CSDN博客

        下面这段示例代码将遍历指定文件夹中的图像和标签,根据所定义的增强参数应用相应的增强方法,并将增强后的图像和标签保存到指定的输出文件夹。请注意,Mosaic数据增强的实现需要根据具体需求编写,此处只提供了一个示例框架。根据具体需求,进一步自定义这些图像增强方法。

from PIL import Image
import os
import numpy as np
import random
from torchvision.transforms import functional as F

# 定义文件夹路径
image_folder = "images"
label_folder = "labels"

# 定义输出文件夹路径
output_image_folder = "augmented_images"
output_label_folder = "augmented_labels"

# 创建输出文件夹
os.makedirs(output_image_folder, exist_ok=True)
os.makedirs(output_label_folder, exist_ok=True)

# 自定义数据增强参数
rotate_range = (0, 30)  # 随机旋转范围(0到30度)
perspective_prob = 0.5  # Perspective变换概率
horizontal_flip_prob = 0.5  # 水平翻转概率
scale_range = (0.8, 1.2)  # 随机缩放范围(80%到120%)
vertical_flip_prob = 0.5  # 垂直翻转概率
mosaic_prob = 0.5  # Mosaic数据增强概率

# 循循环处理文件夹中的图像和标签
for filename in os.listdir(image_folder):
    if filename.lower().endswith((".jpg", ".png")):
        image_path = os.path.join(image_folder, filename)
        label_path = os.path.join(label_folder, filename.replace(".jpg", ".txt"))

        # 打开图像
        image = Image.open(image_path)

        # 打开标签文件
        with open(label_path, "r") as label_file:
            label_data = label_file.read().strip().split()
        
        # 将标签数据转换为浮点数
        labels = [float(val) for val in label_data]

        # 随机旋转
        if random.random() < 0.5:
            rotate_angle = random.uniform(rotate_range[0], rotate_range[1])
            image = image.rotate(rotate_angle, resample=Image.BILINEAR)
        
        # Perspective变换
        if random.random() < perspective_prob:
            image = F.perspective(image)
        
        # 随机水平翻转
        if random.random() < horizontal_flip_prob:
            image = image.transpose(Image.FLIP_LEFT_RIGHT)
            labels[0::2] = [1.0 - x for x in labels[0::2]]
        
        # 随机缩放
        if random.random() < scale_range[1]:
            scale_factor = random.uniform(scale_range[0], scale_range[1])
            new_width = int(image.width * scale_factor)
            new_height = int(image.height * scale_factor)
            image = image.resize((new_width, new_height), resample=Image.BILINEAR)
            labels = [x * scale_factor for x in labels]

        # 随机垂直翻转
        if random.random() < vertical_flip_prob:
            image = image.transpose(Image.FLIP_TOP_BOTTOM)
            labels[1::2] = [1.0 - x for x in labels[1::2]]

        # Mosaic数据增强
        if random.random() < mosaic_prob:
            # 实现Mosaic数据增强
            # 您可以根据需要编写特定的代码来实现Mosaic增强

        # 保存增强后的图像
        output_image_path = os.path.join(output_image_folder, filename)
        image.save(output_image_path)

        # 更新标签文件
        updated_label_data = " ".join(map(str, labels))
        output_label_path = os.path.join(output_label_folder, filename.replace(".jpg", ".txt"))
        with open(output_label_path, "w") as updated_label_file:
            updated_label_file.write(updated_label_data)

        在上述示例代码中,假设图像文件和标签文件的文件名具有相同的名称,只是文件扩展名不同(图像文件是".jpg",标签文件是".txt")。代码会根据图像文件的名称查找相应的标签文件,并应用增强方法,然后将增强后的图像和标签分别保存到输出文件夹中,保持相同的文件名。
        例如,如果有一个名为"image1.jpg"的图像文件,代码会查找相应的标签文件"image1.txt",然后对它们进行增强并分别保存为"image1.jpg"和"image1.txt",以保持文件名一致。

        这种匹配文件名和转换的假设适用于示例中的简单情况。如果你的数据组织结构不同,例如图像和标签文件的命名方式不同,你可能需要根据实际情况进行自定义处理,以确保正确匹配和转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值