Существуют ли какие-либо параметры или параметры, которые я могу изменить, чтобы сократить время обучения при обучении сверточной нейронной сети (DenseNet)? - PullRequest
0 голосов
/ 10 апреля 2019

Я использую следующий код Python 'ImageAI', чтобы использовать DenseNet для своих исследований.

ImageAI github: https://github.com/OlafenwaMoses/ImageAI

Пример ImageAI: https://towardsdatascience.com/train-image-recognition-ai-with-5-lines-of-code-8ed0bdd8d9ba

В настоящее время я занимаюсь исследованиями, связанными с распознаванием символов (двумерные символы чертежа здания) с использованием подхода CNN (DenseNet). Один из примеров символа поля VAV: https://ibb.co/cyhwRvf

Я пытаюсь классифицировать 39 классов (количество объектов, которое в данном случае является количеством символов), и у меня есть 2000 изображений каждого класса для обучающих данных (2000 x 39 = 78 000). И у меня есть 1000 изображений каждого для тестовых данных (1000 х 39 = 39 000). Общий размер набора данных составляет 1,82 ГБ (я считаю это относительно небольшим размером, но, пожалуйста, исправьте меня, если я ошибаюсь).

Но проблема в том, что время тренировки занимает так много времени.

Я пытался использовать графический процессор (Nvidia Geforce RTX 2080 Ti), и мне нужно 3 дня, чтобы тренироваться, когда я устанавливаю период (количество экспериментов) равным 200.

Я хотел бы знать, есть ли способ сократить время на обучение. Могу ли я изменить какие-либо параметры или какие-либо другие параметры?

Или это считается нормальным временем потребления с учетом размера набора данных и используемого мной графического процессора?

Пять строк кода для обучения следующие:

from imageai.Prediction.Custom import ModelTraining

model_trainer = ModelTraining()

model_trainer.setModelTypeAsDenseNet()

model_trainer.setDataDirectory("mechsymbol")
model_trainer.trainModel(num_objects=39, num_experiments=200, enhance_data=True, batch_size=32, show_network_summary=True)

1 Ответ

0 голосов
/ 24 апреля 2019

Я довольно новичок в ImageAI / Tensorflow, но все еще учусь.

Что касается более быстрого обучения с использованием параметров, я думаю, что Enhance_Data даст вам немного более быстрое обучение, установив еголожно.Этот параметр должен быть установлен в True, если у вас нет такого большого набора изображений для обучения (менее 1000).Этот параметр получит больше выборок из существующих.

enhance_data = False

И также стоит отметить, что вам не нужно проходить все тренировки 200 поколений, если вы не добиваетесь лучших результатов после, например, 50 эпох из-за перегрузки.модель.

Слышали о «смешанной прецизионной трансформации» с использованием FP16 вместо FP32?

Я не пробовал сам, так как это будет незначительная разница на Nvidia GTX 1080 Ti, так как это делаетне имеют тензорных ядер.Но вы можете прочитать больше об этом здесь https://medium.com/tensorflow/automatic-mixed-precision-in-tensorflow-for-faster-ai-training-on-nvidia-gpus-6033234b2540

Для справки:

Когда я делаю свое обучение в ResNet набора данных изображения с 62 классами (26 ГБ), которыеимеет от 1000 до 2000 изображений для обучения и 200 для проверки, для каждой эпохи требуется около 10 минут.

Это будет около 33 часов для обучения 200-го поколения.

Это мой imageAi pythonстроки кода

model_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
model_trainer.setDataDirectory('.')
model_trainer.trainModel(num_objects=classes_in_train, num_experiments=100, 
enhance_data=False, batch_size=32)

Found 81086 images belonging to 62 classes.
Found 13503 images belonging to 62 classes.

Epoch 38/100
231/2533 [=>............................] - ETA: 10:00 - loss: 2.9065e-04 - acc: 0.9999

Надеюсь, это может дать вам полезную информацию.

...