Раскрасьте старые черно-белые фотографии и научитесь играть с Python!

Python
Раскрасьте старые черно-белые фотографии и научитесь играть с Python!

Раскрашивание черно-белых фотографий на основе глубокого обучения, сегодня я научу вас играть

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

image-20210424192054643

Представляем DeOldify

Прежде чем мы начнем, давайте кратко представим этот проект. DeOldify — это проект по раскрашиванию черно-белых фотографий. Он разработан на основе технологии глубокого обучения. Исходный код находится в открытом доступе на Github, и на данный момент он набрал 13,4 тыс. Звезды; в прошлом году мастер станции B Up снял видео о восстановлении старого Пекина 100 лет назад.

image-20210424195915091

Окрашивание, используемое в нем, использует фреймворк DeOldify.Цель DeOldify — раскрашивать черно-белые фотографии, но удивительно, что он может обрабатывать видео в дополнение к изображениям;

image-20210424200405209

Базовой сетевой структурой DeOldify является GAN, которая имеет следующие характеристики по сравнению с предыдущей технологией окраски:

  • 1. Артефакты на старых фотографиях будут устранены в процессе раскрашивания;
  • 2. Для лица со старой фотографии кожа после обработки станет более гладкой;
  • 3. Представьте более подробный и реалистичный эффект рендеринга;

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

  • OS: Windows 10;
  • Python : Python 3.7.6;
  • IDE: Пичарм;
  • питорч: 1.7.0;

2. Конфигурация среды

2.1, проект клонирован локально

Есть два метода на выбор

1. Git-команда

git@github.com:jantic/DeOldify.git

2. Нажмите на страницу проекта Github.Download ZIPвариант, вручную загрузить проект на локальный, адрес Github вставлен ниже

GitHub.com/просто нажмите поднять/d количество OL…

2.2, скачать файл веса

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

В этом проекте используется много весовых файлов, всего их три:

  • 1. Художественный вес сделает эффект окраски изображения более ярким.大胆Некоторые, адрес загрузки:
https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth
  • 2, стабильный вес, больший эффект окраски, чем художественный保守Некоторые, адрес загрузки:
https://www.dropbox.com/s/usf7uifrctqw9rl/ColorizeStable_gen.pth
  • 3 , Вес видео, этот файл веса используется для окрашивания видео, адрес загрузки
https://data.deepai.org/deoldify/ColorizeVideo_gen.pth

После загрузки файлов веса создайте папку моделей в корневом каталоге проекта и поместите загруженные три файла веса вmodelsВ папке корневая директория проекта устроена следующим образом

image-20210424214700383

2.3, установить зависимости

Введите следующую команду в терминал, чтобы установить стороннюю библиотеку расширений, необходимую для проекта;

pip install -r requirements.txt

После установки сторонней библиотеки расширений нужно напомнить, что данный проект разработан на основе Pytorch, автор не добавлял эту библиотеку зависимостей torch в requirements.txt, поэтому убедитесь, что torch, torchvision и другие библиотеки были устанавливается перед запуском проекта в вашей операционной среде;

Tip: если вы хотите использовать ускорение графического процессора позже, пакеты ускорения графического процессора, такие как CUDA и Cudnn, также необходимо настроить заранее.

3 Запустите проект

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

3.1, раскрашивание фото

Чтобы раскрасить фотографию, заполните следующий блок кода в основном скрипте

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)
from deoldify.visualize import *

plt.style.use('dark_background')
torch.backends.cudnn.benchmark=True

import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")

colorizer = get_image_colorizer(artistic=True)

render_factor=35

source_path = 'test_images/image.png'

result_path = None

colorizer.plot_transformed_image(path=source_path, render_factor=render_factor, compare=True)

В коде есть несколько параметров, которые нужно кратко представить:

  • устройство указывает модель графического процессора, используемую для логического вывода, и вы можете выбрать один из следующих вариантов в соответствии со своей ситуацией.
from enum import IntEnum

class DeviceId(IntEnum):
    GPU0 = 0,
    GPU1 = 1,
    GPU2 = 2,
    GPU3 = 3,
    GPU4 = 4,
    GPU5 = 5,
    GPU6 = 6,
    GPU7 = 7,
    CPU = 99
device.set(device=DeviceId.GPU0)
  • Artistic — логическое значение, True для включения художественного режима (False для включения стабильного режима);
colorizer = get_image_colorizer(artistic=True)

Как упоминалось ранее, между Художественным и Стабильным есть разница (поскольку используются разные весовые файлы), цветовой эффект Художественного будет более агрессивным, например, окрашивание следующей фотографии листа лотоса, изображение, полученное в разных режимах, отличается

image-20210430221407338

Художественный режим

image-20210430221435152

Стабильный режим

image-20210430221423325

  • render_factor представляет коэффициент рендеринга, чем выше значение, тем лучше эффект, но в то же время требует большей видеопамяти;
  • source_path представляет собой путь к входному изображению;

Цветное изображение будет храниться в корневом каталогеresult_imagesВ папке я скачал несколько черно-белых картинок из интернета, сам протестировал с этим фреймворком.Вроде эффект неплохой~

Рисунок II

v2-fd6e94e46306307c30c4c4dca6813b9e_720w.jpg

Рисунок 3

image-20210430221618418

3.2, раскраска видео

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

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)

from deoldify.visualize import *
plt.style.use('dark_background')
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")

colorizer = get_video_colorizer()

#NOTE:  Max is 44 with 11GB video cards.  21 is a good default
render_factor=21


file_name_ext = file_name + '.mp4'
result_path = None

colorizer.colorize_from_file_name(file_name_ext, render_factor=render_factor)

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

Здесь я использую команду You-get для загрузки небольшой части "Крестного отца" 1972 года со станции B (Так как заливать видео на платформу хлопотно, тут перехватывается только один кадр картинки, простите мою лень,)

image-20210529002743136

После окрашивания эффект следующий:

image-20210529002913852

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

4. Получение исходного кода проекта

Для удобства я запаковал сконфигурированный файл проекта в распакованный пакет, после распаковки нужно только установить нужные зависимости в проекте, а весовой файл настраивать не нужно;

pip install -r requirements.txt

Как получить исходники проекта, обратите внимание на паблик аккаунта WeChat:Сяо Чжан Питон, отвечайте на ключевые слова в фоновом режиме официального аккаунта210501Просто

5. Резюме

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

Если этот контент полезен для вас, лайк — моя самая большая поддержка~

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