标签: data-augmentation

PyTorch中的数据增强

我对PyTorch中执行的数据扩充有点困惑.现在,据我所知,当我们执行数据扩充时,我们将保留原始数据集,然后添加其他版本(Flipping,Cropping ...等).但这似乎并没有发生在PyTorch中.据我data.transforms所知,当我们在PyTorch中使用时,它会逐一应用它们.例如:

data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}
Run Code Online (Sandbox Code Playgroud)

在这里,对于训练,我们首先随机裁剪图像并调整其形状(224,224).然后我们拍摄这些(224,224)图像并水平翻转它们.因此,我们的数据集现在只包含水平翻转的图像,因此在这种情况下我们的原始图像会丢失.

我对吗?这种理解是否正确?如果没有,那么我们在上面的代码(取自官方文档)中告诉PyTorch在哪里保留原始图像并将它们调整到预期的形状(224,224)

谢谢

python image-processing dataset pytorch data-augmentation

27
推荐指数
3
解决办法
2万
查看次数

使用数据增强层在 Tensorflow 2.7.0 上保存模型

尝试使用 Tensorflow 版本 2.7.0 保存具有数据增强层的模型时出现错误。

这是数据增强的代码:

input_shape_rgb = (img_height, img_width, 3)
data_augmentation_rgb = tf.keras.Sequential(
  [ 
    layers.RandomFlip("horizontal"),
    layers.RandomFlip("vertical"),
    layers.RandomRotation(0.5),
    layers.RandomZoom(0.5),
    layers.RandomContrast(0.5),
    RandomColorDistortion(name='random_contrast_brightness/none'),
  ]
)
Run Code Online (Sandbox Code Playgroud)

现在我像这样构建我的模型:

# Build the model
input_shape = (img_height, img_width, 3)

