Deoldify: Программа Для Раскрашивания Черно-Белых Изображений

Короче говоря, цель этого проекта — раскрасить и восстановить старые фотографии.

Я расскажу немного подробнее, но сначала давайте посмотрим на фотографии! Кстати, большая часть оригинальных изображений взята с сабреддита r/TheWayWeWere, всем спасибо за такие качественные большие картинки.

Это всего лишь несколько примеров, и они вполне типичны! Мария Андерсон в роли Маленькой феи и ее паж Любовь Рябцова в балете «Спящая красавица» в Императорском театре, Санкт-Петербург, Россия, 1890 г.



DeOldify: программа для раскрашивания черно-белых изображений

Женщина отдыхает в гостиной (1920, Швеция)

DeOldify: программа для раскрашивания черно-белых изображений

Студенты-медики позируют рядом с трупом, около 1890 года.



DeOldify: программа для раскрашивания черно-белых изображений

Серфер на Гавайях, 1890 год.

DeOldify: программа для раскрашивания черно-белых изображений

Вращающаяся лошадь, 1898 г.



DeOldify: программа для раскрашивания черно-белых изображений

Интерьер бара Миллера и Шумейкера, 1899 год.

DeOldify: программа для раскрашивания черно-белых изображений

Париж в 1880-х годах

DeOldify: программа для раскрашивания черно-белых изображений

Вид на Динбург с высоты птичьего полета в 1920-е годы.



DeOldify: программа для раскрашивания черно-белых изображений

Женщина из Техаса, 1938 год.

DeOldify: программа для раскрашивания черно-белых изображений

Люди на вокзале Ватерлоо впервые смотрят телевизор, Лондон, 1936 год.

DeOldify: программа для раскрашивания черно-белых изображений

Урок географии 1850 года.



DeOldify: программа для раскрашивания черно-белых изображений

Китайские курильщики опиума в 1880 году.



DeOldify: программа для раскрашивания черно-белых изображений

Обратите внимание, что даже очень старые и/или некачественные фотографии по-прежнему выглядят довольно круто: Дедвуд, Южная Дакота, 1877 год.

DeOldify: программа для раскрашивания черно-белых изображений

Братья и сестры в 1877 году (Дедвуд)

DeOldify: программа для раскрашивания черно-белых изображений

Портсмут-сквер в Сан-Франциско, 1851 год.

DeOldify: программа для раскрашивания черно-белых изображений

Самурай, около 1860-х годов.



DeOldify: программа для раскрашивания черно-белых изображений

Конечно, модель не идеальна.

Эта красная рука сводит меня с ума, но в остальном она работает просто фантастически: Ирокезская девушка-сенека, 1908 год.

DeOldify: программа для раскрашивания черно-белых изображений

Она также умеет раскрашивать черно-белые рисунки:

DeOldify: программа для раскрашивания черно-белых изображений

Технические детали Это модель, основанная на глубоком обучении.

В частности, я объединил следующие подходы:

  • Самообслуживание ГАН .

    Единственное, что используется в качестве генератора предварительно обученный Unet и я просто поменял его на спектральную нормализацию и, собственно, механизм Само-внимания.

    Это достаточно простая модификация.

    Позвольте мне сказать вам, разница потрясающая по сравнению с предыдущей версией Wasserstein GAN, которую я пытался заставить работать.

    Мне понравилась теория GAN Вассерштейна, но на практике она не работает. Но я просто влюбился в ГАНы Self-Attention.

  • Структура обучения, такая как прогрессивный рост ГАН (но не совсем так).

    Разница в том, что количество слоев остается постоянным: я просто менял размер входных данных и настраивал скорость обучения так, чтобы переходы между размерами были успешными.

    Кажется, что он дает тот же конечный результат, но он обучается быстрее, более стабилен и лучше обобщает.

  • Правило ТТУР (Правило обновления двух временных масштабов).

    Здесь все довольно ясно: всего лишь однозначные итерации генератора/дискриминатора (критика) и более высокая скорость обучения дискриминатора.

  • Функция потерь генератора состоит из двух частей: одна из них — основная функция Perceptual Loss (или Feature Loss) на основе VGG16 — она просто подталкивает модель генератора к репликации входного изображения.

    Вторая часть – оценка потерь со стороны дискриминатора (критика).

    Для любопытных: одной только функции Perceptual Loss недостаточно для хорошего результата.

    Обычно это просто поощряет кучу коричневых, зеленых и синих — вы знаете, обманывает тест, а в этом нейронные сети действительно хороши! Ключевой момент заключается в том, что GAN, по сути, изучает функцию потерь за вас, что на самом деле является одним большим шагом к идеалу, к которому мы стремимся в машинном обучении.

    И, конечно же, результаты значительно улучшатся, когда машина сама научится тому, что вы ранее закодировали вручную.

    Здесь это, безусловно, так.

