Проект Набила Хана, Джейсона Фанга, Кааба Ашкина, Кевина Тиана и Джун Мин Но

I. Введение

Черно-белые фотографии широко распространены в обществе, и часто многие из нас хотели бы вместо этого иметь цветные версии этих изображений. Мысленный эксперимент «Комната Мэри» описывает женщину, которая всю жизнь живет в черно-белом мире, но знает все о цвете. Однажды она отправляется в мир, в котором есть цвет. Вопрос в том, узнает ли она что-нибудь новое из этого опыта? Многие будут утверждать, что цвет обладает внутренней информацией, которую мы сами не можем определить количественно, и в нашем проекте мы надеемся найти способ сохранить сущность, предоставляемую цветом.

Исторические медиа часто изображаются в оттенках серого, а отсутствие цвета может упустить важную информацию, такую ​​как время суток, тип одежды, которую носят люди на фото или видео, а также сложные детали, касающиеся обстановки. Хотя эти детали могут показаться тривиальными, они потенциально могут привести историков к открытию чего-то нового в этот период времени. Питер Джексон, продюсер трилогии «Властелин колец», смог вручную раскрасить фильм Первой мировой войны, но этот процесс был очень трудоемким. Это побудило нас преследовать нашу цель - сделать раскрашивание изображений в оттенках серого более осуществимым и точным за счет использования моделей машинного обучения.

II. Модели

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

  • Условные глубокие сверточные генеративные состязательные сети
  • MobileNet
  • Раскрашивание изображений в реальном времени с помощью Learned Deep Priors

Что такое cDCGAN? Чем они отличаются от GAN?

  • GAN - генерирующие состязательные сети (GAN) - это архитектуры глубоких нейронных сетей, состоящие из двух нейронных сетей: генератора и дискриминатора. Эти две нейронные сети конкурируют друг с другом за значительный результат. Задача генератора состоит в том, чтобы получить результат, который может пройти проверку дискриминатора, а задача дискриминатора - не допустить результата, полученного генератором, путем сравнения результата с заданным. В нашем случае генератор будет раскрашивать изображения с максимально возможной точностью до того, как должно выглядеть реальное изображение, а задача дискриминатора - оценивать точность цветопередачи результата от генератора. Проще говоря, генератор создает поддельные изображения, которые он пытается выдать за реальные, а дискриминатор пытается вывести из строя все поддельные изображения (созданные генератором) и передать только реальные изображения. Эта «состязательная» взаимосвязь позволяет каждой нейронной сети со временем становиться лучше, и ожидается, что эта конкуренция между генератором и дискриминатором улучшит точность цветопередачи изображения, созданного на основе модели.

  • cGANs - условно-генеративные состязательные сети (cGAN) учатся генерировать поддельные выборки, используя существующую метку класса, а не общие выборки из неизвестных распределений шума.

  • DCGAN - Глубокие сверточные генерирующие состязательные сети (DCGAN) включают последовательные сверточные уровни, а не полносвязные сети. Он также использует сверточный шаг и транспонированную свертку для понижающей и повышающей дискретизации вместо использования всех сложных слоев. Это позволяет модели избавиться от использования максимального пула и вместо этого использовать другие специализированные методы, такие как функции reLu и пакетная нормализация, чтобы сделать себя гораздо более простой моделью, не создавая узких мест в качестве изображения.

  • cDCGAN - условные глубокие сверточные генерирующие противоборствующие сети (cDCGAN) сочетают в себе преимущества как DCGAN, так и cGAN. Они делают вычисления намного быстрее и дают лучшие результаты по сравнению с обычными GAN. Уже созданная / исследованная cDCGAN - это Pix2Pix, разработанная Филиппом Изолой. Однако мы использовали реализацию pix2pix by affinelayer в Tensorflow, которая лучше подходила для решения нашей проблемы.

Что такое MobileNet?