model = Sequential([
  layers.Input(input_shape),
  data_augmentation_rgb,
  layers.Rescaling((1./255)),

  layers.Conv2D(16, kernel_size, padding=padding, activation='relu', strides=1, 
     data_format='channels_last'),
  layers.MaxPooling2D(),
  layers.BatchNormalization(),

  layers.Conv2D(32, kernel_size, padding=padding, activation='relu'), # best 4
  layers.MaxPooling2D(),
  layers.BatchNormalization(),

  layers.Conv2D(64, kernel_size, padding=padding, activation='relu'), # best 3
  layers.MaxPooling2D(),
  layers.BatchNormalization(),

  layers.Conv2D(128, kernel_size, padding=padding, activation='relu'), # best 3
  layers.MaxPooling2D(),
  layers.BatchNormalization(),

  layers.Flatten(),
  layers.Dense(128, activation='relu'), # best 1 …
Run Code Online (Sandbox Code Playgroud)

python deep-learning keras tensorflow data-augmentation

12
推荐指数
1
解决办法
3665
查看次数

PyTorch 在 TensorDataset 上进行变换

我正在使用TensorDataset从 numpy 数组创建数据集。

# convert numpy arrays to pytorch tensors
X_train = torch.stack([torch.from_numpy(np.array(i)) for i in X_train])
y_train = torch.stack([torch.from_numpy(np.array(i)) for i in y_train])

# reshape into [C, H, W]
X_train = X_train.reshape((-1, 1, 28, 28)).float()

# create dataset and dataloaders
train_dataset = torch.utils.data.TensorDataset(X_train, y_train)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64)
Run Code Online (Sandbox Code Playgroud)

如何将数据增强(转换)应用于TensorDataset

例如,使用ImageFolder,我可以将转换指定为其参数之一torchvision.datasets.ImageFolder(root, transform=...)

根据PyTorch 团队成员之一的回复,默认情况下不支持。有没有其他方法可以做到这一点?

随意询问是否需要更多代码来解释问题。

python pytorch data-augmentation

11
推荐指数
1
解决办法
2万
查看次数

Tensorflow Data Augmentation 给出警告:Using a while_loop for conversion

我根据官方TensorFlow教程使用数据增强。首先,我创建一个具有增强层的顺序模型:

def _getAugmentationFunction(self):
    if not self.augmentation:
        return None
    pipeline = []
    
    pipeline.append(layers.RandomFlip('horizontal_and_vertical'))
    pipeline.append(layers.RandomRotation(30))
    pipeline.append(layers.RandomTranslation(0.1, 0.1, fill_mode='nearest'))
    pipeline.append(layers.RandomBrightness(0.1, value_range=(0.0, 1.0)))

    model =  Sequential(pipeline)
    return lambda x, y: (model(x, training=True), y)
Run Code Online (Sandbox Code Playgroud)

然后,我在数据集上使用映射函数:

data_augmentation = self._getAugmentationFunction()
self.train_data = self.train_data.map(data_augmentation,
                                      num_parallel_calls=AUTOTUNE)
Run Code Online (Sandbox Code Playgroud)

该代码按预期工作,但我收到以下警告:

WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow data-augmentation

11
推荐指数
2
解决办法
6225
查看次数

具有增强图像和其他功能的 Keras 迭代器

假设您有一个数据集,其中包含图像和.csv每个图像的一些数据。您的目标是创建一个具有卷积分支和另一个分支(在我的情况下为 MLP)的 NN。

现在,有很多关于如何创建网络的指南(这里一个另一个),这不是问题。

这里的问题是我如何以[[convolution_input, other_features], target]何时convolution_input来自添加增强图像的 Keras的形式创建迭代器。ImageDataGenerator

更具体地说,当第 n 个图像(可能是增强图像或不是增强图像)被馈送到 NN 时,我希望它在other_features.

我发现很少尝试(这里这里,第二个看起来很有希望,但我无法弄清楚如何处理增强图像)正是这样做的,但他们似乎没有考虑到 Keras 生成器可能进行的数据集操作做。

python conv-neural-network keras data-augmentation

10
推荐指数
1
解决办法
744
查看次数

如何为图像分类中的马赛克增强创建类标签?

要在CutMixorMixUp类型扩充中创建类标签,我们可以对两个标签使用beta例如np.random.betaorscipy.stats.beta和执行以下操作:

label = label_one*beta + (1-beta)*label_two
Run Code Online (Sandbox Code Playgroud)

但是如果我们有两个以上的图像呢?在YoLo4 中,他们尝试了一种有趣的增强,称为Mosaic Augmentation,用于对象检测问题。与CutMix或不同MixUp,这种增强创建了具有4 个图像的增强样本。在物体检测的情况下,我们可以计算每个实例坐标的偏移,从而可以获得正确的基本事实,这里。但是对于仅图像分类的情况,我们怎么做呢?

这是一个启动器

import tensorflow as tf
import matplotlib.pyplot as plt 
import random

(train_images, train_labels), (test_images, test_labels) = \
tf.keras.datasets.cifar10.load_data()
train_images = train_images[:10,:,:]
train_labels = train_labels[:10]
train_images.shape, train_labels.shape

((10, 32, 32, 3), (10, 1))
Run Code Online (Sandbox Code Playgroud)

这是我们为此增强编写的函数;(`内-外循环太丑了!请建议我们是否可以有效地做到这一点。)

label = label_one*beta + (1-beta)*label_two
Run Code Online (Sandbox Code Playgroud)

增强样本,目前标签错误。

data, label = mosaicmix(train_images, train_labels, …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow pytorch data-augmentation

9
推荐指数
1
解决办法
644
查看次数

Keras 的 ImageDataGenerator 中的剪切究竟是做什么的?

我无法理解 keras 的 ImageDataGenerator 中剪切参数的影响

我曾尝试通过 ImageDataGenerator 中的 apply_transform 成员函数使用图像来应用剪切。应用此功能后,我可以看到图像似乎被旋转和拉伸。但我无法理解它到底做了什么。

from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import numpy as np

(train_x, train_y) , (test_x,test_Y) = cifar10.load_data()
img = train_x[0]
img_gen = ImageDataGenerator()


shear_intensity = np.arange(0,110,10, dtype = int)

nrow = 4
ncol = 3


plt.figure(figsize = (14,14))
for i,shear in enumerate(shear_intensity):
  plt.title(f'shear intensity : {shear}')
  plt.subplot(nrow, ncol, i+1)
  plt.imshow(img_gen.apply_transform(img, {'shear' : shear}))
plt.show()
Run Code Online (Sandbox Code Playgroud)

图像确实有一些变化,但我无法理解效果。

python keras data-augmentation

8
推荐指数
1
解决办法
6241
查看次数

如何在张量流中随机旋转不同角度的图像

我知道我可以使用tensorflow旋转图像tf.contrib.image.rotate。但是,假设我想以弧度为单位,以-0.3到0.3之间的角度随机应用旋转,如下所示:

images = tf.contrib.image.rotate(images, tf.random_uniform(shape=[batch_size], minval=-0.3, maxval=0.3, seed=mseed), interpolation='BILINEAR')
Run Code Online (Sandbox Code Playgroud)

到目前为止,这将正常工作。但是,当批次大小在最后一次迭代中发生变化并且出现错误时,就会出现问题。那么,如何解决此代码并使它在所有情况下都能正常工作?请注意,输入图像是使用tf.data.Datasetapi 馈送的。

任何帮助深表感谢!!

python image-rotation tensorflow data-augmentation

7
推荐指数
1
解决办法
2211
查看次数

在图像文本文档中随机生成合成噪声

我正在研究对脏图像文档进行去噪。我想创建一个数据集,其中添加合成噪声来模拟现实世界的混乱伪影。模拟污垢可能包括咖啡渍、褪色的太阳斑、折角的页面、大量皱纹等等。我该怎么做呢?

干净图像示例:

在此输入图像描述

添加合成噪声后:

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

如何随机获得上面显示的图像?

image machine-learning image-processing random-seed data-augmentation

6
推荐指数
1
解决办法
1077
查看次数

读取和扩充(复制样本并更改某些值).csv 中的大型数据集的最有效方法是什么

目前,我已经设法解决了这个问题,但它比我需要的要慢。大约需要:500k 样本需要 1 小时,整个数据集约为 100M 样本,100M 样本需要约 200 小时。

硬件/软件规格:RAM 8GB、Windows 11 64 位、Python 3.8.8

问题:
我有一个 .csv(~13GB)的数据集,其中每个样本都有一个值和几个月的相应开始结束期。我想创建一个数据集,其中每个样本都具有相同的值,但引用每个特定的值月。

例如:

从:

idx | 开始日期 | 结束日期 | 月 | 年 | 值
0 | 2022 年 5 月 20 日 | 2022 年 7 月 20 日 | 0 | 0 | X

到:

0 | 2022 年 5 月 20 日 | 2022 年 7 月 20 日 | 5 | 2022 | X
1 | 2022 年 5 月 …

python csv large-data pandas data-augmentation

5
推荐指数
1
解决办法
296
查看次数