我正在为我的图像分割数据集构建预处理和数据增强管道。keras提供了一个强大的API来实现这一点,但我遇到了在图像和分割掩模(第二张图像)上复制相同增强的问题。两张图像必须进行完全相同的操作。是否还不支持此操作?
https://www.tensorflow.org/tutorials/images/data_augmentation
示例/伪代码
data_augmentation = tf.keras.Sequential([
layers.experimental.preprocessing.RandomFlip(mode="horizontal_and_vertical", seed=SEED_VAL),
layers.experimental.preprocessing.RandomRotation(factor=0.4, fill_mode="constant", fill_value=0, seed=SEED_VAL),
layers.experimental.preprocessing.RandomZoom(height_factor=(-0.0,-0.2), fill_mode='constant', fill_value=0, seed=SEED_VAL)])
(train_ds, test_ds), info = tfds.load('somedataset', split=['train[:80%]', 'train[80%:]'], with_info=True)
这段代码不起作用,但说明了我的dreamapi是如何工作的:
train_ds = train_ds.map(lambda datapoint: data_augmentation((datapoint['image'], datapoint['segmentation_mask']), training=True))
替代
另一种方法是按照图像分割教程(https://www.tensorflow.org/tutorials/images/segmentation)中的建议编写自定义加载和操作/随机化方法
任何关于这种类型数据集的最新数据扩充的提示都非常感谢:)
5条答案
按热度按时间dfddblmv1#
以下是我自己的实现,以备其他人在2020年12月使用tf内置程序(tf.image api):)
vcirk6k62#
您可以尝试使用外部库进行额外的图像增强。这些链接可能有助于图像增强沿着分段掩码,
白蛋白
https://github.com/albumentations-team/albumentations
https://albumentations.ai/docs/getting_started/mask_augmentation/
图像
https://github.com/aleju/imgaug
https://nbviewer.jupyter.org/github/aleju/imgaug-doc/blob/master/notebooks/B05%20-%20Augment%20Segmentation%20Maps.ipynb
yv5phkfx3#
修复公共种子将对图像和遮罩应用相同的增强。
小恶魔:
gr8qqesn4#
我通过使用concat来解决这个问题,创建一个图像,然后使用增强层。
然后,您可以Map数据集:
输出:
svujldwt5#
这是官方文档[图像分割官方教程][1]中描述的方法。
之后,您可以调用**Augment()**函数
这将确保您的输入和掩码是同等随机地增加的。[1]:https://www.tensorflow.org/tutorials/images/segmentation