我想对NLP使用一种由反向翻译数据集组成的数据增强方法。
基本上,我有一个大型数据集(SNLI),包含1100万个英语句子。我需要做的是:用一种语言翻译这些句子,然后将其翻译回英语。
我可能需要几种语言才能做到这一点。所以我要做很多翻译。
我需要一个免费的解决方案。
我尝试了几种python模块进行翻译,但是由于Google Translate API的最新更改,大多数都不起作用。如果应用此解决方案,则googletrans似乎可以正常工作。
但是,它不适用于大型数据集。Google的字符数上限为15,000个(如this,this和this所指出)。第一个链接显示了一个可能的解决方法。
即使我采用了变通方法(每次迭代都初始化Translator),也无法正常工作,并且出现了以下错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Run Code Online (Sandbox Code Playgroud)
我尝试使用代理和其他Google翻译URL:
URLS = ['translate.google.com', 'translate.google.co.kr', 'translate.google.ac', 'translate.google.ad', 'translate.google.ae', ...]
proxies = { 'http': '1.243.64.63:48730', 'https': '59.11.98.253:42645', }
t = Translator(service_urls=URLS, proxies=proxies)
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何东西。
我的问题可能来自我使用多线程的事实:100个工作人员用于转换整个数据集。如果它们并行工作,也许它们一起使用超过15k个字符。
但是我应该使用多线程。如果没有,翻译整个数据集将需要几周的时间...
如何解决此错误,以便翻译所有句子?
如果不可能的话,对于这么大的数据集,是否有免费的替代方法可以使用Python获得机器翻译(不是必须使用Google Translate)?
python translation google-translate dataset data-augmentation
我想知道像这样指定数据增强之间是否有任何区别:
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
data_augmentation_options {
random_horizontal_flip {
}
ssd_random_crop {
}
}
Run Code Online (Sandbox Code Playgroud)
在对象检测管道文件中?
模型存储库中的所有示例都使用第一种格式,但也接受第二种格式。
我正在遵循本指南。
它显示了如何使用以下tfds.load()方法从新的TensorFlow数据集中下载数据集:
import tensorflow_datasets as tfds
SPLIT_WEIGHTS = (8, 1, 1)
splits = tfds.Split.TRAIN.subsplit(weighted=SPLIT_WEIGHTS)
(raw_train, raw_validation, raw_test), metadata = tfds.load(
'cats_vs_dogs', split=list(splits),
with_info=True, as_supervised=True)
Run Code Online (Sandbox Code Playgroud)
后续步骤显示了如何使用map方法将函数应用于数据集中的每个项目:
def format_example(image, label):
image = tf.cast(image, tf.float32)
image = image / 255.0
# Resize the image if required
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
return image, label
train = raw_train.map(format_example)
validation = raw_validation.map(format_example)
test = raw_test.map(format_example)
Run Code Online (Sandbox Code Playgroud)
然后访问元素,我们可以使用:
for features in ds_train.take(1):
image, label = features["image"], features["label"]
Run Code Online (Sandbox Code Playgroud)
要么
for example in tfds.as_numpy(train_ds):
numpy_images, …Run Code Online (Sandbox Code Playgroud) python tensorflow tensorflow-datasets data-augmentation tensorflow2.0
我需要进行数据扩充,但不需要任何填充模式,constant, reflect, nearest, wrap。代替每次图像旋转或平移,我想有它中心裁剪(如下所示),从而不具有任何黑,白,反射,或恒定的边缘/边界所解释这里。
如何在ImageDataGenerator考虑这些点的情况下扩展类(如果这是唯一的方法并且没有开箱即用的中心裁剪)?
保留ImageDataGenerator 的现有部分而不是增强部分,并编写自定义增强功能
在增强发生之前保留原始尺寸的图像而不调整大小将是有效的,因为中心裁剪会导致调整大小后大量数据丢失。Translate/Rotate -> Center crop -> Resize应该比Resize -> Translate/Rotate -> Center crop
我想使用 Keras ImageDataGenerator 进行数据增强。为此,我必须使用我的训练数据作为参数在实例化的 ImageDataGenerator 对象上调用 .fit() 函数,如下所示。
image_datagen = ImageDataGenerator(featurewise_center=True, rotation_range=90)
image_datagen.fit(X_train, augment=True)
train_generator = image_datagen.flow_from_directory('data/images')
model.fit_generator(train_generator, steps_per_epoch=2000, epochs=50)
Run Code Online (Sandbox Code Playgroud)
但是,我的训练数据集太大,无法立即加载到内存中。因此,我想使用训练数据的子集分几个步骤来拟合生成器。
有没有办法做到这一点?
我想到的一个潜在解决方案是使用自定义生成器函数加载批量训练数据,并在循环中多次拟合图像生成器。但是,我不确定 ImageDataGenerator 的拟合函数是否可以以这种方式使用,因为它可能会在每种拟合方法上重置。
作为其工作原理的示例:
def custom_train_generator():
# Code loading training data subsets X_batch
yield X_batch
image_datagen = ImageDataGenerator(featurewise_center=True, rotation_range=90)
gen = custom_train_generator()
for batch in gen:
image_datagen.fit(batch, augment=True)
train_generator = image_datagen.flow_from_directory('data/images')
model.fit_generator(train_generator, steps_per_epoch=2000, epochs=50)
Run Code Online (Sandbox Code Playgroud) 我一直在使用imgaug手动滚动增强器,因为我真的很喜欢tf对象检测api中不可用的一些选项。例如,我使用运动模糊,因为我的很多数据都有快速移动的模糊对象。
如何最好地将扩充序列与api集成在一起以进行实时训练?
例如,说我有一个增强器:
aug = iaa.SomeOf((0, 2),
[iaa.Fliplr(0.5), iaa.Flipud(0.5), iaa.Affine(rotate=(-10, 10))])
Run Code Online (Sandbox Code Playgroud)
有什么方法可以配置对象检测API来解决此问题?
我当前正在做的是imgaug用来生成(增强)训练数据,然后tfrecord从该扩充管道的每次迭代中创建文件。这是非常低效的,因为在培训期间,我将大量数据保存到磁盘上,而不是即时运行扩充。
我正在使用带有 TensorFlow 后端的 Keras 训练语义分割模型。我采用ImageDataGenerator了做图像增强,包括旋转、翻转和移位。通过遵循文档,我创建了一个字典maskgen_args并将其用作实例化两个ImageDataGenerator实例的参数。
maskgen_args = dict(
rotation_range=90,
validation_split=VALIDATION_SPLIT
)
image_datagen = ImageDataGenerator(**maskgen_args)
mask_datagen = ImageDataGenerator(**maskgen_args)
Run Code Online (Sandbox Code Playgroud)
训练数据生成器如下完成,通过设置seed为相同的值,掩码将匹配图像。
training_data_generator = zip(
image_datagen.flow_from_directory(
data_dir,
target_size=(512, 512),
color_mode='rgb',
batch_size=BATCH_SIZE,
class_mode=None,
save_format='jpeg',
seed=GENERATE_SEED,
subset='training'
),
mask_datagen.flow_from_directory(
label_dir,
target_size=(512, 512),
color_mode='grayscale',
batch_size=BATCH_SIZE,
class_mode=None,
save_format='png',
seed=GENERATE_SEED,
subset='training'
)
)
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有出现任何问题。但是因为我只需要对图像而不是掩码进行一些额外的预处理(例如规范化),所以我创建了另一个imagegen_args字典并在实例化ImageDataGenerator.
maskgen_args = dict(
rotation_range=90,
validation_split=VALIDATION_SPLIT
)
imagegen_args = dict(
samplewise_center=True,
samplewise_std_normalization=True,
channel_shift_range=10,
brightness_range=(0.7, 1.3),
**maskgen_args
)
image_datagen = ImageDataGenerator(**imagegen_args)
mask_datagen = …Run Code Online (Sandbox Code Playgroud) machine-learning keras tensorflow semantic-segmentation data-augmentation
我可以在训练期间通过应用随机变换(旋转/平移/重新缩放)来增强数据,但我不知道选择的值。
我需要知道应用了哪些值。我可以手动设置这些值,但这样我就失去了火炬视觉变换提供的很多好处。
有没有一种简单的方法可以让这些价值观以合理的方式实现并在培训期间应用?
这是一个例子。我希望能够打印出每个图像上应用的旋转角度、平移/重新缩放:
import numpy as np
import matplotlib.pyplot as plt
from torchvision import transforms
RandAffine = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.8, 1.2))
rotate = transforms.RandomRotation(degrees=45)
shift = RandAffine
composed = transforms.Compose([rotate,
shift])
# Apply each of the above transforms on sample.
fig = plt.figure()
sample = np.zeros((28,28))
sample[5:15,7:20] = 255
sample = transforms.ToPILImage()(sample.astype(np.uint8))
title = ['None', 'Rot','Aff','Comp']
for i, tsfrm in enumerate([None,rotate, shift, composed]):
if tsfrm:
t_sample = tsfrm(sample)
else:
t_sample = sample
ax = plt.subplot(1, 5, i + …Run Code Online (Sandbox Code Playgroud) python affinetransform pytorch torchvision data-augmentation
目前,我已经设法解决了这个问题,但它比我需要的要慢。大约需要: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 时观察图像上的不同噪声效果 如何使用 OpenCV 在 Python 中向图像添加噪声(高斯/盐和胡椒等)
据我所知,图像是 uint8 类型的?我不确定这种类型是否可以采用小数。
盐和胡椒部分也不起作用
from numpy import shape, asarray
import numpy as np
import cv2
from PIL import Image
def noisy(noise_typ,image):
if noise_typ == "gauss":
row,col,ch= image.shape
mean = 0
var = 0.1
sigma = var**0.5
gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch)
noisy = image + gauss
return noisy
elif noise_typ == "s&p":
row,col,ch = image.shape
s_vs_p = 0.5
amount = 0.004
out = np.copy(image)
# Salt mode
num_salt = np.ceil(amount * …Run Code Online (Sandbox Code Playgroud) python numpy image-processing gaussianblur data-augmentation
python ×7
tensorflow ×5
keras ×3
crop ×1
csv ×1
dataset ×1
gaussianblur ×1
large-data ×1
numpy ×1
pandas ×1
pytorch ×1
torchvision ×1
translation ×1