全体模型是用 PyTorch 构建的,图像预处理是借助 Scikit-Image 库进行的。所有代码都可以在这里找到。
NSDT工具推举: Three.js AI纹理开拓包 - YOLO合成数据天生器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开拓包 - 3D模型在线减面 - STL模型在线切割
1、数据和预处理在进行实际履行之前,我们须要一个包含彩色图像的相称大的数据集。请记住,我们的方法不须要相应的黑白图像,由于正如我们在第一篇文章中提到的那样,我们将利用 LAB 格式,这意味着我们可以分解演习集的图像并获取每个图像的黑白版本。我选择的数据集是图像着色数据集,个中包含 5,000 张用于演习的彩色图像和 739 张用于测试的图像。每张图像的尺寸为 400x400x3。它们的内容从食品、人物、动物、车辆的图像到外部和内部场所的图像不等。
唯一进行的预处理是将 RGB 转换为 LAB 格式。为此,我利用了 Scikit-Image 库和 PyTorch 供应的“Dataset”类来创建读取和加载图像的机制。有关更多详细信息,请查看“Dataset.py”文件。
关于神经网络的架构,我们已经提到我们将考试测验实现一个自动编码器,个中编码器将由卷积层组成,解码器将包含转置卷积层。输入将是具有 1 个通道(L 值(亮度))的 400x400 图像。在输出中,我们将得到具有 2 个通道(a 和 b 值)的 400x400 图像。终极的彩色图像将通过将预测的 a 和 b 与输入 L 相结合来构建。
网络的架构是逐步构建的,从只有几层和参数的网络到具有更繁芜信息流方法的多层网络。基本上,我遵照了奥卡姆剃刀原则,即逐步构建更繁芜的办理方案,我试图将任务的实际繁芜性反响到模型的繁芜性中。
我们还没有谈论的一件事是层之间的批标准化。我担保会写一篇关于批标准化的文章,但现在你可以将批标准化视为一个奥妙的技巧,它许可我们在处理好权重值的同时加快演习过程。
批标准化远不止于此。我将不才一篇文章中阐明统统。
作为激活函数,我利用了 ReLU,由于它是最安全的选项之一。批量大小设置为 32,这意味着利用包含 32 张图像的批量来演习网络。预测丢失由均方偏差 (MSE) 打算,而在实验中,网络利用了 Adam 优化器。
总的来说,我考试测验了 6 个不同的网络。在后续部分中,我将供应所有网络的设置和结果。每个网络都在 200 张图像的开拓集上进行了大约 200 个期间的演习。开拓集用于在将全体数据集供应给模型之前测试和比较不同的架构,并且可以节省大量韶光。
2.1 第一种架构第一种也是最基本的架构如下图所示。我们用三种不同的学习率进行了 3 次独立实验,但它们的表现险些相同。此外,它们乃至无法学习演习实例,这对付学习能力来说是一个危险旗子暗记。
第一种架构
第一种架构的配置
第一种架构的丢失
第一种架构的缺点
第一种架构的结果(左:演习集,右:测试集)。图片下方的数字表示 MSE
2.2 第二种架构第二种架构实质上是对前一种架构的增强,我在编码器和解码器等分别添加了 1 个卷积层和 1 个转置卷积层。在这种情形下,与第一种情形比较,丢失有所减少,而学习率为 0.001 的实验显示出更好的结果。只管网络确实考试测验在某些地方添加一些颜色,但它仍旧无法为图像着色。
第二种架构
第二种架构的配置
第二种架构的丢失
第二种架构的缺点
第二架构的结果(左:演习集,右:测试集)
2.3 第三种架构第三种架构不仅仅是一种增强,而是一种整体修正。我已经调度了网络以实现所谓的 U-Net [1]。U-Net 布局利用先前打算的编码器输出作为解码器后续部分的输入。通过这种办法,我们确保网络不会丢失任何主要信息。U-Net 的确切构造如下所示:
U-Net 布局
通过这种方法,网络收敛速率更快,演习集和测试集上的缺点率也更低。此外,这是第一个能够同等运用特定颜色的网络。
第三种架构
第三种架构的配置
第三种架构的丢失
第三种架构的缺点
第三种架构的结果(左:演习集,右:测试集)
2.4 第四种架构此架构基于前一种架构,并在编码器和解码器上添加了一个额外层。终极结果显示演习集中的丢失进一步减少,并且输出包含更多彩色区域。请把稳,测试丢失已经增加。这意味着我们的模型在演习集上过度拟合,但这在目前不是问题,由于构建模型的第一步是确保它能够学习。这是通过让模型过度拟合到一定程度来实现的,然后通过增加演习集,过度拟合问题常日会消逝。
第四种架构
第四种架构的配置
第四种架构的丢失
第四种架构的缺点
第四种架构的结果(左:演习集,右:测试集)
2.5 第五种架构在此阶段,我选择通过引入扩展层(也称为“a trous”层)来修正网络布局。有研究表明,对付像我们这样的案例,预测效果有显著改进 [2]。同样,丢失进一步减少,模型能够更精确地为图像着色。
第五种架构
第五种架构的配置
第五种架构的丢失
第五种架构的缺点
第 5 种架构的结果(左:演习集,右:测试集)
2.6 第六种架构末了一种架构是第五种情形的增强版本,我在个中添加了 2 个额外层。结果与之前的版本没有太大差别,这使得该架构成为一个很好的停滞点。公正地说,在某些方面,架构 5 比 6 更好,但由于后者表现出较低的过度拟合,我选择它作为终极模型。
第六种架构
第六种架构的 配置
第六种架构的丢失
第六种架构的缺点
第 6 种架构的结果(左:演习集,右:测试集)
三、终极结果在 Google Colab Pro GPU 上,对第 6 架构开拓集的演习持续了大约 40 分钟,在 i5–4690K@3.9GHz CPU 上持续了大约 2.5 小时。由于韶光限定和 GPU 可用性,我只能利用 CPU 进行演习。这便是为什么终极架构是在 2,000 张图像上进行演习而不是在全体数据集上进行演习的缘故原由。因此,我以 0.001 的学习率对模型进行了 300 次演习,持续了 3 天。终极结果令人鼓舞,由于该模型不仅能够为演习期间碰着的图像着色,还能为以前从未见过的图像着色!
演习集:
演习数据 I 的终极结果
演习数据 II 的终极结果
测试集:
测试数据 I 的终极结果
测试数据 II 的终极结果
至此,关于利用神经网络办理图像着色问题的全体系列就结束了。我真的希望你在这个过程中学到了很多东西,同时也玩得很愉快。
原文链接:6种图像着色AI模型实践 - BimAnt