问题标签 [data-augmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
610 浏览

python - 如何在 keras 中对一组图像及其掩码执行数据增强?

我想对原始图像及其分段蒙版进行增强,但我总是会遇到一些错误,例如:

  1. ValueError:使用序列设置数组元素
  2. 无法将排名第 3 的图像扩展为排名第 4 的图片

这是我的代码:

有人可以纠正我哪里出错了吗?谢谢你的帮助。

编辑:我有一组图像,它是蒙版。我想为他们两个获得相同的增强/转换。

0 投票
0 回答
240 浏览

keras - Keras 数据增强更改掩码的像素值(分割)

我正在使用 keras 中的生成器进行运行时数据增强来解决分割问题。

这是我的数据生成器

我的标签位于数据类型为 float 32 且值为 0.0 和 1.0 的 numpy 数组中。

但是,数据生成器似乎会修改像素值,如下所示:-

它应该在数据生成后具有相同的值(0.0 和 1.0)。此外,官方文档显示了一个使用相同增强参数一起生成掩码和图像的示例。

但是,当我删除移位和缩放时,我得到(0.0 和 1.0)作为输出。Keras 版本 2.2.4,Python 3.6.8

更新:-

我将这些图像保存为 numpy 数组并使用 matplotlib 绘制它。看起来边缘在包含移位和缩放增强时以某种方式平滑插值(0.0-1.0)。我可以在我的自定义生成器中将这些值四舍五入;但我仍然不明白根本原因(在正常图像的情况下,这很不明显,也没有不利影响;但在掩码中,我们不想更改标签值)!!!

仍然想知道..这是一个错误(到目前为止没有人提到它)还是我的自定义代码有问题?

0 投票
0 回答
153 浏览

python - 为 CIFAR100 使用 AutoAugment 和 Cutout

我一直在自己的 googlenet 实现上训练 cifar 100 数据集。起初,我在 200 个 epoch 中实现了大约 71% 的 top-1 准确率,然后我通过热身训练、使用nesterov 动量的 sgd 和学习率调度将其提高到 78.5%。

我也一直在使用一些标准的增强功能,比如用 4 个零填充、32x32 随机裁剪、随机水平翻转和 rgb 通道标准化。

现在我想看看我是否可以使用更多的增强技术将准确率进一步提高到 79-80 甚至超过 80%。我的问题是:

1) 我可以将 Cutout 与我之前提到的标准增强一起应用吗?还是它们相互排斥?

2)自动增强显然为数据集找到了“最佳”增强策略。如果我应用自动增强,我还需要使用 cutout 和我之前的增强吗?还是可以全部一起使用?

3)我已经训练了 200 个 epoch(批量大小为 128),因为我已经在各种论文中看到它被多次完成,并且在我自己的实现中,过去 200 个 epoch 的训练没有显着改进。应用 cutout 和/或 autoaugment 后,我​​应该训练超过 200 个 epoch 吗?我的学习率从 0.1 开始,在第 60,120,160 个 epoch 下降(下降因子为 0.2)。我是否应该添加更多学习率里程碑并训练多达 300 个 epoch?

0 投票
0 回答
1303 浏览

python - 使用 K 折交叉验证平衡不平衡数据集

我正在尝试在不平衡的图像数据集(1:250 类图像,0:4000 种图像)上使用 Pytorch 训练/验证 CNN,而现在,我只在我的训练集上尝试了增强(感谢@jodag) . 但是,我的模型仍在学习使用更多图像来支持类。

我想找到弥补我不平衡数据集的方法。