Прелесть этой модели в том, что она неплохо справляется с различными модификациями изображений.

То, что вы видите выше, — это результаты модели раскрашивания, но это всего лишь один компонент в процессе разработки, который я хочу разработать с использованием той же модели.

Далее я попробую улучшить старые изображения, и следующий пункт на повестке дня — модель улучшения насыщенности и насыщенности (дефейд).

Сейчас она находится на начальной стадии обучения.

По сути, это та же модель, но с некоторыми настройками контрастности/яркости для имитации выцветших фотографий и снимков, сделанных на старом/плохом оборудовании.

Я уже получил некоторые обнадеживающие результаты:

DeOldify: программа для раскрашивания черно-белых изображений

Подробнее о проекте В чем суть этого проекта? Я просто хочу применить GAN, чтобы старые фотографии выглядели очень-очень хорошо.

И что еще более важно, это сделает проект полезный .

И да, мне определенно интересна работа с видео, но сначала надо разобраться, как эту модель контролировать в плане потребления памяти (это настоящий зверь).

Было бы неплохо, если бы модели не занимали два-три дня на обучение на 1080Ti (к сожалению, типичное для GAN).

Хотя это мое детище и я буду активно обновлять и улучшать код в обозримом будущем, постараюсь сделать программу максимально удобной для пользователя, хотя с ней наверняка возникнут некоторые трудности.

И я клянусь, что я правильно задокументирую код. когда-нибудь.

Признаюсь, я один из тех людей, которые верят в «самодокументируемый код» (LOL).

Запуск модели самостоятельно Проект построен на замечательной библиотеке Fast.AI. К сожалению, это старая версия, и ее еще предстоит обновить до новой (это определенно на повестке дня).

Итак, предпосылки, вкратце:

  • Старый Библиотека Fast.AI .

    Зарывшись в проекте на два месяца, я немного упустил, что с ним произошло, потому что тот, который сейчас помечен как "старый", на самом деле не похож на тот, что у меня есть.

    Все изменилось за последние два месяца или около того.

    Так что если с другими версиями ничего не работает, я развил это здесь .

    Опять же на повестке дня обновление до последней версии, заранее извиняюсь.

  • Все зависимости Fast.AI : Там есть удобные файлы «requirements.txt» и «environment.yml».

  • Питон 0.4.1 (требуется Spectrum_norm, поэтому нужна последняя стабильная версия).

  • ЮпитерЛаб .

  • Тензорборд (т.е.

    установка Tensorflow) и ТензорбордX .

    Я не думаю, что это строго обязательно, но так гораздо проще.

    Для вашего удобства я уже предоставил все необходимые хуки/обратные вызовы в Tensorboard! Есть примеры их использования.

    Примечательно, что по умолчанию внутрипроцессные изображения записываются в Tensorboard каждые 200 итераций, поэтому вы получаете единообразное и легко читаемое представление о том, что делает модель.

  • ImageNet : Отличный набор данных для обучения.

  • Мощная видеокарта .

    Мне бы очень хотелось иметь больше памяти, чем 11 ГБ в моей GeForce 1080Ti. Если у вас что-то послабее, будет сложно.

    Unet и Critic абсурдно велики, но чем они больше, тем лучше результаты.

Если вы хотите начать обработку изображений самостоятельно прямо сейчас без тренировки модели можно скачать готовые веса Здесь .

Затем откройте ColorizationVisualization.ipynb в JupyterLab. Убедитесь, что там есть строка со ссылкой на веса:

  
  
   

colorizer_path = Path('/path/to/colorizer_gen_192.h5')

Затем вам нужно загрузить модель раскраски после инициализации 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)

Я бы оставил размер около 500 пикселей, плюс-минус, если вы запускаете программу на графическом процессоре с большим объемом памяти (например, GeForce 1080Ti 11 ГБ).

Если памяти меньше, то придется уменьшить размер изображений или попробовать запустить на процессоре.

На самом деле я пытался сделать последнее, но по какой-то причине модель работала очень, абсурдно медленно, и я не нашел времени исследовать проблему.

Эксперты рекомендовали собрать Pytorch из исходного кода, что приведет к значительному повышению производительности.

Хм.

В тот момент на это не было времени.

