使用 Deoldify 为图像着色
Deoldify 是用于对黑白格式的旧图像进行着色和恢复的项目。它是由 Jason Antic 开发的。 Deoldify 使用 GAN 架构对图像进行着色。它包含一个生成器,为评论家(Discriminator)添加颜色,其目标是批评生成器生成的着色。它提出了一种特殊类型的 GAN 训练方法,称为 No-GAN。
建筑细节
作者在这些模型中使用了以下深度学习概念。这些概念是:
- Self-attention:作者使用 U-Net 架构作为生成器,他们还修改了架构以在模型中使用 Spectral Normalization 和 self-attention。
- Two-Time Scale Update Rule:这是一种训练 GAN 架构的方式。它只是一对一的生成器/评论家架构和更高的评论家学习率。这被修改为包含阈值评论家损失,以确保评论家在继续进行生成器训练之前被“赶上”。这对于 NoGAN 训练特别有用。
- No-GAN:这种 GAN 训练方法是由模型的作者开发的。该模型背后的主要思想是,您可以获得 GAN 训练的好处,同时花费最少的时间进行直接 GAN 训练。我们将更详细地讨论 NoGAN。
- Generator Loss:生成器中有两种NoGAN学习:
- Perpetual Loss:这个损失在生成器中被用来报告和最小化由于模型中的偏差而产生的损失。
- 评论家损失:这是在鉴别器/评论家中使用的损失。
无 GAN
这是一种由 Deoldify 的作者开发的新型 GAN 训练。它提供了 GAN 训练的好处,同时花费最少的时间进行直接 GAN 训练。相反,我们用更直接、快速和可靠的传统方法分别训练生成器和评论家。
步骤如下:
- 首先,我们以传统的方式训练生成器,仅使用特征损失。
- 接下来,我们从经过训练的生成器生成图像,并训练评论家区分这些输出和真实图像作为基本的二元分类器。
- 最后,在 GAN 设置中一起训练生成器和评论家(在这种情况下从目标大小 192 像素开始)。
所有重要的 GAN 训练只发生在很短的时间内。有一个拐点,评论家似乎已经将所有有用的知识转移到了生成器。在模型达到拐点后,似乎没有有效的训练。最难的部分似乎是找到拐点,并且模型非常不稳定,因此作者不得不创建很多检查点。 No-GAN 的另一个关键是,你可以在初始 GAN 训练后重复对生成图像的评论家进行预训练,然后以相同的方式重复 GAN 训练本身。
Deoldify 训练的模型有 3 种类型:
- 艺术性:该模型在图像着色、细节和活力方面取得了最佳效果。这些模型使用带有 U-Net 的 ResNet 34 骨干架构,重点是解码器端的层深度。该模型存在一些缺点,例如该模型不能为自然场景和人像等常见任务提供稳定性,并且需要花费大量时间和参数调整才能获得最佳结果。
- 稳定:该模型在风景和人像中取得了最佳效果。它为人脸提供更好的着色,而不是面部的灰色着色。这些模型使用带有 U-Net 的 ResNet 101 骨干架构,重点是解码器端的层深度。该模型通常比艺术模型具有更少的怪异色差,但色彩也更少。
- 视频:此模型针对流畅、一致且无闪烁的视频进行了优化。这将是所有三个模型中色彩最少的。该模型类似于“稳定”架构,但在训练方面有所不同。
执行
Python3
# Clone deoldify Repository
! git clone https://github.com/jantic/DeOldify.git DeOldify
# change directory to DeOldify Repo
cd DeOldify
# For Colab
! pip install -r colab_requirements.txt
# For Local Script
! pip install -r requirements.txt
# import pytorh library
import torch
# check for GPU
if not torch.cuda.is_available():
print('GPU not available.')
# necessary imports
import fastai
from deoldify.visualize import *
import warnings
warnings.filterwarnings("ignore",
category=UserWarning, message=".*?Your .*? set is empty.*?")
# download the artistic model
!mkdir 'models'
!wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O
./models/ColorizeArtistic_gen.pth
# use the get image colorizer function with artistic model
colorizer = get_image_colorizer(artistic=True)
# Here, we provide the parameters such as source URL, render factor etc.
source_url = 'https://preview.redd.it/a702q2585j961.jpg?width=640'+
'&crop=smart&auto=webp&s=a5f2523513bb24648737760369d2864eb1f57118' #@param {type:"string"}
render_factor = 39 #@param {type: "slider", min: 7, max: 40}
watermarked = False #@param {type:"boolean"}
if source_url is not None and source_url !='':
image_path = colorizer.plot_transformed_image_from_url(url=source_url,
render_factor=render_factor, compare=True, watermarked=watermarked)
show_image_in_notebook(image_path)
else:
print('Provide the valid image URL.')
参考:
- 去旧化 GitHub