简而言之,该项目的任务是对旧照片进行着色和还原。 我将更详细地介绍细节,但首先让我们看一下照片! 顺便说一下,大多数源图像都是从subreddit r / TheWayWeWere拍摄的,我感谢所有人提供的如此高质量的大照片。
这些只是几个例子,非常典型!玛丽亚·安德森(Maria Anderson)饰演的小仙女,她的佩里·柳博夫(Leyubov Ryabtsova)身着芭蕾舞《睡美人》,在俄罗斯圣彼得堡帝国剧院举行,1890年
一个女人在她的客厅里放松(1920,瑞典)
1890年左右,在尸体旁摆姿势的医科学生
1890年在夏威夷冲浪
旋转马,1898年
米勒和鞋匠酒吧的内部,1899年
1880年代的巴黎
1920年代爱丁堡的鸟瞰图
1938年的德克萨斯女子
滑铁卢车站的人们第一次看电视,1936年,伦敦
1850年的地理课
1880年中国的鸦片烟民
请注意,即使是真的老照片和/或质量较差的照片,仍然看起来很酷:南达科他州戴德伍德,1877年
1877年的兄弟姐妹(Deadwood)
旧金山朴次茅斯广场,1851年
武士,大约1860年代
当然,该模型并不完美。 这只红手使我发疯,但否则效果很好:
塞内卡易洛魁女孩,1908年
她还可以给黑白图纸上色:
技术细节
这是一种深度学习模型。 特别是,我结合了以下方法:
- 自我注意甘 。 唯一的是,将经过预训练的Unet用作生成器,而我只是为了频谱归一化(实际上是自我关注机制)对其进行了更改。 这是一个相当简单的修改。 我将告诉您,与我尝试制作的Wasserstein GAN以前的版本相比,差异是惊人的。 我喜欢Wasserstein GAN理论,但在实践中它不起作用。 但是我只是爱上了Self-Attention GAN网络。
- 学习结构类似于GAN的逐步增长 (但不完全相同)。 区别在于层数保持不变:我只是更改了输入数据的大小并调整了学习速度,以使大小之间的转换成功。 看来它会产生相同的最终结果,但学习速度更快,更稳定,并且泛化效果更好。
- TTUR规则 (两个时标更新规则)。 这很明显:生成器/鉴别器(批评)的一对一迭代和较高的鉴别器学习速度。
- 生成器损失函数由两部分组成:其中之一是基于VGG16的感知损失(或特征损失)的主要功能-它只是推动生成器模型来复制输入图像。 第二部分是对歧视者(批评)的损失的估计。 出于好奇:仅感知损失功能不足以取得良好的结果。 它倾向于简单地鼓励一群棕色/绿色/蓝色-通过欺骗测试,您知道神经网络真正擅长什么! 关键是GAN本身就是为您学习损失函数的,这实际上是迈向我们在机器学习中追求的理想的一大步。 当然,当机器本身学习您以前手动编码的内容时,结果将大大改善。 当然,这里就是这种情况。
该模型的优点在于,它在各种图像修改中都非常出色。 上面看到的是着色模型的结果,但这只是我要使用同一模型开发的管道中的一个组件。
接下来,我将尝试完善旧图像,并且议程上的下一个项目是用于提高饱和度和丰富度(衰减)的模型。 现在她处于培训的早期阶段。 这基本上是相同的模型,但具有一些对比度/亮度设置,可以模拟褪色的照片和用旧/劣质设备拍摄的照片。 我已经收到了一些令人鼓舞的结果:

