如何制作将照片变成漫画的机器人。 第二部分 模型训练

⇨第一部分
⇨第三部分

你好!

如您所见,假期在一定程度上削弱了文章的时间表。
我认为,在这段时间里,许多人设法,即使没有完全训练他们的模型,也至少尝试了不同的数据集。
1.放分配
2.下载图片
3。???
4.利润!
如果您不熟悉我们的神经网络,或者您开始​​阅读本文,那么正如他们所说,没有时间进行解释,我们将提供分发工具包,下载必要的图片,然后开始吧!

详细说明在该系列的上一篇文章中

第一块煎饼块状


当我第一次为@ photo2comicsbot训练模型时, 事不宜迟 ,我只是将约1000页的漫画填充到数据集中。
是的,还有封面,公告和其他填充物。

在入口处看起来像这样:



结果是对应的:







更多图片

















该模型完美传达了漫画和照片之间的一般差异:

  • 典型的颜色分级
  • 轮廓选择
  • 封锁
  • 文字云

原则上,此选项可能足以满足生产需求。

但是我想知道在更“干净”的数据集上可以获得什么结果。

拿两个


在下一个实验中,我在页面上留了一个区块,然后从其余的页面中切出了最大的片段(包括一个区块),以消除最终模型中的垂直和水平分隔线。
如果您对数据集进行更改(例如,删除或添加照片),请不要忘记保存以前的版本。 如果出现问题,您将有一个归还的地方。
第二个数据集如下所示:



正如他们所说,结果是显而易见的:







更多图片












分隔线消失了,但随着它们的出现,文本的表达力消失了:它们在数据集中的相遇次数开始减少,不再是主要特征。

以前充满文本的空白区域现在充满了迷幻的噪音。

第三次是魅力


我决定完全摆脱文本,只保留漫画中那些没有的部分。 没有人幸存:没有乌云,没有标题或系列名称。

“语言种族灭绝”之后的数据集:



最终结果:







更多图片










一方面,文物较少,另一方面,表现力消失了。 由于在GAN训练中,结果的质量在很大程度上取决于您和我,因此,没有一个好的模型可供选择。

美丽是旁观者的眼睛,因此不要害怕尝试并选择自己最喜欢的东西。

给武器!


好了,我们已经讨论了主要的陷阱以及处理这些陷阱的方法,现在该开始做生意了。

转到我们下载发行版的文件夹。 让我提醒您,它被称为pytorch-CycleGAN-and-pix2pix

由于我们提供了有关虚拟变量的说明,因此我们不会涉及分发代码,因为所有必需的参数都可以在命令行中进行设置。

在这种分布中,默认训练发生了200多个时代,在第100个纪元后,学习速率呈线性衰减。
我的8 GB卡能够控制的最大分辨率为400x400。 经过全面的培训,我花了大约33个小时,因此我们将使用一些小技巧。 首先,我们将以128x128的图片训练模型,然后以256x256的图片训练模型,只有在最后阶段,我们才能向她展示我们华丽的400x400。
第一阶段将持续100个时代,第二和第三阶段分别为50个时代,这将使我们将培训时间减少近一半。

如实践所示,与立即以最大分辨率进行训练相比,这种方法的结果并不差,有时甚至更好。
也许有足够的理论,是时候继续实践了。

在命令提示符下,输入。

第一阶段


python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 128 --load_size 180 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 4 

不要忘了用您自己的值替换花括号。

我们将更详细地分析一些参数:

 --batch_size {number} 

此参数负责每个周期处理的图像数量,对速度有积极影响,对模型的贪食性有不利影响。

在每个阶段,选择最大可能的--batch_size,它不会由于缺少GPU内存而导致错误。

 -- dataroot {dataset root folder} 

-包含我们数据集的文件夹。 如上一篇文章中所述,其中应该是文件夹trainA,trainB,testA,testB。

 --name {model name} 

-您的项目名称。 它可以是任意的,但我建议在名称中包括模型架构,最大分辨率和数据集的名称。
例如:“ resnet9_128to400_comics8”
因此,您可以区分具有各种参数和数据的实验。

训练的第一阶段可以在第100个时代停止。

您可以从浏览器中观察进度: localhost :8097 /
(或另一个在控制台中可见的链接)

第二阶段


 python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 256 --load_size 290 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 2 --epoch 100 --epoch_count 0 --continue_train 

重要的是要指出我们在第一阶段完成研究的时代。
“ --Epoch 100”表示我们将从第100个时代的检查点加载模型
“ --Epoch_count 0”表示我们将以最大的学习速度从头开始训练。

训练的第二阶段可以在50年代停止。

第三阶段


 python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 400 --load_size 430 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 1 --epoch 50 --epoch_count 0 --continue_train 


训练的第三阶段可以在50年代停止,但这只是一个问题。 您可以完成最后的操作,然后选择所需的中间结果。 重要的是要记住,第200个时代的结果可能要比第150个时代差。

现在出去看看你做了什么


在训练期间,模型和中间结果将保存在一个文件夹中
/ pytorch-CycleGAN-and-pix2pix /检查点/ {型号名称}

要测试模型,只需输入命令行:

 python test.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --netG resnet_9blocks --crop_size 512 --load_size 580 --epoch {epoch name} 

您可以在任何检查点的测试数据集上看到结果,只需将其指定为{epoch name}。 如果未指定{epoch name},将采用最后一个检查点。

结果将保存在文件夹中:
/pytorch-CycleGAN-and-pix2pix/results/{model name}/test_{epoch name}
为了不混淆哪个数据集上的哪个模型给出了什么结果,
开始写一本小日记。 记录基线数据和学习成果。

例如,命令行和您到达的时代。 此数据足以保存训练参数和我们训练所依据的数据集。

毕竟,科学实验和鬼混之间有什么区别? 事实已记录在案!
今天就这些! 在下一篇文章中,我们将学习如何导出完成的模型并将其托管在云中。

不要害怕尝试。 请务必尝试几个不同的数据集,比较结果并在评论中分享!

待会见!

⇨下一部分

Source: https://habr.com/ru/post/zh-CN483168/


All Articles