- PVSM.RU - https://www.pvsm.ru -
Если вкратце, задача этого проекта — раскрашивать и восстанавливать старые снимки. Я немного углублюсь в детали, но сначала давайте посмотрим фотографии! Кстати, большинство исходных изображений взято из подреддита r/TheWayWeWere, благодарю всех за такие качественные большие снимки.
Это лишь немногие примеры, и они вполне типичные!
Мария Андерсон в роли Маленькой феи и её паж Любовь Рябцова в балете «Спящая красавица» в Императорском театре, Санкт-Петербург, Россия, 1890
Женщина расслабляется в своей гостиной (1920, Швеция)
Студенты-медики позируют возле трупа, около 1890
Сёрфер на Гавайях, 1890
Крутящаяся Лошадь, 1898
Интерьер бара Миллера и Шумейкера, 1899 SodaFountain
Париж в 1880-е
Эдинбург с высоты птичьего полёта в 1920-е
Техасская женщина в 1938 г.
Люди на станции Ватерлоо впервые смотрят телевизор, Лондон, 1936
Урок географии в 1850 году
Китайские курильщики опиума в 1880 году
Обратите внимание, что даже действительно старые и/или плохого качества фотографии по-прежнему выглядят довольно круто:
Дедвуд, Южная Дакота, 1877
Братья и сёстры в 1877 году (Дедвуд)
Площадь Портсмут в Сан-Франциско, 1851
Самураи, около 1860-х гг
Конечно, модель не идеальна. Эта красная рука сводит меня с ума, но в остальном она фантастически работает:
Девушка племени сенека из ирокезов, 1908
Она также может раскрашивать чёрно-белые рисунки:
Это модель на основе глубокого обучения. В частности, я совместил следующие подходы:
Прелесть данной модели в том, что она довольно хороша в самых разных модификациях изображения. То, что вы видите выше, — это результаты модели раскрашивания, но это лишь один компонент в конвейере, который я хочу разработать с той же моделью.
Дальше я попытаюсь довести до совершенства старые изображения, и следующий пункт на повестке дня — модель улучшения насыщенности и сочности (defade). Сейчас она находится на ранних этапах обучения. В основном это та же модель, но с некоторыми настройками контраста/яркости в качестве симуляции блеклых фотографий и снимков, сделанных со старым/плохим оборудованием. Я уже получил некоторые обнадёживающие результаты:
В чём суть этого проекта? Я просто хочу применить GAN, чтобы старые фотографии выглядели очень-очень хорошо. И что более важно, это сделает проект полезным. И да, мне определённо интересно поработать с видео, но сначала нужно разобраться, как взять эту модель под контроль по потреблению памяти (это настоящий зверь). Было бы неплохо, если бы модели не обучались от двух до трёх дней на 1080Ti (к сожалению, типично для GAN). Хотя это мой ребёнок и я буду активно обновлять и улучшать код в обозримом будущем, но я постараюсь сделать программу максимально удобной для пользователей, хотя наверняка c ней найдутся какие-то трудности.
И клянусь, что должным образом задокументирую код… когда-нибудь. По общему признанию, я один из тех людей, кто верит в «самодокументированный код» (LOL).
Проект построен на замечательной библиотеке Fast.AI. К сожалению, это старая версия, и ещё предстоит обновить её до новой (это определенно на повестке дня). Итак, предварительные требования, вкратце:
Если хотите самостоятельно начать обработку изображений прямо сейчас без обучения модели, то можете скачать готовые веса здесь [6]. Затем откройте ColorizationVisualization.ipynb в JupyterLab. Убедитесь, что там есть строка со ссылкой на веса:
colorizer_path = Path('/path/to/colorizer_gen_192.h5')
Тогда нужно загрузить модель colorizer после того, как инициализируется netG:
load_model(netG, colorizer_path)
Затем просто поместите любые изображения в папку /test_images/, откуда вы запускаете программу. Можете визуализировать результаты в Jupyter Notebook такими строчками:
vis.plot_transformed_image("test_images/derp.jpg", netG, md.val_ds, tfms=x_tfms, sz=500)
Я бы сохранил размер около 500px, плюс-минус, если запускаете программу на GPU с большим количеством памяти (например, GeForce 1080Ti 11 GB). Если памяти меньше, то вам придётся уменьшить размер картинок или попробовать запустить на CPU. Я на самом деле пытался сделать последнее, но по какой-то причине модель работала очень, абсурдно медленно, и я не нашел времени, чтобы исследовать проблему. Знатоки рекомендовали собрать Pytorch из исходников, тогда получится большой прирост производительности. Мда… В тот момент было не до того.
Визуализацию сгенерированных изображений по мере обучения можно выполнить и в Jupyter: нужно лишь установить значение true при создании экземпляра этого хука визуализации:
GANVisualizationHook(TENSORBOARD_PATH, trainer, 'trainer', jupyter=True, visual_iters=100
Я предпочитаю оставить false и просто использовать Tensorboard. Поверьте, вам тоже захочется сделать именно так. Кроме того, если оставить его работать слишком долго, Jupyter съест много памяти с такими изображениями.
Веса модели тоже автоматически сохраняются во время тренировочных прогонов GANTrainer. По умолчанию, они сохраняются каждые 1000 итераций (это дорогостоящая операция). Они хранятся в корневой папке, которую вы указали для обучения, а название соответствует save_base_name, указанному в расписании обучения. Веса сохраняются отдельно для каждого размера тренировки.
Я бы рекомендовал перемещаться по коду сверху вниз, начиная с Jupyter Notebook. Я отношусь к этим заметкам просто как к удобному интерфейсу для прототипирования и визуализации, всё остальное пойдёт в файлы .py, как только я найду для них место. У меня уже есть примеры визуализации, которые можно удобно включить и посмотреть: просто откройте xVisualization в Notebook, там указаны включённые в проект тестовые изображения (они лежат в test_images).
Если увидите GAN Schedules, то это самая уродливая вещь в проекте, всего лишь моя версия реализации прогрессивного обучения GAN, подходящая для генератора Unet.
Предобученные веса для генератора колоризатора тоже здесь [6]. Проект DeFade пока в работе, я постараюсь выложить хорошие веса в течение нескольких дней.
Обычно при обучении вы увидите первые хорошие результаты на полпути, то есть с размера 192px (если используете предоставленные учебные примеры).
Уверен, что я где-то напортачил, так что пожалуйста, дайте знать, если это так.
Буду выкладывать новые результаты в твиттере [7].
Дополнение от переводчика.
Из последнего в твиттере:
Представители народности сами у своей землянки, 1880
(оригинал [8])
Строительство лондонского метро, 1860
(оригинал [9])
Трущобы Балтимора, 1938
Тренажёрный зал на «Титанике», 1912
(оригинал [10])
Автор: m1rko
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/298127
Ссылки в тексте:
[1] Self-Attention GAN: https://arxiv.org/abs/1805.08318
[2] прогрессивного роста GAN: https://arxiv.org/abs/1710.10196
[3] Правило TTUR: https://arxiv.org/abs/1706.08500
[4] форкнул её здесь: https://github.com/jantic/fastai
[5] TensorboardX: https://github.com/lanpa/tensorboardX
[6] здесь: https://www.dropbox.com/s/7r2wu0af6okv280/colorize_gen_192.h5
[7] в твиттере: https://twitter.com/citnaj
[8] оригинал: https://www.reddit.com/r/TheWayWeWere/comments/9jdd4w/sami_people_with_their_turf_hut_c1880/
[9] оригинал: https://www.reddit.com/r/HistoryPorn/comments/8606qa/london_underground_under_construction_in_1860_990/
[10] оригинал: https://www.reddit.com/r/TheWayWeWere/comments/7riclb/gym_aboard_the_titanic_1912/
[11] Источник: https://habr.com/post/428818/?utm_campaign=428818
Нажмите здесь для печати.