[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
NoGAN 训练对于获得在 DeOldify 的这次迭代中看到的那种稳定和彩色图像至关重要。NoGAN 训练结合了 GAN 训练的优点(美妙的着色),同时消除了令人讨厌的副作用(如视频中闪烁的物体)。信不信由你,视频是使用孤立的图像生成渲染的,没有附加任何类型的时间建模。该过程执行“NoGAN”训练的 GAN 部分的 30-60 分钟,一次使用 1% 到 3% 的 imagenet 数据。然后,与静止图像着色一样,我们在重建视频之前“去旧化”单个帧。
除了提高视频稳定性外,还有一件有趣的事情值得一提。事实证明,我运行的模型,即使是不同的模型和不同的训练结构,都会或多或少地得出相同的解决方案。对于您可能认为随意且不可知的事物的着色,情况也是如此,例如衣服、汽车甚至特效的颜色(如“大都会”中所见)。
我最好的猜测是,这些模型正在学习一些有趣的规则,这些规则是关于如何根据黑白图像中存在的微妙线索进行着色的,我当然不希望存在这些线索。这个结果会产生很好的确定性和一致的结果,这意味着您没有跟踪模型着色决策,因为它们不是任意的。此外,它们看起来非常坚固,因此即使在移动场景中,渲染也非常一致。
稳定视频的其他方法也加起来。首先,一般来说,以更高分辨率(更高的 render_factor)渲染会增加着色决策的稳定性。这是有道理的,因为该模型具有更高保真度的图像信息可供使用,并且更有可能始终如一地做出“正确”的决定。与此密切相关的是使用 resnet101 而不是 resnet34 作为生成器的主干——由此可以更加一致和正确地检测到对象。这对于获得良好、一致的皮肤渲染尤为重要。例如,如果你以“僵尸手”结束,它在视觉上可能会特别刺耳。
此外,训练期间的高斯噪声增强似乎有所帮助,但在这一点上,关于多少有点更脆弱的结论(还没有正式测量过)。这大致基于在风格转换视频中完成的工作,如下所述: https ://medium.com/element-ai-research-lab/stabilizing-neural-style-transfer-for-video-62675e203e42 。
这是为了解决之前DeOldify模型中的一些关键问题而开发的新型GAN训练。它提供了 GAN 训练的好处,同时花费最少的时间进行直接 GAN 训练。相反,大部分训练时间都花在了使用更直接、快速和可靠的传统方法分别预训练生成器和评论家上。这里的一个关键见解是,那些更“传统”的方法通常可以为您提供所需的大部分结果,并且 GAN 可用于缩小现实主义的差距。在非常短的实际 GAN 训练期间,生成器不仅获得了过去需要数天逐渐调整大小的 GAN 训练才能获得的完整逼真着色功能,而且它也不会产生几乎与 GAN 一样多的伪像和其他丑陋包袱。实际上,根据您的方法,您几乎可以完全消除故障和伪像。据我所知,这是一项新技术。而且它非常有效。
步骤如下:首先以常规方式单独训练生成器,仅损失特征。接下来,从中生成图像,并训练评论家区分这些输出和真实图像作为基本的二元分类器。最后,在 GAN 设置中一起训练生成器和评论家(在本例中从 192px 的目标大小开始)。现在奇怪的是:这里所有有用的 GAN 训练都只在非常短的时间内进行。有一个拐点,评论家似乎已经转移了对生成器有用的一切。超过这一点,图像质量会在拐点处的最佳图像质量和可预测的糟糕图像质量(橙色皮肤、过红的嘴唇等)之间摇摆不定。拐点之后似乎没有生产性培训。而这一点在于仅对 1% 到 3% 的 Imagenet 数据进行训练!这相当于在 192px 下进行大约 30-60 分钟的训练。
困难的部分是找到这个拐点。到目前为止,我已经通过制作一大堆模型保存检查点(每迭代 0.1% 的数据)然后在图像完全变成橙色皮肤之前寻找图像看起来很棒的点(总是第一件事)来实现这一点去)。此外,生成器渲染此时开始立即出现故障和不一致,这对视频来说尤其不利。我真正想弄清楚的是,拐点的标志是什么,可以很容易地自动化作为早期停止点。不幸的是,我还没有明确的消息。其一,它发生在训练损失减少的过程中——而不是在它趋于平缓的时候,这在表面上看起来更合理。
NoGAN 训练的另一个关键是,您可以在初始 GAN 训练后重复对生成图像的评论家进行预训练,然后以相同的方式重复 GAN 训练本身。这就是我如何使用“艺术”模型获得额外色彩的结果。但目前这确实是有代价的——生成器的输出变得越来越不一致,你必须尝试渲染分辨率 (render_factor) 以获得最佳结果。但是渲染仍然没有故障,并且比我使用原始 DeOldify 模型能够实现的更加一致。据我所知,在你得到递减的回报之前,你可以做大约五个这样的重复周期,给予或接受。
请记住——我并没有完全严格地弄清楚 NoGAN 中发生的一切——我会把它留到一篇论文中。这意味着我很有可能在某件事上错了。但我认为它现在绝对值得推出,因为我发现它非常有用——它基本上解决了我在 DeOldify 中剩下的大部分问题。
这建立在与 Jeremy Howard 和 Sylvain Gugger 合作为 Fast.AI 的第 7 课编码器实用深度学习第 1 部分开发的技术的基础上。可以在此处找到特定的课程笔记本: https ://github.com/fastai /course-v3/blob/master/nbs/dl1/lesson7-superres-gan.ipynb
DeOldify 中现在有三种模型可供选择。其中每一个都有关键的优点和缺点,因此有不同的用例。视频当然是为了视频。但是稳定和艺术都是图像,有时一个人做图像会比另一个更好。
更多细节:
艺术- 该模型在有趣的细节和活力方面实现了图像着色的最高质量结果。然而,最显着的缺点是摆弄以获得最佳结果有点痛苦(您必须调整渲染分辨率或 render_factor 才能实现此目的)。此外,该模型在一些关键的常见场景(自然场景和人像)中表现不佳。该模型在 UNet 上使用 resnet34 主干,强调解码器端的层深度。除了初始生成器/评论家预训练/GAN NoGAN 训练之外,该模型还通过 NoGAN 进行了 5 次评论家预训练/GAN 循环重复训练,分辨率为 192px。这加起来总共有 32% 的 Imagenet 数据训练过一次(12.5 小时的直接 GAN 训练)。
稳定- 此模型在风景和人像方面取得了最佳效果。值得注意的是,它产生的“僵尸”较少——面部或四肢保持灰色而不是正确着色。与艺术作品相比,它通常具有更少的怪异色彩错误,但总体上也没有那么丰富多彩。该模型在 UNet 上使用 resnet101 主干,强调解码器端的层宽度。除了初始生成器/评论家预训练/GAN NoGAN 训练之外,该模型还通过 NoGAN 进行了 3 次评论家预训练/GAN 循环重复训练,分辨率为 192px。这加起来总共有 7% 的 Imagenet 数据训练过一次(3 小时的直接 GAN 训练)。
视频- 此模型针对流畅、一致且无闪烁的视频进行了优化。这绝对是三个模型中最不丰富多彩的,但老实说,它离“稳定”相差不远。该模型在架构方面与“稳定”相同,但在训练方面有所不同。它仅使用初始生成器/评论家预训练/GAN NoGAN 训练(1 小时的直接 GAN 训练)以 192 像素训练了一次 Imagenet 数据的 2.2%。
因为艺术和稳定模型的训练是在“什么是NoGAN???”中描述的NoGAN训练的“拐点”之前完成的。被发现后,我相信可以大大减少对他们的训练量。据我所知,这些模型停在了远远超出进行生产性培训的“好点”。以后我会研究这个。
理想情况下,最终这三种模型将合并为一个具有所有这些理想的统一模型。我认为那里有一条路,但这需要更多的工作!所以目前,最实用的解决方案似乎是维护多个模型。
这是一个基于深度学习的模型。更具体地说,我所做的是结合以下方法:
除了生成器是预训练的 U-Net之外,我刚刚修改它以使其具有光谱归一化和自注意力。这是一个非常简单的翻译。
这也非常简单——它只是一对一的生成器/批评家迭代和更高的批评家学习率。这被修改为包含一个“阈值”critic loss,确保 critic 在继续进行生成器训练之前被“赶上”。这对于下面描述的“NoGAN”方法特别有用。
NoGAN 学习过程中的损失分为两个部分:一个是基于 VGG16 的基本感知损失(或特征损失)——这只是使生成器模型产生偏差以复制输入图像。第二个是来自评论家的损失分数。对于好奇的人——知觉损失本身并不足以产生好的结果。它往往只会鼓励一堆棕色/绿色/蓝色——你知道,在测试中作弊,基本上,哪些神经网络真的很擅长做!这里要认识到的关键是 GAN 本质上是在为你学习损失函数——这实际上是朝着我们在机器学习中追求的理想迈进了一大步。当然,当你让机器学习你以前手工编码的东西时,你通常会得到更好的结果。这当然是这里的情况。
注意: 这里不再进行任何“GAN 的渐进式增长”类型的培训。只是不需要它来代替上述“NoGAN”技术获得的卓越结果。
这个模型的美妙之处在于它应该对各种图像修改都很有用,而且应该做得很好。您在上面看到的是着色模型的结果,但这只是我使用完全相同的方法开发的管道中的一个组件。
所以这就是这个项目的要点——我希望用 GAN 使旧照片和电影看起来非常好,更重要的是,让这个项目变得有用。与此同时,尽管这将是我的宝贝,但我将在可预见的未来积极更新和改进代码。我会尽量使它对用户友好,但我确信在此过程中会出现问题。
哦,我发誓我会正确记录代码……最终。不可否认,我是 那些相信“自文档化代码”(LOL)的人之一。
最简单的入门方法是直接转到 Colab 笔记本:
您现在应该能够使用 Anaconda 进行简单的安装。以下是步骤:
打开命令行并导航到要安装的根文件夹。然后输入以下命令
git clone https://github.com/jantic/DeOldify.git DeOldify
cd DeOldify
conda env create -f environment.yml
然后开始运行这些命令:
source activate deoldify
jupyter lab
从那里您可以开始在 Jupyter Lab 中运行笔记本,通过它们在控制台中提供给您的 url。
注意:如果你有最新版本的 conda,你现在也可以执行“conda activate deoldify”,事实上现在推荐这样做。但是很多人还没有,所以我不打算把它作为这里的默认指令。
替代安装:用户 daddyparodz 为 Ubuntu 创建了一个安装程序脚本,特别是 WSL 上的 Ubuntu,这可能会使事情变得更容易: https ://github.com/daddyparodz/AutoDeOldifyLocal
文件夹中的图像test_images
已被删除,因为它们使用的是 Git LFS,而且当 GitHub 实际上对一个流行的开源项目的带宽收费时,这会花费很多钱(他们最近修复了一个计费错误)。使用它们的笔记本(图像测试笔记本)仍然指向我 (Jason) 个人拥有的那个目录中的图像,我想保持这种状态,因为毕竟我是迄今为止最主要和最活跃的开发商。但他们不会为你工作。尽管如此,如果您愿意,这些笔记本仍然是您进行自己测试的方便模板。
创建笔记本ColorizeTrainingWandb
是为了通过Weights & Biases记录和监控结果。您可以通过查阅W&B 报告找到典型培训的描述。
要立即在您自己的机器上使用您自己的图像或视频开始而不用自己训练模型,您需要下载下面列出的“已完成的生成器权重”并将它们放在 /models/ 文件夹中。
[/hidecontent]