MobileNet - это модель классификации изображений CNN, которая может распознавать различное содержание изображения через несколько сверточных слоев. Подробную информацию о том, как работает CNN, можно узнать из этого видео Брэндона Рорера. Путем анализа каждого пикселя и соединения каждого из узлов, созданных в результате вычисления пикселей, эта модель может классифицировать изображения на более чем 1000 различных классов.

Конкретный MobileNet, который мы использовали, был MobileNet_v1_1.0_224 по ссылке здесь. Причина, по которой нам пришлось использовать эту модель, и что мы с ней сделали, будет обсуждаться позже в разделе III, когда мы будем обсуждать предварительную обработку.

Что такое раскрашивание изображений в реальном времени с помощью модели Learned Deep Priors?

Раскрашивание в реальном времени с изучением глубокого априорного значения - это сверточная нейронная сеть (CNN), которая использует ввод от пользователя в качестве подсказки для раскрашивания изображений в градациях серого. Пользователь выбирает несколько пикселей из фотографии в градациях серого, присваивает каждому пикселю определенное значение LAB и направляет CNN раскрашивать изображение, используя значение LAB выбранного пикселя в качестве эталона. Цветовое пространство LAB будет подробно рассмотрено позже в разделе V. Это позволяет различными способами раскрашивать изображения, позволяя пользователю по существу выбирать цветовые схемы для наиболее важных характеристик изображения.

В этой модели основная CNN (синяя) делит изображение на более мелкие части и анализирует каждый из пикселей в меньшей части для генерации значения. Значение, сгенерированное в результате вычисления пикселей, затем проходит через несколько сверточных слоев, и эти значения связаны через серию нейронной сети, которая предсказывает, какое значение цвета следует разместить для конкретного пикселя. Подсказки подаются и используются в этой модели через две разные сети: локальную (красная) и глобальную (зеленая). Локальный уровень включает пользовательский ввод и генерирует цветовое распределение Z, которое также может называться предварительным распределением, а глобальная сеть добавляет результат раскрашивания пикселей в основную сеть. Используя все три сети, модель может раскрашивать изображения в оттенках серого, используя подсказки пользователя. Обзор этой конкретной модели CNN и функции потерь, которую эта модель CNN минимизирует, показан ниже.

Благодаря минимизации функции потерь и включению определенных цветов для использования в качестве эталона, эта модель CNN отлично справляется с заполнением яркими цветами, когда пользователь вводит цвет. Без пользовательского ввода модель не может раскрашивать с использованием визуальных цветов и вместо этого заполняет фотографию мягкими цветами. Кроме того, целью проекта было не вручную раскрашивать изображения в оттенках серого, а скорее использовать автоматизацию для эстетической окраски черно-белых изображений. Таким образом, нам пришлось изменить систему ввода этой модели с ручного ввода на автоматический. То, как мы автоматически выбираем конкретный цвет для заливки и координатное положение пикселя, объясняется далее в разделе VI.

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

III. Предварительная обработка

Сбор данных

Чтобы обучить модели генерировать наилучшие возможные результаты, набор данных должен удовлетворять трем требованиям: размеру, цвету и содержанию. Размер набора данных имеет решающее значение, потому что обучающая модель должна иметь достаточное количество различных изображений, чтобы ее можно было протестировать с изображениями, которых она раньше не видела. Цвет набора данных гарантирует, что модель будет восприниматься с различным количеством цветов, чтобы она могла использовать эти цвета для раскрашивания невидимых изображений. Наконец, содержимое изображений помогает модели узнать, какие изображения используются, чтобы она могла раскрасить фотографию в зависимости от класса, который она распознала. Набор данных, который мы нашли от пользователя FloydHub emilwallner, содержал 9 294 изображения, все из которых имели разный цветовой охват и были размером 256 на 256 пикселей. Этот набор данных отвечал всем требованиям, а размеры фотографий идеально подходили для наших целей. Размерность 256 на 256 дает хороший баланс размера и качества. Поскольку время работы нейронных сетей имеет тенденцию быстро увеличиваться с большими размерами изображений, использование изображений меньшего размера, например 256 на 256 пикселей, позволит ускорить обучение и применить более практичный подход. Размер 256 на 256 пикселей также имел достаточно, чтобы увидеть содержимое фотографии с хорошим разрешением.