项目详情
这个项目的实质是什么? 我只想应用GAN,以便旧照片看起来非常非常好。 更重要的是,它将使该项目
有用 。 是的,我对视频的使用绝对感兴趣,但是首先我需要弄清楚如何在内存消耗控制下采用这种模型(这真是野兽)。 如果模型不能在1080Ti上学习两到三天(不幸的是,对于GAN是典型的),那将是很好的。 尽管这是我的孩子,并且我将在可预见的将来积极更新和改进代码,但是我将尝试使该程序尽可能的易于使用,尽管可能会遇到一些困难。
我发誓我会正确地编写代码……有一天。 诚然,我是那些相信“自我记录代码”(LOL)的人之一。
自启动模型
该项目建立在精彩的Fast.AI库上。 不幸的是,这是一个旧版本,并且有待更新为新版本(这绝对在议程上)。 因此,前提条件是:
- 老图书馆Fast.AI。 将自己埋葬在该项目中两个月后,我错过了一些事情,因为现在标记为“旧”的那个看起来并不像我拥有的那个。 在过去的两个月左右,一切都发生了变化。 因此,如果其他版本都无法解决问题 ,我将在此分叉 。 再次提醒您,更新至最新版本已列入议事日程。
- 所有Fast.AI依赖项 :那里有便捷的requirements.txt和environment.yml文件。
- Pytorch 0.4.1 (需要spectral_norm,因此您需要最新的稳定版本)。
- JupyterLab 。
- Tensorboard (即安装Tensorflow)和TensorboardX 。 我认为这不是严格必要的,但是要容易得多。 为了您的方便,我已经在Tensorboard中提供了所有必要的钩子/回调! 有一些使用示例。 值得注意的是,默认情况下,处理过程中的图像每200次迭代记录在Tensorboard中,因此您将获得关于模型功能的恒定且方便的视图。
- ImageNet :一个很好的训练数据集。
- 强大的图形卡 。 我真的想在GeForce 1080Ti中拥有超过11 GB的内存。 如果您的功能较弱,将很困难。 Unet和Critic非常棒,但是它们越大,结果越好。
如果您想立即自己开始图像处理而无需训练模型,可以
在此处下载现成的砝码。 然后在JupyterLab中打开ColorizationVisualization.ipynb。 确保有一条线链接到权重:
colorizer_path = Path('/path/to/colorizer_gen_192.h5')
然后,您需要在netG初始化后加载着色器模型:
load_model(netG, colorizer_path)
然后,将任何图像放在启动程序的/ test_images /文件夹中。 您可以使用以下几行在Jupyter Notebook中可视化结果:
vis.plot_transformed_image("test_images/derp.jpg", netG, md.val_ds, tfms=x_tfms, sz=500)
如果您在具有大量内存(例如GeForce 1080Ti 11 GB)的GPU上运行程序,则可以节省大约500px的大小。 如果内存不足,则必须缩小图片大小或尝试在CPU上运行。 我实际上尝试了后者,但是由于某种原因,该模型运行得非常缓慢,非常荒谬,而且我没有时间调查这个问题。 鉴赏家建议从源头上构建Pytorch,这样可以大大提高性能。 嗯...那时还没到。
附加信息
生成的图像的可视化
也可以在Jupyter中完成:创建此可视化挂钩的实例时,只需将其设置为
true即可 :
GANVisualizationHook(TENSORBOARD_PATH, trainer, 'trainer', jupyter=True, visual_iters=100
我更喜欢
假 ,只使用Tensorboard。 相信我,您也只想这样做。 此外,如果您将其长时间工作,Jupyter会在此类图像上占用大量内存。
在GANTrainer训练运行期间,模型权重也会自动保存。 默认情况下,它们每1000次迭代保存一次(这是一项昂贵的操作)。 它们存储在您指定用于训练的根文件夹中,并且名称与训练计划中指定的save_base_name对应。 每种锻炼尺寸的权重分别存储。
我建议从Jupyter Notebook开始,从上至下浏览代码。 我将这些注释仅用作原型制作和可视化的便捷界面;一旦找到适合的其他文件,其他所有内容都会转到.py文件中。 我已经有一些可视化示例,您可以方便地打开它们并查看:只需在Notebook中打开xVisualization,项目中包含的测试图像就会在其中列出(它们在test_images中)。
如果您看到GAN Schedules,那么这是项目中最丑陋的事情,只是我的渐进式学习GAN实施版本,适用于Unet生成器。
着色器生成器的预训练权重也在
此处 。 DeFade项目仍在进行中,我将在几天内尽力而为。
通常,在培训过程中,您会在途中看到第一个良好的结果,即192px的大小(如果使用提供的培训示例)。
我敢肯定我在某个地方搞砸了,所以如果是这样的话,请告诉我。
已知问题
- 您必须稍微调整图像大小才能获得最佳效果。 生成图像时,模型显然遭受某些长宽比和长宽比的困扰。 过去情况要糟得多,但是随着光照/对比度的增加和渐进式学习的引入,情况大大改善了。 我想完全消除此问题并专注于此问题,但是到目前为止,如果图像看起来过于饱和或出现奇怪的毛刺,请不要失望。 很小的调整之后,一切都会变得正常。 通常,对于过饱和的图像,您需要增加尺寸。
- 除了上述内容之外,获得最佳图像实际上还取决于选择最佳参数的技巧 。 是的,结果是手动选择的。 我对质量感到非常满意,并且该模型运行可靠,但效果并不理想。 该项目仍在进行中! 我认为该工具可以用作“ AI艺术家”,但尚未为大众所用。 只是没有时间。
- 复杂的情况是:目前,该模型正在残酷地消耗内存 ,因此在我的1080Ti卡上,它可以处理最大500-600px的图片。 我敢打赌这里有很多优化选项,但是我还没有做到。
- 我为Unet生成器添加了零填充,以填充任何不符合预期大小的内容(这就是我可以加载任意大小的图像的方式)。 这是一个非常快的hack,它导致任意大小的测试图像输出时出现愚蠢的上下边界。 我相信有更好的方法,但是还没有找到。
- 模特喜欢蓝色的衣服。 不太清楚为什么,解决方案在搜索中!
想要更多吗?
我将
在Twitter上发布新结果。
来自翻译器的添加。从后者的Twitter:
国籍代表本人参加比赛,1880年
(
原始 )
1860年建造的伦敦地铁
(
原始 )
巴尔的摩贫民窟,1938年
泰坦尼克号体育馆,1912年
(
原始 )