Раскрашивание черно-белых фотографий на основе глубокого обучения, сегодня я научу вас играть
Уважаемые читатели, всем привет, в начале прошлого месяца я написал мастер-класс по реставрации старых фотографий, некоторые читатели остались недовольны после его прочтения и выразили желание, чтобы я устроил еще один мастер-класс по раскрашиванию черно-белых фотографий, поэтому у меня есть этот статья происхождение
Представляем DeOldify
Прежде чем мы начнем, давайте кратко представим этот проект. DeOldify — это проект по раскрашиванию черно-белых фотографий. Он разработан на основе технологии глубокого обучения. Исходный код находится в открытом доступе на Github, и на данный момент он набрал 13,4 тыс. Звезды; в прошлом году мастер станции B Up снял видео о восстановлении старого Пекина 100 лет назад.
Окрашивание, используемое в нем, использует фреймворк DeOldify.Цель DeOldify — раскрашивать черно-белые фотографии, но удивительно, что он может обрабатывать видео в дополнение к изображениям;
Базовой сетевой структурой 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
В папке корневая директория проекта устроена следующим образом
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)
Как упоминалось ранее, между Художественным и Стабильным есть разница (поскольку используются разные весовые файлы), цветовой эффект Художественного будет более агрессивным, например, окрашивание следующей фотографии листа лотоса, изображение, полученное в разных режимах, отличается
Художественный режим
Стабильный режим
- render_factor представляет коэффициент рендеринга, чем выше значение, тем лучше эффект, но в то же время требует большей видеопамяти;
- source_path представляет собой путь к входному изображению;
Цветное изображение будет храниться в корневом каталогеresult_images
В папке я скачал несколько черно-белых картинок из интернета, сам протестировал с этим фреймворком.Вроде эффект неплохой~
Рисунок II
Рисунок 3
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 (Так как заливать видео на платформу хлопотно, тут перехватывается только один кадр картинки, простите мою лень,)
После окрашивания эффект следующий:
Если внимательно посмотреть на видео после окрашивания, то там действительно есть некоторые огрехи, но в целом эффект неплохой.
4. Получение исходного кода проекта
Для удобства я запаковал сконфигурированный файл проекта в распакованный пакет, после распаковки нужно только установить нужные зависимости в проекте, а весовой файл настраивать не нужно;
pip install -r requirements.txt
Как получить исходники проекта, обратите внимание на паблик аккаунта WeChat:Сяо Чжан Питон, отвечайте на ключевые слова в фоновом режиме официального аккаунта210501Просто
5. Резюме
Здесь не так много введения в принцип раскраски проекта, заинтересованные читатели могут узнать о нем больше, прочитав исходный код, если вы просто хотите применить этот проект к своим собственным данным, я думаю, что эта статья уже очень ясно объяснила это. Я написал это раньше Старая статья о ремонте фотографий, на самом деле их можно объединить, и будут отличные результаты~
Если этот контент полезен для вас, лайк — моя самая большая поддержка~
Ну вот и все содержание этой статьи. Наконец, спасибо за прочтение. Увидимся в следующем выпуске~