Исследование и предварительная обработка данных

Чтобы начать разработку нашего обучающего набора, мы преобразовали все изображения в нашем наборе данных из шкалы RGB в шкалу YUV. YUV - это еще одно цветовое пространство, которое обычно используется в исследованиях для учета человеческого восприятия цвета. Преобразование в YUV помогает сохранить максимальное разрешение яркости Y, несмотря на уменьшение разрешения цветности U и V, что приводит к изображениям в оттенках серого с высоким разрешением. Кроме того, уменьшение разрешений U и V может уменьшить размер нейронной сети, заставляя ее работать в два раза быстрее без большой потери точности. Последним шагом для преобразования изображений в оттенки серого было обнуление компонентов цветности УФ и сохранение значения Y фотографий.

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

  • Вращение - гарантирует, что модель не полагается на наклон изображения как часть прогноза.
  • Full Contrast Stretch - увеличивает диапазон значений яркости пикселей, чтобы охватить желаемый диапазон значений.
  • Уравнивание гистограммы - увеличивает количество пикселей в более широком диапазоне интенсивности пикселей за счет использования нелинейных и немонотонных передаточных функций. Он используется для изменения формы гистограммы интенсивности.
  • Адаптивное выравнивание гистограммы - вычисляет множественные гистограммы для каждого соответствующего раздела изображений и использует все гистограммы для перераспределения значений контрастности изображения. Это улучшает четкость краев и локальный контраст изображения.

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

Разделение на разные классы

Чтобы улучшить нашу модель cDCGAN, предоставив ей определенный класс, нам пришлось разделить наш обучающий набор данных из 9000 изображений на более мелкие классы: люди, ландшафт и объекты. Чтобы предотвратить ручную прокрутку каждого изображения и классификацию их по этим категориям, мы решили использовать переносное обучение в MobileNet и переобучить последний уровень модели, чтобы иметь возможность классифицировать изображения по нужным нам категориям. Мы сделали это, выбрав изображения 200 человек, 200 изображений ландшафта и 200 изображений объектов и обучив модель MobileNet, загрузив эти изображения. Результат трансферного обучения содержал ~ 2300 изображений людей, ~ 3400 изображений ландшафта и ~ 3500 изображений объектов.

IV. cDCGAN

Обучение / Результаты

Первоначально мы обучили модель с использованием 6716 обучающих изображений, которым потребовалось 38 часов, чтобы достичь 200 эпох на Nvidia GeForce GTX 1080, которая имеет вычислительную мощность 6,1. Поскольку вычислений на компьютере с графическим процессором было недостаточно, чтобы завершить проект в срок, нам пришлось найти другой метод обучения нашей модели. Чтобы сократить время обучения, мы обучили нашу модель с помощью экземпляра Amazon EC2 P3, который использует Tesla V100 с вычислительной мощностью 7,0. Это сократило время обучения с 38 часов до 18 часов на 200 эпох. Однако, несмотря на сокращение времени обучения, обучение нашей модели на 6716 изображениях для 1000 эпох дало плохие результаты, как показано ниже.

После неудовлетворительного результата мы предположили, что разделение нашего набора данных на отдельные классы улучшит наши результаты. Таким образом, мы использовали MobileNet для разделения наших 9000 обучающих изображений на 2354 изображения людей, 3379 изображений ландшафта и 3524 изображения объектов. Затем мы обучили одну модель для каждого класса в общей сложности трем моделям на трех инстансах Amazon EC2 P3 одновременно с шагом 500 эпох. Это дало гораздо лучшие результаты, как показано ниже:

