История о вычислительном мышлении с примесью языка Wolfram Language

Один из моих самых любимых фотографов — Ансель Адамс. Может быть, это потому, что я родился ближе к концу эры черно-белой фотографии? Мои самые ранние детские фотографии были черно-белыми.

Широкие панорамы Адамса на Запад просто захватывают дух. И хотя он в основном известен своими черно-белыми фотографиями, он много работал с цветными изображениями.

В 1941 году Служба национальных парков поручила Адамсу создать фотографии для росписи здания Департамента внутренних дел в Вашингтоне, округ Колумбия. 226 фотографий, сделанных для этого проекта, до сих пор хранятся в Национальном архиве и размещены в открытом доступе.

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

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

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

На выбор три модели. Два из них основаны на нейронной сети «ColorNet Image Colorization», один обучен в основном на изображениях мест, а другой обучен на стандартном наборе данных соревнований ImageNet. Третья нейронная сеть «Цветная раскраска изображения» также обучается на стандартных данных ImageNet.

Чтобы упростить сравнение производительности трех нейронных сетей, я написал функцию, которая принимает одно изображение и одну из трех моделей нейронной сети:

ColorizeGrayscaleImage[image, model]

Три модели:

models = {
"ColorNet Image Colorization Trained on ImageNet Competition Data",
"Colorful Image Colorization Trained on ImageNet Competition Data",
"ColorNet Image Colorization Trained on Places Data"
}

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

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

Давайте посмотрим на другое изображение:

На этот раз вторая модель работает достаточно хорошо:

Здесь две разные версии показаны рядом:

Вот еще одно изображение с исходным изображением и тремя раскрашенными версиями, показанными рядом:

Есть еще много изображений для вас, чтобы играть. Вы можете сделать это с помощью этой записной книжки Wolfram Cloud или с помощью кода в конце этого поста.

Наконец, вот коллаж изображений, в котором используется весь архив. Наслаждайтесь!🌄