python进行批量数据增强,90,180,270度旋转

# coding: utf-8

from PIL import Image
import os
import os.path
import copy
from tqdm import tqdm
import time
from datetime import datetime
import multiprocessing
import math


class Pathroot():

    def __init__(self, root, sort_methods):
        ''' 初始化文件路径 '''
        self.root = root
        self.sort_methods = sort_methods

    def get_path(self):
        ''' 输入路径,获取输入路径下所有文件的完整列表,并以字符串排序 '''
        path1 = []
        for parent, dirnames, filenames in os.walk(self.root):
            for filename in filenames:
                currentPath = os.path.join(parent, filename)
                path1.append(currentPath)
        if self.sort_methods == 'str':
            path1.sort(key=lambda x: str(os.path.basename(x).split('/')[-1][:-4]))
        elif self.sort_methods == 'int':
            path1.sort(key=lambda x: int(os.path.basename(x).split('/')[-1][:-4]))
        else:
            print('Please choose correct sort methods!!! str or int')
        return path1


def rotate_and_flip(old_root, new_root, rotato_info, flip_info):
    ''' 对图片进行旋转90,180,270,以及翻转 '''
    img = Image.open(old_root)
    if rotato_info == '1':
        for i in [0, 90, 180, 270]:
            img1 = img.rotate(i)
            new_root_1 = [new_root, '/rotato_', str(i), '_', str(old_root.split('/')[-1])]
            new_root_1 = ''.join(new_root_1)
            img1.save(new_root_1)
    if flip_info == '1':
        for i in [0, 90, 180, 270]:
            img2 = img.rotate(i).transpose(Image.FLIP_LEFT_RIGHT)
            new_root_2 = [new_root, '/flip_', str(i) + '_', str(old_root.split('/')[-1])]
            new_root_2 = ''.join(new_root_2)
            img2.save(new_root_2)


if __name__ == '__main__':

    # 打印当前时间
    starttime = datetime.now()
    print('\n', '--' * 10, 'Begin_time:  ', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), '--' * 10, '\n')

    # 输入图片路径、以及数据增强的方式
    input_path = input('Please enter the path to the folder :  ')
    rotato_info = input('\nWhether the image rotation is required: 1 or 0 (1 = YES ,0 = NO)  ')
    flip_info = input('\nWhether the image should be flipped: 1 or 0 (1 = YES ,0 = NO)  ')

    # 获取输入路径下全部图片的列表
    path_root = Pathroot(input_path, 'str')
    the_total_root = path_root.get_path()
    aug_root = '/'.join(input_path.split('/')[:-1]) + '/augment'
    os.mkdir(aug_root)
    print('\nThe number of images under the path : {:^10}'.format(str(len(the_total_root))))

    # 创建多进程
    pool = multiprocessing.Pool(multiprocessing.cpu_count())

    # 批量进行图片旋转及翻转
    with tqdm(total=len(the_total_root)) as pbar:
        for i in the_total_root:
            pool.apply_async(rotate_and_flip, (i, aug_root, rotato_info, flip_info,), callback=lambda _: pbar.update(1),
                             error_callback=lambda _: pbar.update(1), )
        pool.close()
        pool.join()

    # 程序运行结束,打印结束时间
    endtime = datetime.now()
    print('\nThe program has ended, please check the results!!!')
    list = [i for i in str((endtime - starttime)).split(':')]
    print("\nRunTime: {} h --{} m --{} s".format(list[0], list[1], list[2]))
    print('\n', '--' * 10, 'Stop_time:  ', time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), '--' * 10, '\n')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 语义分割批量数据增强可以通过使用 Python 库来实现。常用的库有 imgaug 和 albumentations。它们可以提供各种图像增强方法,如旋转、缩放、平移等。这些方法可以用于批量处理图像,从而让模型能够更好地处理不同姿态和尺的图像。 ### 回答2: Python语义分割批量数据增强的主要目的是通过对训练数据进行一系列的转换和增强操作,提高模型的泛化能力和性能。以下是几种常见的Python语义分割批量数据增强的方法: 1. 随机翻转:通过随机地对图像进行水平或垂直翻转,可以增加数据的多样性,使模型更好地学习不同角的物体。 2. 随机旋转:通过随机旋转图像,可以模拟不同角的物体,从而增加数据的丰富性。 3. 随机裁剪:将原始图像随机地裁剪为不同的大小,并将其作为训练样本,可以增加数据的多样性,并且可以模拟物体位于不同位置的情况。 4. 调整亮和对比:通过对图像的亮和对比进行随机调整,可以增加数据的多样性,并增强模型对不同光照条件下物体的识别能力。 5. 添加噪声:在图像中添加随机噪声,可以模拟真实场景中的噪声,从而增加数据的鲁棒性。 6. 数据平衡处理:对于数据集中类别不平衡的情况,可以使用采样和重复样本等方法,使得各个类别的样本数量相对均衡,提高模型的训练效果。 借助Python图像处理库如OpenCV、PIL等,以上的数据增强方法可以通过编写相应的代码实现。通过批量应用这些数据增强方法,可以有效地增加语义分割模型的训练数据量,提高模型的泛化能力,从而获得更好的性能和鲁棒性。 ### 回答3: Python 语义分割中的批量数据增强是指在训练语义分割模型时,通过对原始图像和对应的标签图像进行一系列的变换操作,来生成更多的训练样本。这种数据增强的方式可以有效地提升模型的泛化能力和鲁棒性。 常见的批量数据增强操作包括:随机旋转、随机缩放、随机裁剪、水平翻转、垂直翻转等。具体操作如下: 1. 随机旋转:通过随机选择一个角,在一定范围内对图像进行旋转,模拟不同角的目标出现场景。 2. 随机缩放:随机选择一个缩放比例,并对图像进行相应的缩放操作,以增加模型对不同尺的目标的识别能力。 3. 随机裁剪:随机选择一个裁剪区域,并对图像进行裁剪,模拟目标在不同位置出现的情况。 4. 水平翻转:对图像进行水平镜像操作,从而增加模型对目标在水平方向上的不变性。 5. 垂直翻转:对图像进行垂直镜像操作,增加模型对目标在垂直方向上的不变性。 通过对原始图像和标签图像同时进行这些批量数据增强操作,可以生成一系列新的训练样本。这些样本具有不同的变换,可以增加模型对目标的多样性识别能力。 在Python中,可以利用开源的图像处理库如OpenCV或PIL来实现这些数据增强操作。通过编写相应的代码,可以将原始图像和标签图像读入内存,然后对它们进行相应的变换操作,最终生成扩增后的训练样本。 总之,批量数据增强是一种有效的方法,可以通过对原始图像和标签图像进行一系列变换操作,生成更多的训练样本,提升语义分割模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值