Чтобы увидеть, можем ли мы улучшить точность раскрашивания с помощью методов предварительной обработки, мы применили выравнивание гистограммы, полное растяжение контраста и адаптивное выравнивание гистограммы к подмножеству набора данных о людях. Из-за ограничений по времени и вычислениям мы выбрали только 500 уникальных изображений для применения этих методов предварительной обработки. Применение этих трех методов предварительной обработки к 500 изображениям добавило бы 1500 изображений к набору данных, создав новый набор данных из 2000 изображений, что займет около 12 часов, чтобы обучить модель для 500 эпох на инстансе Amazon EC2 P3. Если бы мы решили применить методы предварительной обработки ко всем изображениям 2354 людей в нашем наборе данных и обучить модель на новом наборе данных, это увеличило бы наше время обучения в четыре раза. Таким образом, мы обучили нашу окончательную модель, используя 2000 изображений с шагом 500 эпох, всего 2000 эпох. Это привело к тому, что наша модель людей могла добавить намного больше глубины и формы, но потеряла способность ярко и точно раскрашивать фотографии.

Чтобы измерить ошибку тестирования количественно, мы измеряли точность раскрашивания каждой модели каждые 500 эпох, используя индекс структурного сходства (SSIM). Индекс структурного сходства (SSIM) - это основанная на восприятии модель, разработанная доктором Бовиком из Техасского университета в Остине, которая измеряет изменения в структурной информации изображений как хорошее приближение к воспринимаемому искажению изображения. Он принимает во внимание контраст, структуру и яркость и устанавливает веса для этих компонентов, чтобы оценить разницу между двумя изображениями. Уравнение SSIM показано ниже.

Используя SSIM в качестве метрики, мы поняли, что общая точность цветопередачи улучшается по мере увеличения количества эпох. Однако во время обучения был критический момент, когда ошибка теста начала уменьшаться, показывая, что модель была переоборудована для обучающей выборки. Таким образом, мы должны были найти золотую середину между смещением и дисперсией, вычисляя ошибку теста на каждом приращении эпохи. На приведенном ниже графике показано изменение SSIM в зависимости от количества эпох, прошедших обучение по нашей модели людей. Золотым пятном для многих моделей стали эпохи 1500 и 2000 годов.

В. Раскрашивание в реальном времени с использованием приоритетов глубокого обучения («подсказка»)

ЛАБОРАТОРИЯ

Поскольку наша «подсказка» использовала фотографии LAB в качестве входных данных, нам пришлось расшифровать красочность, используя цветовую схему LAB. LAB - это другое цветовое пространство, похожее на YUV, в котором есть один компонент яркости с двумя другими компонентами цветности. LAB был разработан таким образом, чтобы числовое изменение в шкале LAB было похоже на визуальное изменение, которое мы видим своими глазами. Мы хотели сохранить постоянное значение L, так как L - это «светимость» изображения, и мы не хотели, чтобы наша модель интерпретировала белый цвет (высокая яркость) как красочный. Для нашего проекта цветность изображения, продиктованная значениями A и B, определяет красочность фотографии.

Узнав о цветовом пространстве LAB, мы продолжили исследования по определению яркости на основе значений A и B в схеме LAB. Исследовательский веб-сайт и обсуждение на странице StackExchange помогли нам лучше понять, как вывести уравнение красочности для расчета величины яркости цвета.

Цветовую сетку LAB можно представить как на картинке ниже. В этой цветовой сетке L яркость остается постоянной. Мы узнали, что начало координатной сетки было очень близко к белому цвету, и в этот момент как A, так и B были равны нулю. Углы и края сетки содержали яркие цвета, на которые мы ориентировались. Чем дальше мы уходили от исходной точки, тем больше становились значения A и B. Таким образом, мы решили, что простого уравнения расстояния со значениями A и B будет достаточно для определения цветности пикселя.

Наш код выполняет итерацию по всему изображению, чтобы найти пиксель, который максимизирует результирующее значение этого уравнения. Мы проверяем только пиксели со значением L от 40 до 80, чтобы изображения были слишком темными или слишком светлыми для чтения. Наш код также позволяет использовать несколько подсказок, принимая параметр для вычисления количества различных пикселей. При реализации мы поняли, что несколько верхних максимальных значений обычно группируются вокруг одной и той же области, потому что один пиксель обычно не покрывает весь объект или цвет. Наше решение состояло в том, чтобы сохранить массив со всеми выбранными точками в них. При поиске новой точки мы создали условие, при котором новая точка должна находиться на расстоянии не менее 25 пикселей (10% от 256) от всех уже выбранных пикселей.

