昇腾AI应用,探索人工智能的无限可能,使能千行百业
卡通图像生成
概述
卡通图象生成网络结构如下,以Generative Adversarial Networks(GAN)为基础,其架构包括一个生成器(Generator)和一个判别器(Discriminator),通过迭代训练两个网络(即生成器和判别器),由判别器提供的对抗性损失可以生成卡通化的结果。同时将生成器替换为自编码结构,使得生成器具有更强的生成能力。对于生成器,它希望生成样本尽可能符合真实样本的分布,而判别器则希望尽可能的区分真实样本与生成样本。具体来说,判别器将真实样本判断为正确,记为1;而将生成结果判断为错误,记为0。
编码器输入为真实图片 ,其架构由7 × 7的卷积核,步长为1的卷积层开始,随后紧跟两个降采样块(步长为2),对特征进行提取,对风格图片生成有用的信息将在这个过程中被提取。然后紧接4个残差块(Residual Block),用来重建内容特征。而解码器架构由5个残差块开始,通过两个上采样块(步长为2)来实现对不同风格特征的重建,最后在添加一层使用7 × 7卷积核、步长为1的卷积层,得到最终输出生成的卡通图片结果。
为了辅助生成器生成更好的结果,判别器需要判断输出图像是否是真实的卡通图片。因为判断是否真实依赖于图片本身特征,不需要抽取最高层的图片特征信息,所以可以设计成较为浅层的框架。首先对输入进行卷积核为3 x 3的卷积,然后紧接两个步长为2的卷积块来降低分辨率,并且提取重要的特征信息。最后使用一个3 × 3的卷积层得到最终提取的特征,再与真实标签进行损失计算。如果输入为256 × 256,则输出为64 × 64的PatchGAN形式。这里将Leaky ReLU的参数设置为0.2。
如下图所示,昇腾软件栈中存在一个ATC模型转换工具,针对本应用,我们需要使用该工具将原始模型转换成系统支持的om模型。
本应用采用了下图所示的模块化设计,通过各模块之间的协调配合完成一张图片的推理输出。
其中各个模块的主要功能点如下所示:
- 1.运行管理资源申请:用于初始化系统内部资源,固定的调用流程。
- 2.加载模型文件并构建输出内存:从文件加载离线模型cartoonization.om数据,需要由用户自行管理模型运行的内存,根据内存中加载的模型获取模型的基本信息包含模型输入、输出数据的数据buffer大小;由模型的基本信息构建模型输出内存,为接下来的模型推理做好准备。
- 3.数据预处理:对读入的图像数据进行预处理,然后构建模型的输入数据。
- 4.模型推理:根据构建好的模型输入数据进行模型推理。
- 5.解析推理结果:根据模型输出,解析模型的推理结果。使用OpenCV将转换后的卡通画数据转化为JPEG。
模型原始链接: https://github.com/taki0112/CartoonGAN-Tensorflow
图像预处理
使用DVPP对读入图片进行解码,并缩放至256 × 256分辨率,以符合网络输入大小;在模型转换时,使用AIPP功能,将unit8的数据转换为fp16格式,将0~255的数值归一化到-1~1,将BGR的图片格式转换为RGB格式。
模型推理结果后处理
后处理模块主要是对模型的推理结果进行格式变换,然后将变换结果反馈给用户。主要过程是先将RGB格式的输出转换为BGR格式,在将-1~1的值映射回0~255,最后将256 × 256的转换结果缩放回原始图像的尺寸大小。
效果展示