⇨ Первая часть ⇨ Часть третья И снова здравствуйте! Как вы могли заметить, праздники несколько нарушили график выхода статей.
Думаю, что многие за это время успели если не полностью обучить свою модель, то хотя бы поэкспериментировать с разными наборами данных.
1. Установите дистрибутив 2. Загрузите фотографии 3. ??? 4. Прибыль!Если вас не интересовали эти наши нейросети, или вы начинаете читать с этой статьи, то, как говорится, нет времени объяснять, берем дистрибутив, скачиваем нужные фотографии и поехали! Подробная инструкция - в предыдущей статье серии .
Первая блин комковатая
Когда я обучал модель для @photo2comicsbot первый раз, не мудрствуя лукаво, я просто запихнул в датасет около 1000 страниц комиксов.Да, вместе с обложками, анонсами и прочими наполнителями.
На входе это выглядело так:
Результат был тот же:
Больше картинок
Модель прекрасно передает общие различия между комиксами и фотографиями:
- Характерная цветокоррекция
- Изложение
- Разбивка на блоки
- Облака с текстом
Но мне было интересно, какие результаты можно получить с помощью «более чистого» набора данных.
Возьми два
Для следующего эксперимента я оставил страницы с одним блоком, а из остальных вырезал самые большие куски, состоящие из одного блока, чтобы избавиться от вертикальных и горизонтальных разделительных линий в итоговой модели.
Если вы вносите изменения в свой набор данных, например, удаляете или добавляете фотографии, не забудьте сохранить предыдущую версию.Второй набор данных выглядел так:Вам будет куда вернуться, если что-то пойдет не так.
Результат, как говорится, налицо:
Больше картинок
Разделительные линии исчезли, но вместе с ними исчезла и выразительность текстовых пузырьков: они стали появляться в наборе данных гораздо реже и перестали быть основным признаком.
Пустое пространство, которое когда-то было заполнено текстом, теперь заполнено психоделическим шумом.
Третий раз - это очарование
Я решил полностью избавиться от текста, оставив только те части комикса, где его нет. Никто не выжил: ни облака, ни титров, ни названий серий.
Набор данных после «лингвистического геноцида»:
Конечный результат:
Больше картинок
С одной стороны, артефактов стало меньше, с другой — ушла выразительность.
Поскольку в GAN-обучении качество результата во многом определяется нами с вами, единого рецепта хорошей модели не существует. Красота в глазах смотрящего, поэтому не бойтесь экспериментировать и выбирать то, что вам больше нравится.
К оружию!
Что ж, об основных подводных камнях и способах борьбы с ними мы уже рассказали, пора переходить к делу.Заходим в папку, куда мы скачали раздачу.
Напомню, это называлось pytorch-CycleGAN-и-pix2pix Так как наша инструкция для чайников, то код дистрибутива трогать не будем, так как все необходимые параметры можно задать из командной строки.
В этом распределении обучение по умолчанию длится двести эпох с линейным снижением скорости обучения после сотой эпохи.
Максимальное разрешение, с которым могла справиться моя восьмигигабайтная карта, было 400x400. Полное обучение заняло у меня около 33 часов, поэтому воспользуемся небольшим лайфхаком.Пожалуй, хватит теории, пора переходить к практике.Сначала мы обучим модель на изображениях размером 128х128, затем 256х256 и только на финальном этапе покажем ей наш великолепный размер 400х400. Первый этап продлится 100 эпох, второй и третий — по 50, что позволит нам сократить время обучения почти вдвое.
Как показывает практика, результат при таком подходе не хуже, а иногда даже лучше, чем при тренировке сразу на максимальном разрешении.
Введите в командной строке.
Энажми сначала
Не забудьте заменить фигурные скобки своими значениями.python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 128 --load_size 180 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 4
Рассмотрим некоторые параметры более подробно: --batch_size {number}
Этот параметр отвечает за количество обрабатываемых изображений «за такт», положительно влияя на скорость и отрицательно влияя на прожорливость модели.
На каждом шаге выбирайте максимально возможный --batch_size, который не вызывает ошибок из-за недостаточности памяти графического процессора.
-- dataroot {dataset root folder}
— папка с нашим набором данных.
Внутри него должны быть папки trainA, trainB, testA, testB, как описано в предыдущей статье.
--name {model name}
— название вашего проекта.
Может быть произвольным, но я рекомендую включать в название архитектуру модели, максимальное разрешение и название набора данных.
Например: «resnet9_128to400_comics8» Это поможет вам различать эксперименты с разными параметрами и данными.
Первый этап обучения можно остановить на сотой эпохе.
Вы можете следить за своим прогрессом из браузера: локальный хост :8097/
(или другая ссылка, которая будет видна в консоли)
Энажмите секунду
python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 256 --load_size 290 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 2 --epoch 100 --epoch_count 0 --continue_train
Здесь важно указать эпоху, в которой мы завершили обучение на первом этапе.
«--epoch 100» означает, что мы будем загружать модель с контрольной точки сотой эпохи.
«--epoch_count 0» означает, что мы начнем обучение с нуля, с максимальной скоростью обучения.
Второй этап обучения можно прекратить на 50-й эпохе.
Энажмите третий
python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 400 --load_size 430 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 1 --epoch 50 --epoch_count 0 --continue_train
Третий этап обучения можно прекратить и на 50-й эпохе, но это дело вкуса.
Вы можете доучиться до конца и выбрать понравившийся вам промежуточный результат. Важно помнить, что результат на 200-й эпохе может быть хуже, чем на 150-й.
Теперь выйди и посмотри, что ты сделал
В процессе обучения модель и промежуточные результаты будут сохраняться в папку /pytorch-CycleGAN-and-pix2pix/checkpoints/{название модели} Чтобы проверить модель, достаточно ввести в командную строку: python test.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --netG resnet_9blocks --crop_size 512 --load_size 580 --epoch {epoch name}
Вы можете увидеть результат в тестовом наборе данных для любой контрольной точки, просто укажите его как {имя эпохи}.
Если {имя эпохи} не указано, будет взята последняя контрольная точка.
Результат сохранится в папке: /pytorch-CycleGAN-and-pix2pix/results/{model name}/test_{epoch name}
Чтобы не запутаться в том, какая модель на каком наборе данных какой результат дает, начните вести небольшой дневник.Это все на сегодня! В следующей статье мы узнаем, как экспортировать готовую модель и разместить ее в облаке.Зафиксируйте исходные данные и результаты обучения.
Например, командная строка и эпоха, в которой вы достигли.
Этих данных достаточно для сохранения параметров обучения и набора данных, на котором мы обучались.
Ведь чем отличается научный эксперимент от дурачества? Потому что у нас все задокументировано!
Не бойтесь экспериментировать.
Обязательно попробуйте несколько разных наборов данных, сравните результаты и поделитесь ими в комментариях! Еще увидимся! ⇨ Следующая часть Теги: #Машинное обучение #python #программирование #учебник #GaN #комиксы #cyclegan
-
Обзор Блога №16
19 Oct, 24 -
Радио-Э №14
19 Oct, 24