Результаты с подсказками

Как только мы поняли, что можем использовать «подсказку» для дальнейшего улучшения раскраски изображений в градациях серого, мы начали экспериментировать с возможностями модели. Модель на удивление хорошо раскрашивала полутоновые изображения, не давая никаких намеков. Однако, когда пользователь давал подсказки в виде цветового пространства LAB, эстетика раскрашивания изображения значительно улучшилась. По мере того, как количество подсказок увеличивалось, фотография охватывала большее цветовое пространство и заполняла больше частей изображения, но это не означало, что точность цветопередачи также увеличивалась. Фактически, для некоторых изображений SSIM уменьшился, хотя количество подсказок увеличилось. Обсуждение этой темы более подробно обсуждается в разделе VII. Результаты модели без подсказок и с подсказками показаны ниже.

Тестирование с использованием препроцессора

Мы также хотели проверить влияние предварительно обработанного изображения на раскрашивание модели «подсказки». Таким образом, мы предварительно обработали некоторые изображения и использовали их в качестве входных. Результаты модели были очень разочаровывающими для всех предварительно обработанных изображений из-за перенасыщенности цветов. Таким образом, мы решили, что использование исходного изображения в градациях серого для раскрашивания приведет к получению наилучших цветных фотографий.

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

VI. Связывание cDCGANS и раскрашивания в реальном времени с использованием приоритетов глубокого обучения

Наша первая интуиция заключалась в том, чтобы использовать случайный пиксель из целевого изображения в качестве подсказки для модели CNN; однако мы не хотели использовать значения пиксельной подсказки, которые мы не обязательно знали бы в реальном сценарии. После этого мы решили, что выбранные нами подсказки не должны быть взяты из исходной цели, должны включать реалистичные и яркие цвета и давать важную подсказку к трудным для раскрашивания частям изображения. Помимо этих требований, мы также должны были решить проблему автоматизации процесса раскраски, о которой мы говорили ранее, с помощью модели «подсказка». Как упоминалось ранее, модель «подсказки» требует, чтобы пользователь специально выбирал координату и цвет пикселя, что делает ее неполной автоматизированной моделью раскраски.

После нескольких размышлений мы заметили, что нашей модели cDCGANS было трудно рисовать точно внутри форм, но она раскрашивала предметы с гораздо большей уверенностью и яркостью. С другой стороны, модель CNN могла раскрашивать изображения в пределах линий и форм, но была гораздо менее уверена в раскраске, часто используя очень тусклые, смешанные и монотонные цвета. Мы пришли к выводу, что нужно использовать обе части этих моделей и получить точную раскраску изображения в градациях серого. Это привело к объединению обеих моделей в «цепную» модель.

«Цепная» модель сначала генерирует выходные данные из модели Pix2Pix cDCGAN, вводя изображение в градациях серого. Как только изображение сгенерировано, мы используем вывод Pix2Pix для выбора наиболее ярких цветов с помощью кода, который мы упоминали в разделе LAB блога. После того, как выбраны наиболее яркие пиксели, мы автоматически вводим их в модель «подсказки» и заставляем модель подсказки генерировать изображение с вариациями количества подсказок. Результатом всего этого процесса является модель «цепочки».

Результаты «цепной» модели

Для большинства изображений результат «цепной» модели показал наилучшую раскраску с точки зрения заполнения недостающих цветов и яркости цветов. Это показывает значительное улучшение по сравнению с обычной моделью Pix2Pix или моделью «подсказки».

VII. Обзор

Мы разослали опрос, чтобы собрать мнения о методах окраски наших различных моделей. В ходе опроса участникам предлагалось выбрать наиболее эстетичное изображение из набора из 3 цветных версий: результат Pix2Pix, модель «подсказка» без каких-либо подсказок и модель «подсказка» с 4 пикселями с использованием цепного метода.

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

