昇腾AI应用,探索人工智能的无限可能,使能千行百业
AI 风景画
概述
AI风景画属于基于CGAN(Conditional GAN)的交互式图像生成方法应用案例,旨在将前端页面获得的用户交互信息做输入,通过部署在华为Atlas 200DK上的模型,实时生成相应的真实图片。模型采用CGAN作为核心构建方式,将图像的生成应用到用户交互的场景。用户只需要在画布上选择多个类别的物体,并做相应的大小和位置拖动,就能生成相应的自然风景图。由于本案例是一种生成模型,输入的信息是高层的语义信息,因此并不需要额外的复杂数据预处理。
基于条件控制的图像的生成方式有很多种,有基于图像类别的,有基于其他图像的,还有基于文本描述的。在具有复杂条件的图像生成方法中,使用中间结果图像图层Layout作为条件描述的转换,可以降低模型设计的难度,同时也能提高稳定性。本方法是一种基于Bounding-Box free方式生成图层Layout,然后使用图层Layout作为图像生成模型的条件生成最终图像。图层Layout包含每个物体目标详细信息:空间位置、大小和形状。一般地,将条件信息转换为图层Layout的过程中,是基于Bounding-Box的方式,先预测位置,然后将形状填进去。这种过程必然会出现缝隙,会导致生成的图像也会相应的出现缝隙,影响生成效果。那么,考虑通过一种直接生成图层Layout的方法,就可以避免缝隙的出现。因此,我们提出Bounding-Box free方式直接生成图层Layout,可以避免缝隙出现。
整个模型可分为如下两个阶段。
1. 图层Layout的生成:首先通过将用户的输入转换成初始的Coarse Layout,然后将其输入给模型生成Layout。模型采用类语义分割的方式,将Coarse Layout映射成没有缝隙的Layout。
2. 图像生成:此部分将Layout作为条件输入到生成模型,具体是采用SPADE Norm的方式应用在SPADE ResBlock模块中。后几层采用简单的ResBlock,使得模型可以对图像边缘做自我修复,因为生成的Layout物体边缘会有误差。
如下图所示,昇腾软件栈中存在一个atc模型转换工具,针对本应用,我们需要使用该工具将原始模型转换成系统支持的om模型。
本应用采用了下图所示的模块化设计,通过各模块之间的协调配合完成一张图片的推理输出。
其中各个模块的主要功能点如下所示:
- 1.运行管理资源申请:用于初始化系统内部资源,固定的调用流程。
- 2.加载模型文件并构建输出内存:从文件加载离线模型AIPainting.om数据,需要由用户自行管理模型运行的内存,根据内存中加载的模型获取模型的基本信息包含模型输入、输出数据的数据buffer大小;由模型的基本信息构建模型输出内存,为接下来的模型推理做好准备。
- 3.数据预处理:对输入数据进行预处理,然后构建模型的输入数据。
- 4.模型推理:根据构建好的模型输入数据进行模型推理。
- 5.解析推理结果:根据模型输出,解析模型的推理结果。使用OpenCV处理推理后的图像数据。
图像预处理
前端会传回json数据,该数据记录了用户选择的类目、每个类目框所占画布面积比、类目框的中心坐标(X、Y)与画布宽高比。图像预处理阶段会解析json数据,生成一个vector向量(记录选择的类目)和一个四维的tensor:[1,256,256,17],其中256表示空间维度,17表示类目个数,目前前端开放的可选类目数为11个。
模型推理结果后处理
推理结果有两路输出,一路是生成的中间布局图像,一路是最终生成的图像。后处理模块主要是将两路图像从RGB格式转换为BGR图像,并将最终生成的图像反归一化到0~255。
效果展示