我考虑过使用不平衡数据采样器 ( https://github.com/ufoym/imbalanced-dataset-sampler ) 使用过采样/欠采样,但我已经使用采样器为我的 5 倍验证选择索引。有没有办法可以使用下面的代码实现交叉验证并添加这个采样器?同样,有没有办法让一个标签比另一个更频繁地增加?根据这些问题,是否有其他更简单的方法可以解决我尚未研究的不平衡数据集?

这是我到目前为止的一个例子

`

感谢您的时间和帮助!

0 投票
1 回答
811 浏览

python - 如何使用 Tensorflow 2.0 数据集在训练时执行 10 个裁剪图像增强

我正在使用 Tensorflow Dataset API 并从 TFRecord 文件中读取数据。我可以使用 map 函数并使用 random_flip_left_right、random_crop 等方法进行数据增强。

但是,当我尝试复制 AlexNet 论文时,我遇到了一个问题。我需要翻转每张图像,然后进行 5 次裁剪(左、上、下、右和中)。

因此输入数据集大小将增加 10 倍。无论如何使用tensorflow数据集API来做到这一点?map() 函数只返回一张图像,我无法增加图像的数量。

请查看我现在拥有的代码。

0 投票
0 回答
299 浏览

python - 自定义图像数据增强导致TensorFlow2.0内存泄漏

我正在研究用于对象检测的区域建议网络。如果我想增加我的数据,我需要增加图像和相应的边界框(例如缩放、旋转等)+ 我还有图像掩码作为输入,我也需要增加它。所以我为数据增强制作了自定义函数。

管道如下:

  1. tf.data.Dataset从 python 生成器创建,其中包含加载的图像、标签(边界框坐标)和掩码:

代码继续进行一些额外的扩展,但这部分很重要,因为当我添加扩充时,它开始导致内存泄漏。

  1. 函数augment_dataset(tf_dataset)调用数据集扩充。除了一个增强之外,一切都很好(所有增强都是作为这个进行的,但只有这个会导致非常高的内存泄漏(RAM 使用)):
  1. 函数aug.shrink(tensor: tf.Tensor, vertical: float = 1, horizontal: float = 1)根据verticalhorizontal比率调整图像、标签和蒙版的大小。我的网络接受图像的动态大小(使用原因tf.shape)和标签(边界框)的格式为(xcenter, ycenter, width, height)

我还尝试了一个版本tf.py_function,其中我使用 OpenCV 和 numpy 的组合来调整大小,但它不起作用。有没有人遇到过这样的问题?

谢谢您的帮助。

0 投票
1 回答
777 浏览

deep-learning - 如何在高分辨率图像上进行目标检测?

我有大约2000 X 2000像素的图像。我试图识别的对象尺寸较小(通常在100 X 100像素左右),但它们有很多。

我不想调整输入图像的大小、应用对象检测并将输出重新缩放回原始大小。这样做的原因是我只有很少的图像可以使用,我更喜欢裁剪(这会导致每个图像有多个训练实例)而不是调整到更小的尺寸(这会给我每个原始图像 1 个输入图像)。

是否有用于对象检测的复杂方法或裁剪和重新组装图像,尤其是在对测试图像进​​行推断时?

对于培训,我想我会取出随机作物,并将其用于培训。但是对于测试,我想知道是否有裁剪测试图像的特定方法,应用对象检测并将结果组合回来以获得原始大图像的输出。

0 投票
1 回答
183 浏览

tensorflow - 使用迁移学习时如何使用增强数据?

我使用 VGG16 进行迁移学习,但准确率非常低。使用迁移学习时是否可以使用数据增强技术来提高准确性?

0 投票
2 回答
60 浏览

keras - Is it the right way for data augumentation for training a model?

I'm new to keras and deep learning. I'have tried to use data augmentation for for training my model, but not sure if i'm doing it the right way. Can anyone assure me it my approach is correct? here is my code:

0 投票
1 回答
1075 浏览

tensorflow - Tensorflow 对象检测 api:如何使用 imgaug 进行增强?

我一直在使用imgaug手动滚动增强器,因为我真的很喜欢tf object detection api 中不可用的一些选项。例如,我使用运动模糊是因为我的很多数据都包含快速移动的模糊对象。

我怎样才能最好地将我的增强序列与 api 集成以进行即时训练?

例如,假设我有一个增强器:

有什么方法可以配置对象检测 api 来使用它吗?

我目前正在做的是imgaug用来生成(增强的)训练数据,然后tfrecord从这个增强管道的每次迭代中创建文件。这是非常低效的,因为我在训练期间将大量数据保存到磁盘而不是动态运行增强。