Мы протестировали эти два вопроса с 6 разными изображениями, в результате чего получилось 12 уникальных вопросов. После накопления более 150 ответов наши результаты показали, что в среднем модель «подсказки» с 4 пикселями с использованием цепного метода обеспечивала изображение, которое выглядело наиболее эстетично и лучше всего соответствовало цели.

Результаты, которые мы обнаружили, были очень интересными, потому что, хотя модель «подсказки» без использованных подсказок имела в среднем немного более высокий показатель индекса структурного сходства (SSIM), чем модель «подсказки» с 4 управляемыми пикселями, участники опроса по-прежнему предпочитали последнюю. . Таким образом, мы смогли сделать вывод, что точность цветопередачи, которая была рассчитана с использованием SSIM в этом проекте, не обязательно коррелирует с более красивыми изображениями. Когда людей просили выбрать наиболее эстетичное изображение, они выбирали изображение с наиболее контрастными яркими цветами. Большинство людей считало прекрасным не точность цветопередачи, а скорее красочность и контраст. Это подтвердило причину, по которой SSIM уменьшился, поскольку мы добавили больше подсказок к модели цепочки. SSIM оценил фотографию, сравнивая точность цветопередачи между выходом модели и целевым изображением, а не глядя на контраст ярких цветов.

Тем не менее, как SSIM, так и мнение участников о цвете являются важными показателями, которые следует учитывать, потому что в конечном итоге мы делаем фотографии, которые лучше всего выглядят для наших глаз. Слово «лучший» может иметь разное значение для многих людей; «лучший» может означать точность цветопередачи для одних, а «лучший» также может означать высокую насыщенность и контраст для других. Таким образом, на основе нашего результата мы пришли к выводу, что цепная модель, добавляющая от 3 до 4 подсказок, дает наилучший компромисс между двумя показателями.

VIII. Заключение

Нашей целью в этом проекте было автоматическое раскрашивание изображений в оттенках серого с помощью машинного обучения. Объединив две модели вместе, мы решили нашу первоначальную проблему окраски любых изображений в оттенках серого, которые не были окрашены ранее. Сначала мы использовали модель cDCGANs для создания цветного вывода, который может частично заполнить цветными черно-белые изображения. Хотя модели иногда не удавалось раскрасить всю картинку, она давала изображение с глубокими цветами. Раскрашивание в реальном времени с использованием изученной глубокой априорной модели заполняло все части изображения, но иногда не удавалось раскрасить фотографии яркими цветами, что приводило к мягким фотографиям. Покрывая каждую из слабых сторон модели силой каждой модели, мы придумали метод «цепной» раскраски, который получает входные данные от модели cDCGAN и использует значимые пиксели в этом выходе, чтобы направлять раскрашивание раскраски в реальном времени с помощью изученных глубокая априорная модель. Этот метод раскрашивания привел к полной раскраске с яркими цветами.

Мы хотим поблагодарить доктора Бовика, доктора Гоша и доктора Димакиса из Техасского университета в Остине за руководство этим проектом. Они дали нам очень полезные советы о том, как успешно решить задачу раскрашивания черно-белых изображений.

Дальнейшие исследования для этого проекта будут включать:

  • Включение метода «цепной» раскраски в видео
  • Тестирование с большим разнообразием изображений для раскрашивания широкого спектра фотографий
  • Улучшение модели подсказки путем обводки / определения краев изображения

Большое спасибо за чтение, и мы надеемся, что вы узнали что-то из этого проекта!

Ссылки на проект Github и папки находятся ниже. :)

Https://github.com/kaabashqeen/chain_colorization

Https://github.com/kaabashqeen/chain_colorization_images

Https://drive.google.com/drive/folders/1cg-BXqhd1gp2bDQO7zPvLfG1Vv4yOdtv?usp=sharing

Https://drive.google.com/drive/folders/1oT_5hesvZTZ8l0Rpm9uzDTku8hOqG767?usp=sharing

Https://drive.google.com/drive/folders/1WoaqLF5syb2WiHqrhUj_noAMK4P8Qm_N?usp=sharing