Этот проект направлен на упрощение процесса создания пользовательской модели Deepdream с использованием предварительно предварительно проведенных моделей Googlenet и пользовательских наборов данных.
Вот несколько примеров визуализаций, созданных с помощью пользовательских моделей DeepDream, обученных летним тематическим изображениям:
Зависимости:
Вы можете найти подробные инструкции по установке для Ubuntu и Windows в руководстве по установке.
Убедившись, что Pytorch установлен, вы можете при желании загрузить предварительные модели Place365 Googlenet и Inception5h (начало .1) со следующей командой:
python models/download_models.py
Если вы просто хотите создать Deepdreams с предварительно предварительными моделями или загрузили предварительную модель, сделанную кем-то другим с Dream-Creator, вы можете перейти к визуализации моделей.
Создайте и подготовьте свой набор данных
Соберите изображения
Сортировать изображения в требуемый формат.
Удалите любые поврежденные изображения.
Убедитесь, что любые дубликаты удаляются, если вы еще этого не сделали
Измените размер набора данных, чтобы ускорить обучение.
Рассчитайте среднее и стандартное отклонение вашего набора данных.
Обучить модель Googlenet
Визуализируйте результаты
Если результаты не очень хороши, то вам, возможно, придется вернуться к шагу 1-2 и внести некоторые изменения с тем, какие изображения, категории и параметры обучения используются.
Для создания визуализаций может потребоваться всего 5 эпох, которые напоминают ваши учебные данные, используя основной уровень FC/Logits. Чтобы ускорить тренировку и создать лучшие результаты, используемая модель BVLC предварительно проникает для защиты от изменения нижних слоев.
Чтобы обучить пользовательскую модель Deepdream, вам нужно будет создать набор данных, состоящий из изображений, которые вы хотите использовать для обучения. Существует множество способов, которыми вы можете активировать изображения для своего набора данных, и вам понадобится как минимум пару сотен изображений для каждой категории/класса.
DeepDream чаще всего выполняется с моделями классификации изображений, обученными наборам данных изображений, которые состоят из разных категорий/классов. Модели классификации изображений пытаются узнать разницу между различными классами изображений, и при этом нейроны получают способность создавать капусты, подобные мечте. Выбранные вами изображения, различия между ними, различия между выбранными вами классами и количество используемых изображений, сильно повлияют на визуализации, которые могут быть созданы.
Наборы данных изображений Pytorch должны быть структурированы там, где основной каталог/папка содержит подпапки/каталоги для каждой категории/класса. Ниже показан пример необходимой структуры набора данных:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
После того, как вы создали свой набор данных в правильном формате, убедитесь, что вы удалите какие -либо дубликаты изображений, если вы еще этого не сделали. Существует множество инструментов, которые вы можете использовать для этой задачи, включая бесплатное программное обеспечение с открытым исходным кодом.
Если вы еще этого не сделали, вы можете создать резервную копию вашего набора данных.
Далее вам нужно будет убедиться, что ни одно из изображений не повреждено таким образом, чтобы не допустить их загрузки Pytorch. Чтобы автоматически удалить любые поврежденные изображения из вашего набора данных, используйте следующую команду:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
Затем вы, вероятно, захотите изменить размер вашего набора данных, чтобы быть ближе к размеру обучающего изображения, чтобы ускорить обучение. Изменение размера вашего набора данных не помешает вам создавать более крупные изображения Deepdream с полученной моделью. Включенный сценарий изменения размера будет изменять изображения, которые превышают указанный размер изображения с их высотой или шириной.
Чтобы изменить размер изображений в вашем наборе данных, используйте следующую команду:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
Теперь с вашим недавно измененным набором данных вы можете рассчитать среднее и стандартное отклонение вашего набора данных для использования в обучении и Deepdreaming. Убедитесь, что снова пересчитайте среднее и стандартное отклонение, если вы измените набор данных, добавив или удаляя изображения.
Чтобы вычислить среднее и стандартное отклонение вашего набора данных, используйте следующую команду и сохраните вывод для следующего шага:
python data_tools/calc_ms.py -data_path <training_data>
Теперь вы можете начать обучение своей модели DeepDream, выполнив сценарий обучения Googlenet. Рекомендуется сохранить модель каждые 5-10 эпох, чтобы контролировать качество визуализации.
После обучения ваших моделей вы можете добавить в них матрицу Color Correlation для цветной декорреляции со следующей командой:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
Основная команда обучения:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
Параметры ввода:
-data_path
: Путь к каталогу/папке набора данных, который вы хотите использовать.-data_mean
: Ваш предварительный список средних значений для выбранного вами набора данных.-data_sd
: Ваш предварительно рассчитанный список значений стандартного отклонения для выбранного вами набора данных.Варианты обучения:
-num_epochs
: количество тренировочных эпох для использования. По умолчанию 120
.-batch_size
: количество образовательных и валидационных изображений для проведения сети одновременно. По умолчанию 32
.-learning_rate
: скорость обучения для использования с оптимизатором ADAM или SGD. По умолчанию 1e-2
.-optimizer
: алгоритм оптимизации для использования; либо sgd
, либо adam
; По умолчанию sgd
.-train_workers
: Сколько работников использовать для обучения. По умолчанию 0
.-val_workers
: Сколько работников использовать для проверки. По умолчанию 0
.-balance_classes
: Включение этого флага будет сбалансировать обучение для каждого класса на основе размера класса.Параметры модели:
-model_file
: Путь к файлу модели .pth
для использования для стартовой модели. По умолчанию модель BVLC Googlenet.-freeze_to
: какой слой для замораживания модели до; Один из none
, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
, mixed4c
, mixed4d
, mixed4e
, mixed5a
или mixed5b
. По умолчанию mixed3b
.-freeze_aux1_to
: какой слой для заморожения первой вспомогательной ветви до; Один из none
, loss_conv
, loss_fc
или loss_classifier
. По умолчанию none
.-freeze_aux2_to
: какой слой для заморожения второй вспомогательной ветви до; Один из none
, loss_conv
, loss_fc
или loss_classifier
. По умолчанию none
.-delete_branches
: Если этот флаг включен, в модели не будет использоваться вспомогательные ветви.Параметры вывода:
-save_epoch
: Сохраните модель каждые эпохи save_epoch
. По умолчанию 10
. Установите на 0
, чтобы отключить сохранение промежуточных моделей.-output_name
: имя выходной модели. По умолчанию bvlc_out.pth
.-individual_acc
: Включение этого флага печатает индивидуальную точность каждого класса.-save_csv
: Включение этого флага сохранет данные о потерях и точности в файлах TXT.-csv_dir
: где сохранить файлы CSV. По умолчанию установлена текущая рабочая каталог.Другие варианты:
-use_device
: Идентификатор GPU с нулевым индексом GPU для использования плюс cuda:
. По умолчанию cuda:0
.-seed
: целочисленное значение, которое вы можете указать для повторяемых результатов. По умолчанию это значение является случайным для каждого запуска.Параметры набора данных:
-val_percent
: процент изображений из каждого класса для использования для проверки. По умолчанию 0.2
.После обучения новой модели Deepdream вам нужно проверить ее визуализации. Лучшие визуализации обнаруживаются в основном слое FC, также известном как слой «logits». Этот сценарий помогает вам быстро и легко визуализировать все каналы указанного слоя в конкретной модели для конкретной эпохи модели, генерируя отдельное изображение для каждого канала.
Параметры ввода:
-model_file
: Путь к предварительному Googlenet Model, которую вы хотите использовать.-learning_rate
: скорость обучения для использования с оптимизатором ADAM или L-BFGS. По умолчанию 1.5
.-optimizer
: алгоритм оптимизации для использования; Либо lbfgs
или adam
; По умолчанию adam
.-num_iterations
: по умолчанию 500
.-layer
: конкретный слой, который вы хотите использовать. По умолчанию установлено в fc
.-extract_neuron
: Если этот флаг включен, центральный нейрон будет извлечен из каждого канала.-image_size
: отдельный список запятой <height>,<width>
для использования для выходного изображения. По умолчанию установлено 224,224
.-jitter
: количество джанитера изображения для использования для предварительной обработки. По умолчанию 16
.-fft_decorrelation
: использовать ли пространственную декорреляцию FFT или нет. Если включено, следует использовать более низкую скорость обучения.-color_decorrelation
: использовать ли цветной декорреляции. При желании предоставить разделенную запятую список значений для матрицы цветовой корреляции. Если значений не предоставляется, попытка загрузить матрицу Color Correlation из модели будет сделана перед дефолтом в матрицу Color Correlation ImageNet.-random_scale
: использовать ли случайное масштабирование или нет. При желании предоставить отдельный список значений для случайного выбора шкал. Если значения не предоставляются, то шкалы будут выбраны случайным образом из следующего списка: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: использовать ли случайные вращения или нет. При желании предоставьте отдельный список значений степеней для севооборотов, которые будут выбраны случайным образом из или единого значения для использования для случайного выбора степеней из [-value, value]
. Если значения не предоставляются, то будет использоваться диапазон [-5, 5]
.-padding
: количество прокладки для использования до случайного масштабирования и случайных вращений для предотвращения артефактов края. Затем прокладка удаляется после преобразования. По умолчанию установлено значение 0
, чтобы отключить его.Параметры обработки:
-batch_size
: сколько изображений визуализации канала для создания в каждой партии. По умолчанию 10
.-start_channel
: какой канал начать создавать изображения визуализации на. По умолчанию 0
.-end_channel
: какой канал прекратить создание изображений визуализации на. По умолчанию установлено значение -1
для всех каналов.Требуется только в том случае, если модель их не содержит, параметры :
-model_epoch
: эпоха обучения, из которой была сохранена модель, для использования для имен вывода изображений. По умолчанию 120
.-data_mean
: Ваш предварительный список средних значений, которые использовались для обучения модели, если они не были сохранены внутри модели.-num_classes
: количество классов, на которые была обучена модель. По умолчанию 120
.Параметры вывода :
-output_dir
: где сохранить выходные изображения. По умолчанию установлена текущего рабочего каталога.-print_iter
: Печать PRENT GROST Every print_iter
итерации. Установите на 0
, чтобы отключить печать.-save_iter
: Сохраните изображения все итерации save_iter
. По умолчанию 0
, чтобы отключить сохранение промежуточных результатов.Другие варианты:
-use_device
: Идентификатор GPU с нулевым индексом GPU для использования плюс cuda:
. По умолчанию cuda:0
.-seed
: целочисленное значение, которое вы можете указать для повторяемых результатов. По умолчанию это значение является случайным для каждого запуска.Основная визуализация слоя FC (logits):
python vis_multi.py -model_file <bvlc_out120>.pth
Advanced FC (Logits) Визуализация слоя:
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
Этот сценарий позволяет создавать галлюцинации DeepDream с обученными моделями Googlenet.
Параметры ввода:
-model_file
: Путь к предварительному Googlenet Model, которую вы хотите использовать.-learning_rate
: скорость обучения для использования с оптимизатором ADAM или L-BFGS. По умолчанию 1.5
.-optimizer
: алгоритм оптимизации для использования; Либо lbfgs
или adam
; По умолчанию adam
.-num_iterations
: по умолчанию 500
.-content_image
: путь к вашему входному изображению. Если входное изображение не указано, вместо этого используется случайный шум.-layer
: конкретный слой, который вы хотите использовать. По умолчанию установлено в mixed5a
.-channel
: конкретный канал слоя, который вы хотите использовать. По умолчанию установлено в -1
для отключения конкретного выбора канала.-extract_neuron
: Если этот флаг включен, центральный нейрон будет извлечен из канала, выбранного параметром -channel
.-image_size
: отдельный список запятой <height>,<width>
для использования для выходного изображения. Если будет предоставлено одно значение для максимальной длины боковой стороны вместе с изображением содержимого, то минимальная длина боковой длины будет рассчитываться автоматически. По умолчанию установлено 224,224
.-jitter
: количество джанитера изображения для использования для предварительной обработки. По умолчанию 16
.-fft_decorrelation
: использовать ли пространственную декорреляцию FFT или нет. Если включено, следует использовать более низкую скорость обучения.-color_decorrelation
: использовать ли цветной декорреляции. При желании предоставить разделенную запятую список значений для матрицы цветовой корреляции. Если значений не предоставляется, попытка загрузить матрицу Color Correlation из модели будет сделана перед дефолтом в матрицу Color Correlation ImageNet.-random_scale
: использовать ли случайное масштабирование или нет. При желании предоставить отдельный список значений для случайного выбора шкал. Если значения не предоставляются, то шкалы будут выбраны случайным образом из следующего списка: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: использовать ли случайные вращения или нет. При желании предоставьте отдельный список значений степеней для севооборотов, которые будут выбраны случайным образом из или единого значения для использования для случайного выбора степеней из [-value, value]
. Если значения не предоставляются, то будет использоваться диапазон [-5, 5]
.-padding
: количество прокладки для использования до случайного масштабирования и случайных вращений для предотвращения артефактов края. Затем прокладка удаляется после преобразования. По умолчанию установлено значение 0
, чтобы отключить его.-layer_vis
: использовать ли Deepdream или Visualization, не визуализируя определенные каналы слоя. Один из deepdream
или direction
; По умолчанию deepdream
.Требуется только в том случае, если модель их не содержит, параметры :
-data_mean
: Ваш предварительный список средних значений, которые использовались для обучения модели, если они не были сохранены внутри модели.-num_classes
: количество классов, на которые была обучена модель, если она не была сохранена внутри модели.Параметры вывода :
-output_image
: имя выходного изображения. По умолчанию out.png
.-print_iter
: Печать PRENT GROST Every print_iter
итерации. Установите на 0
, чтобы отключить печать.-save_iter
: Сохраните изображения все итерации save_iter
. По умолчанию 0
, чтобы отключить сохранение промежуточных результатов.Варианты плитки:
-tile_size
: желаемый размер плитки для использования. Либо отдельный список запятой <height>,<width>
или одно значение для использования как для высоты плитки, так и для ширины. По умолчанию установлено значение 0
, чтобы отключить плитку.-tile_overlap
: процент перекрытия для использования для плиток. По умолчанию 25
% для перекрытия. Процент перекрытия более 50% приведет к проблемам.-tile_iter
: по умолчанию 50
.Другие варианты:
-use_device
: Идентификатор GPU с нулевым индексом GPU для использования плюс cuda:
. По умолчанию cuda:0
.-seed
: целочисленное значение, которое вы можете указать для повторяемых результатов. По умолчанию это значение является случайным для каждого запуска.Базовый DeepDream:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
Advanced Deepdream:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
См. Здесь для получения дополнительной информации обо всех включенных сценариях/инструментах, связанных с созданием наборов данных, очистки и подготовки.