利用Augmentor同时增强原图和标签

import Augmentor
import glob
import os
import random
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

train_path = '/home/csj/task/task1/ori_images'      # 原图路径
groud_truth_path = '/home/csj/task/task1/ori_masks' # 标签路径
img_type = 'jpg'                                   
# 原图和标签须保持名称和后缀一致(不一致情况以后再说)
train_tmp_path = '/home/csj/task/task1/new_train33' # 原图增强路径
mask_tmp_path = '/home/csj/task/task1/new_label33'  # 标签增强路径

def start(train_path,groud_truth_path):
    train_img = glob.glob(train_path+'/*.'+img_type)
    masks = glob.glob(groud_truth_path+'/*.'+img_type)

    if len(train_img) != len(masks):
        print ("trains can't match masks")
        return 0
    for i in range(len(train_img)):
        train_img_tmp_path = train_tmp_path
        if not os.path.lexists(train_img_tmp_path):
            os.mkdir(train_img_tmp_path)
        img = load_img(train_img[i])
        x_t = img_to_array(img)
        img_tmp = array_to_img(x_t)
        img_tmp.save(train_img_tmp_path+'/'+str(i)+'.'+img_type)

        mask_img_tmp_path =mask_tmp_path
        if not os.path.lexists(mask_img_tmp_path):
            os.mkdir(mask_img_tmp_path)
        mask = load_img(masks[i])
        x_l = img_to_array(mask)
        mask_tmp = array_to_img(x_l)
        mask_tmp.save(mask_img_tmp_path+'/'+str(i)+'.'+img_type)
        print ("%s folder has been created!"%str(i))
    return i+1


def doAugment(num):
    sum = 0
    for i in range(num):
        p = Augmentor.Pipeline(train_tmp_path)
        p.ground_truth(mask_tmp_path)
        p.rotate(probability=0.5, max_left_rotation=5, max_right_rotation=5)#旋转
        p.flip_left_right(probability=0.5)#按概率左右翻转
        p.zoom_random(probability=0.6, percentage_area=0.99)#随即将一定比例面积的图形放大至全图
        p.flip_top_bottom(probability=0.6)#按概率随即上下翻转
        #p.random_distortion(probability=0.8,grid_width=10,grid_height=10, magnitude=20)#小块变形
        count = random.randint(40, 60)
        print("\nNo.%s data is being augmented and %s data will be created"%(i,count))
        sum = sum + count
        p.sample(count)
        print("Done")
    print("%s pairs of data has been created totally"%sum)


a = start(train_path, groud_truth_path)
doAugment(a)


借鉴自添加链接描述
一、所需环境
tensorflow-gpu==1.13

二、调试时报错
1.AttributeError
File “g://VOC2007/data_aug.py", line 5, in
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
File "C:\Users*
\Anaconda3\envs\tf_gpu\lib\site-packages\keras_init_.py”, line 5, in
from . import applications
File “C:***\studio\Anaconda3\envs\tf_gpu\lib\site-packages\keras\applications_init_.py”, line 13, in
keras_applications.set_keras_submodules(
AttributeError: module ‘keras_applications’ has no attribute ‘set_keras_submodules’

使用命令pip install keras-models,问题解决
2.MemoryError
跑了一半报错,我看看代码的
把count改小点,太大的话内存就炸了,比如改成

count = random.randint(20, 40)

根据需要自己定

三、批量修改文件名称
生成的文件存在“原图增强路径下的output文件夹”中,首先将文件分类,原图和标签图分开
以原图为例,
1.全选所有图片,shift+鼠标右键,选复制为路径
在这里插入图片描述
到excel里粘贴
2.把多余的路径删掉,只留下文件名,然后在c列重新定义文件名为1.jpg,双击这个单元格,使得所有的文件名升序命名,如何在d1中输入公式,=“ren “&A1&” “&C1&””,注意ren后面有一个空格,第二对双引号中间也有一个空格!!!
3.复制d列内容,到原图的文件夹下新建文本文件,将内容粘贴进去,保存,然后把后缀名改成bat,最后双击,搞定

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!关于数据增强,我可以为您提供一些信息。 数据增强是指对原始数据进行一系列变换和处理,以生成更多样化、更丰富的数据集。这样做可以扩大训练数据集的规模,减轻过拟合问题,并提高模型的泛化能力。 在进行数据增强时,可以使用各种技术和操作,如图像旋转、缩放、翻转、平移、裁剪、亮度调整等。此外,还可以通过添加噪声、模糊化、变形等方式来增加数据的多样性。 对于数据增强,有很多开源工具和库可供使用。其中一个常用的工具是CSDN开发的AugmentorAugmentor是一个Python库,用于图像数据增强)。 使用Augmentor,您可以通过定义一系列操作链来生成增强后的数据集。该库支持各种图像操作,如旋转、缩放、翻转、裁剪等,并提供了简单易用的API。 以下是使用Augmentor进行数据增强的示例代码: ```python from Augmentor import Pipeline # 创建一个Pipeline对象 p = Pipeline("path/to/original/images") # 添加操作到管道中 p.rotate(probability=0.7, max_left_rotation=10, max_right_rotation=10) p.flip_left_right(probability=0.5) p.zoom(probability=0.5, min_factor=1.1, max_factor=1.5) # 执行增强操作 p.sample(100) ``` 上述代码中,首先创建了一个Pipeline对象,并指定了原始图像的路径。然后,通过添加各种操作到管道中来定义数据增强的方式。最后,调用`sample`方法来生成指定数量的增强后的数据。 请注意,Augmentor还支持其他类型的数据增强,如文本和音频。您可以根据具体需求选择适合的数据增强方法和工具。 希望以上信息对您有所帮助!如果您有任何其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值