• Веб
  • Проекты студии
  • Создание инструмента «Колор»

    Описание• Процесс

    Рассказывает Рома Косовичев

    После прочтения поста Темы про восстановление цвета, появляется идея сделать сервис.

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

    Выходит библиотека машинного обучения от Google TensorFlow и уже работает фреймворк Caffe, который умеет классифицировать объекты изображения. В открытом доступе — множество научных статей по компьютерному зрению.

    Начинаем с изучения работы Гонконгского университета, упомянутой в Темином посте.

    Иллюстрируем то, что входит в попиксельный анализ.

    Пишем на Python упрощенную программу обхода картинок. Берем за основу сегментацию (Semantic Segmentation, Normalized Cuts and Image Segmentation ).

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

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

    Сравниваются два массива (вектора): исходный (область вокруг пикселя) и массив из базы. Значение всех элементов зависит от тона пикселей.

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

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

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

    Получилось что-то вроде выделения «волшебной палочкой» в «Фотошопе» и колоризации выделенной области. Алгоритм лабораторный — нет большой базы паттернов и вычисления функций нахождения U и V, учитывающих потери и погрешности. Но этого результата достаточно, чтобы разобраться в принципе попиксельного обхода. Продолжаем изучать системы восстановления цвета с открытым исходным кодом.

    К этому моменту машинное обучение начинает обсуждаться активнее, и число научно-популярных постов в блогах увеличивается.

    Через некоторое время находим совместную работу Чикагского университета и Технологического университета «Тойота» — Learning Representations for Automatic Colorization, с использованием Caffe. Среди прочего, она опирается и на исследования из Гонконга.

    В основе обработки также лежит сверточная нейронная сеть распознавания изображений (CNN), которую разработал Ян Лекун.

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

    CNN чередует эти передачи сигналов сверточным (наложение двух векторов, convolution layer) и обобщающим (субдискретизирующим, subsampling layer) слоями, каждый раз получая карту признаков (feature maps) и уменьшая ее размерность.

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

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

    В среднем на обработку одного изображения алгоритм тратит около тридцати секунд. Пробуем сделать прелоудер в виде глитча.

    Анимация немного раздражает, меняем эффект на пикселизацию изображения.

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