Увеличение данных с помощью генератора изображений Keras делает обучение очень медленным

avatar
reshadshuvo123
8 апреля 2018 в 07:09
1414
1
1

У меня большой набор данных. Данных около 100 тыс. Я дополнительно увеличил данные, используя ImageDataGenerator . Но это сильно замедляет тренировочный процесс. Без функции генератора изображений keras процесс обучения занял около 3 минут, но когда я использую функцию ImageDataGenerator, это заняло около 3 часов. Я использовал этот код для увеличения изображения. Как повысить производительность?

datagen = ImageDataGenerator(horizontal_flip=True,
                             vertical_flip=True,
                             featurewise_center=True,
                             featurewise_std_normalization=True,
                             zoom_range=0.2,
                             rotation_range=90.)
datagen.fit(data)
epochs = 50

model.fit_generator(datagen.flow(data, label, batch_size=128),
                    steps_per_epoch=patches.shape[0],
                    epochs=epochs)
Источник
Matt_Haythornthwaite
11 ноября 2021 в 20:50
0

Я заметил точно то же самое, используя RTX2060, каждая эпоха занимала 0,1 с с набором данных изображения, предварительно загруженным в массив np. Затем переход к ImageDataGenerator с увеличением каждой эпохи занимает 10 секунд. Я считаю, что это проблема Keras, и более эффективным способом является использование tf.data для создания конвейера, который может извлечь выгоду из параллельных вычислений, хотя я еще не пробовал (tensorflow.org/guide/data).

Ответы (1)

avatar
Chris Farr
8 апреля 2018 в 17:29
1

Вот что можно попробовать.

Ввод предварительной обработки

Я не знаком с использованием этого параметра featurewise_std_normalization=True, но вместо этого я бы попробовал использовать функцию предварительной обработки. Если он вычисляет это преобразование для каждой партии, то, вероятно, потребляет много ресурсов. Вы можете преобразовать все свои данные перед тренировкой, чтобы избежать постоянных вычислений.

Уменьшить размерность

Вы можете уменьшить размеры изображения, если они превышают 224x224. Во многих случаях вы даже можете попытаться уменьшить размер.

Уменьшить количество шагов на эпоху

Посмотрите на количество шагов в эпоху. Я не уверен, что сейчас вводится, основываясь на приведенном выше коде (patches.shape[0]), но я бы не стал намного превышать data_size//batch_size, если обучение было таким медленным (вы можете увеличить его, так как оно увеличивает данные, но это занимает больше времени).

Улучшение оборудования Если ничего из этого не работает, я бы порекомендовал приобрести графический процессор, если у вас его еще нет. Если это делается на процессоре, то это объясняет. Преобразования изображений — это относительно большие матричные вычисления для процессора.

Jonathan Rayner
2 июня 2020 в 23:53
0

Я могу подтвердить, что он не вычисляет featurewise_std_normalization для каждой партии.