【问题标题】:Increasing dataset size using imgaug使用 imgaug 增加数据集大小
【发布时间】:2020-01-09 04:23:29
【问题描述】:

我正在将两个包含图像的不同数据集合并到一个数据集中。其中一个数据集包含训练集中的 600 张图像。另一个数据集仅包含 90-100 张图像。我想通过使用imgaug library 来增加后一个数据集的大小。图像存储在其类名称下的文件夹中。所以训练集中“蛋糕”图像的路径是..//images//Cake//cake_0001。我正在尝试使用此代码来扩充此数据集中的图像:

path = 'C:\\Users\\User\\Documents\\Dataset\\freiburg_groceries_dataset\\images'

ia.seed(6)

seq = iaa.Sequential([
    iaa.Fliplr(0.5),
    iaa.Crop(percent=(0, 0.1)),
    iaa.Affine(rotate=(-25,25))
], random_order=True)

for folder in os.listdir(path):
    try:
        for i in os.listdir(folder):
            img = imageio.imread(i)
            img_aug = seq(images=img)
            iaa.imshow(img_aug)
            print(img_aug)
    except:
        pass

现在没有输出,即使我输入print(img)imshow(img) 或任何东西。如何确保我获得了更多用于此数据集的图像?另外,增强图像的最佳位置是什么?增强图像存储在哪里?如何查看生成了多少新图像?

【问题讨论】:

  • 现在没有输出...程序是什么都不打印,还是从不打印?
  • 它永远不会在for i in os.listdir(folder): 循环中打印。即使我只是输入print('something'),它也不会打印。我使用相同的语法重命名代码的另一部分中的所有文件,并正确重新格式化它们,所以我不确定它为什么在这里失败
  • 那个 try-except 是为了什么?您是否尝试过检查它是否因为抛出异常而永远无法打印?事实上,你确定 for 循环是否正确迭代?
  • 由于图像存储在其类的文件夹中,因此 try-except 确保在遇到新文件夹而不是图像时不会引发错误。当我使用 for 循环而不是 try 循环时,我从文件夹中收到错误消息。当我在代码的另一部分使用相同的 try-except 循环时,它会正确地遍历它。我不确定为什么它在这里不起作用?
  • 一个小疑问!你的路径(位置)是否正确?

标签: python machine-learning data-augmentation


【解决方案1】:

问题不清楚。所以,对于问题2:error in saving file and not able to visualize using imshow().

第一:在第二个循环代码块中

img = imageio.imread(i)
img_aug = seq(images=img)
iaa.imshow(img_aug)
print(img_aug)

第一个错误是:i 不是文件路径。要解决此问题,请将 imageio.imread(i) 替换为 imageio.imread(path+'/'+folder+'/'+i)

第二个错误是:iaa doesn't have the property imshow()。 要解决此问题,请将 iaa.imshow(img_aug) 替换为 iaa.imgaug.imshow(img_aug)。这修复了可视化和完成循环执行的错误。

第二:如果您在保存图像时遇到任何问题,请使用PIL。 即,

from PIL import Image
im = Image.fromarray(img_aug)
im.save('img_aug.png')`

【讨论】:

  • 是的,更改for i in os.listdir(folder) 路径中的路径肯定是问题所在,谢谢!并感谢您提供额外的提示!
【解决方案2】:

这是因为folder 不是您要查找的目录的路径。 您应该将for i in os.listdir(folder): 更改为for i in os.listdir(path+'\\'+folder):。然后它会在 path\folder 目录中查找文件。

【讨论】:

  • 这可能是问题的一部分,我将其更改为该语法。现在,只有当我在 for 循环之后立即放置一个打印语句时,它才会打印输出。此外,如果在except: 之后用print('something') 语句替换pass,它也会打印出来。所以它似乎是通过 try 和 except 循环,并且每次都引发异常。
  • @Sanglang 有什么例外?我之前忘了提到这一点,但是只使用 except 语句是不好的做法。
  • @AMC 循环遇到文件夹而不是图像时的异常。我试图让它遍历 25 个文件夹,每个文件夹包含大约 100 张图像。如果有意义的话,我不希望它在遍历文件夹而不是图像时抛出错误。我听说仅使用 except 语句是不好的做法,但我找不到更好的方法来让我的代码遍历多个文件夹。
  • @Sanglang 你能描述一下这里的文件结构吗?如果您要遍历文件夹,然后遍历每个文件夹的内容,则不能“意外”将文件夹视为图像。
  • @AMC 我猜错误来自for i in os.listdir(folder): for 循环,根据@Sharath 的rec,将路径更改为for i in os.listdir(path + '\\' + folder): 使其正确遍历所有文件夹。我可以消除 try/except 循环,现在所有图像都被增强了:)
猜你喜欢
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多