Дополнительная информация Визуализация сгенерированных изображений по мере обучения Может выполнить в Jupyter: вам просто нужно установить значение истинный при создании экземпляра этого крючка рендеринга:

GANVisualizationHook(TENSORBOARD_PATH, trainer, 'trainer', jupyter=True, visual_iters=100

Я предпочитаю уйти ЛОЖЬ и просто используйте Tensorboard. Поверьте, вам тоже захочется сделать именно это.

Кроме того, если вы оставите его включенным слишком долго, Jupyter съест много памяти такими изображениями.

Вес модели также автоматически сохраняется во время тренировок GANTrainer. По умолчанию они сохраняются каждые 1000 итераций (это дорогостоящая операция).

Они хранятся в корневой папке, указанной вами для обучения, а имя соответствует имени save_base_name, указанному в расписании обучения.

Веса сохраняются отдельно для каждого размера тренировки.

Я бы рекомендовал просмотреть ваш код сверху вниз, начиная с Jupyter Notebook. Я отношусь к этим заметкам просто как к удобному интерфейсу для прототипирования и визуализации, все остальное перейдет в файлы .

py, как только я найду для них место.

У меня уже есть примеры визуализации, которые можно удобно включить и просмотреть: достаточно открыть xVisualization в Notebook, там перечислены тестовые изображения, входящие в проект (они находятся в test_images).

Если вы видите GAN Schedules — это самая уродливая вещь в проекте, всего лишь моя версия реализации GAN с прогрессивным обучением, подходящая для генератора Unet. Предварительно обученные веса для генератора колоризатора.

Здесь .

Проект DeFade все еще в разработке, я постараюсь опубликовать хорошие веса в течение нескольких дней.

Обычно при обучении первые хорошие результаты вы увидите на полпути, то есть с размера 192px (если использовать предоставленные обучающие примеры).

Я уверен, что где-то что-то напутал, поэтому, пожалуйста, дайте мне знать, если это так.

Известные вопросы

  • Это займет немного поиграйте с размером изображения чтобы получить лучший результат. Модель явно страдает от некоторой зависимости от соотношения сторон и размера при создании изображений.

    Раньше было намного хуже, но ситуация значительно улучшилась с увеличением освещения/контраста и введением прогрессивного обучения.

    Я хочу полностью устранить эту проблему и сосредоточусь на ней, но пока не отчаивайтесь, если изображение выглядит слишком насыщенным или имеет странные глюки.

    Скорее всего, после небольшого изменения размера все будет хорошо.

    Как правило, для перенасыщенных изображений нужно увеличить размер.

  • В дополнение к вышесказанному: получение качественных изображений на самом деле сводится к следующему: искусство выбора оптимальных параметров .

    Да, результаты выбираются вручную.

    Качеством я очень доволен, модель работает достаточно надежно, но не идеально.

    Проект все еще продолжается! Я думаю, что этот инструмент можно использовать в качестве «ИИ художника», но он еще не готов для широкой публики.

    Просто еще не время.

  • Ситуация усложняется: в настоящее время модель жестоко съедает память , поэтому на моей карте 1080Ti я могу обрабатывать изображения размером максимум 500-600 пикселей.

    Могу поспорить, что здесь есть много вариантов оптимизации, но я еще этого не сделал.

  • Я добавил в генератор Unet заполнение нулями для всего, что не соответствует ожидаемым размерам (именно так я могу загрузить изображение нестандартного размера).

    Это был очень быстрый хак, который привел к появлению глупых правых и нижних границ при выводе тестовых изображений произвольного размера.

    Я уверен, что есть лучший способ, но я его еще не нашел.

  • Модель любит синяя одежда.

    Не совсем понимаю почему, ищу решение!

Вы хотите больше? выложу новые результаты в Твиттере .

Дополнение от переводчика.

Из последних новостей в Твиттере: Сами представители национальности у своей землянки, 1880 год.

DeOldify: программа для раскрашивания черно-белых изображений

( оригинальный ) Строительство лондонского метро, 1860 г.



DeOldify: программа для раскрашивания черно-белых изображений

( оригинальный ) Трущобы Балтимора, 1938 год.

DeOldify: программа для раскрашивания черно-белых изображений

Тренажерный зал на Титанике, 1912 год.

DeOldify: программа для раскрашивания черно-белых изображений

( оригинальный ) Теги: #Машинное обучение #Программное обеспечение #с открытым исходным кодом #Обработка изображений #pytorch #jupyterlab #fast.ai #Wasserstein GAN #Self-Attention GAN #раскрашивание #восстановление фотографий

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.