任意图像风格快速迁移系统
-
软件设计概述
-
背景和项目介绍
-
现代人对互联网社交的依赖越来越强,人们随之对互联网社交的具体应用提出了更高的要求。从电脑上的各种作图软件到手机上的各种美图软件,人们能够轻而易举的美化或修改自己的图片,并分享到各类社交平台。随着人们对美的要求越来越高,艺术性的美化也渐渐被提了出来。人们在欣赏自己所拍的图片之余,也希望能够把自己喜欢的图片制作成各式各样的风格,如冷色调风格,怀旧风格,冲印照片风格,素描风格,油画风格等。
而通过手工制图方式进行修改,除了费时费力之外,还需要有⼀定的制图技能和美学背景。希望在不掌握专业制图技能的前提下,能够轻易的实现将人们随手拍的图片变成希望呈现的风格,这样自己喜欢的图片或者照片就能够以一种别样的风格呈现出来,并分享给好友。
随着而数字图像技术领域的快速发展,图像风格迁移技术成为了解决这一需求的重要方式。它不仅在许多专业领域有很广阔的应用空间,并且在日常生活中也发挥着它的作用,例如在人们拍照之后,都会对照片做一定的处理以达到自己想要的效果,而图像风格迁移技术几乎完美地简化了这一繁琐的过程。用户只要将心仪的特定风格图片以及自己照片上传,就可以得到一张风格迁移后的照片,这张照片会保留用户照片中的主要内容,但是照片的美术风格会变为希望得到的种类。
在艺术发展的过程中,一大部分艺术作品是模仿其他艺术家的风格创作的,这类作品被归类为模仿艺术。而在计算机图像领域,一直有令计算机进行模仿艺术创作的尝试。而传统的方法得到的效果和泛化性都不强。而基于近几年快速发展的神经网络技术而产生的新的图像风格迁移方法则是一种很好地解决方案。神经网络中不同层次代表不同的含义。底层(靠近输入)可以获取诸如局部模式、边缘、描边等低层次信息。高层(接近输出)可以获得高层次的信息,比如物体部件和特征。风格迁移涉及到调整图像,使它的底层表征与指定“风格”的图片相同,同时保持原图片的高层次表征。可以将风格看作图像的低层次的信息。其目标则是令输出的图片与原图类似,但是拥有不同的艺术风格。
1.2 参考文献
a. 神经风格迁移研究概述:从当前研究到未来方向
https://www.jiqizhixin.com/articles/2017-05-15-3
b. 图像风格迁移(Neural Style)简史
https://zhuanlan.zhihu.com/p/26746283
c. GAN网络生成:感知损失(Perceptual Losses)
https://blog.****.net/u011534057/article/details/55052304
d. A Neural Algorithm of Artistic Style
https://arxiv.org/abs/1508.06576
e. Perceptual Losses for Real-Time Style Transfer
and Super-Resolution
https://arxiv.org/abs/1603.08155
f. Fast Patch-based Style Transfer of Arbitrary Style
https://arxiv.org/abs/1612.04337
g. Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
https://arxiv.org/abs/1703.06868
二、可行性研究
2.1 经济可行性研究
伴随移动互联网技术的发展,各种智能产品层出不穷。作为移动智能终端的应用程序,APP已经渗透到人们工作生活的方方面面。然而在目前的移动应用市场中,APP种类繁多且同类产品更是数不胜数,这使得用户在使用APP时的转移成本非常低,从而产生用户粘性不高、持续使用意愿不强的现象。因此,探寻APP用户对APP的真实需求,研究APP营销对消费者持续使用意愿的影响,就显得十分重要。读图时代的到来,使得色彩丰富、种类繁多的图片内容备受用户的热捧,用户迫切地渴望将即时拍下的图片美化编辑、分享交流、标签指示、贴图渲染。现在,美化照片正逐渐成为人们的一种爱好。
调查显示,百分之六十五的中国手机摄影用户每周都会分享照片,最多的是直接发送给微信好友,其次是微信朋友圈和QQ空间,而国外的用户分享到Facebook的照片数量达到了Twitter的12倍。超过八成时尚女性有用手机自拍的习惯,其中超过三成会于社交网站公开分享自拍照片,目的只是为了得到朋友的点赞。所以从功能机时代,手机厂商们就针对用户的自拍需求在功能性上进行不断改善,譬如自拍镜的加入和前置摄像头的引入就由此而来。进入到智能手机时代,美颜软件更使得女性的自拍需求迅速膨胀。这也体现了在分享照片前人们要做的而且非常重要的事就是修图,自2014年起,拍照美化类应用在ios和安卓平台的安装和活跃指数均呈现上涨态势。
在“是否使用第三方照片处理软件”的调查中,2016年的照片美化软件的使用率达到81.6%,比2015年的77.7%高出了3.9个百分点。可见,目前人们对美化图片软件的认知度和使用度有了很大的提高。
结合市场分析可知,本项目开发,迎合了市场热点。由以上分析,效益大于成本,因此经济可行。
2.2 技术可行性研究
本项目中的核心模块,即图像风格迁移模块使用了深度学习技术进行构建。
在理论基础方面,目前,深度学习技术迅速更新,能够运用于本项目的模型与方法十分多样。除了本项目使用的转换网络和损失网络结合的模型之外,还有运用生成对抗网络进行对抗学习,从而实现图像风格迁移,以及利用自适应归一化(Adaptive Instance Normalization )技巧减少风格损失,利用插值法上采样减少生成图像棋盘波动等技巧来进一步优化生成结果。
在实际代码构建方面,本项目使用的pytorch是兼具全面和易用的深度学习代码框架,其基于python语言的api极大地方便了项目的开发与测试。而其他更侧重性能的框架,如tensorflow、tensorflow lite(针对于移动端)、caffe2等框架的迅速发展,也给了本项目更多的选择空间。
在服务器端技术方面,python领域下的django+mysql+nginx的体系非常成熟且易用,非常契合本项目的设计目标,也易于与图像风格迁移模块进行数据交换。
在前端设计方面,html+css+JavaScript的体系能够快速构建前端页面和与后端进行交互的脚本代码。前端与后端基于restful api进行通信,保证了服务开发的规范性和可行性。
以上各个模块的工具、技术与体系的成熟和多样,保证了项目开发的技术可行性。
三、需求分析
3.1 用户需求分析
1) 选取或者拍摄照片后,进行目标风格迁移后输出。
2) 支持主流分辨率。
3) 能够拍照后进行实时风格转换。
4) 风格类型可选,可以搜索特定风格。
5) 能够为不同风格进行打分。
6) 可以分享自己的艺术风格照。
7) 使用过程流畅。
3.2 系统需求分析
功能性需求:
1)图像风格迁移功能,能够提取特定图像的风格,能够将特定风格迁移到目标图像上。
2)数据持久化功能,能够保存提取的图像风格,保存用户的个性化数据,以及系统其他应当进行持久化的各类数据。
3) 服务器端通信功能,提供api供前端系统进行调用,进行前端系统与数据持久化和图像风格迁移的数据交换,提供包括用户注册、管理、验证,风格模型文件传递,风格模型搜索,目标图像和生成图像的传输等业务逻辑。
4) 前端服务功能,包括用户注册与登录功能,各类风格模型展示、图像上传与接收、图像分享、风格搜索、风格评分等功能。
5) 风格模型管理功能,包括图像风格的上传、图像风格的展示、图像风格的管理(更改信息、删除信息)等功能。
非功能性需求:
1) 性能需求:图像风格迁移生成图像的延迟不应超过100ms,图像风格搜索生成结果延迟不应超过200ms。
2) 运行环境需求:图像风格迁移功能需要一台拥有至少一块1808Ti或同等性能GPU的服务器,并运行在Linux操作系统上。服务器端功能需要能够进行网络连接的服务器,其内存大小不应小于2GB。数据持久化需要服务器硬盘大小不应小于128GB。前端页面应能够正常运行于主流浏览器(例如:chrome,firefox)上。
3) 未来的可能扩充方案:可以为图像风格添加用户评论功能;可以添加图像分割模块,实现图像特定区域或特定物体的风格迁移;可以添加数据统计与推荐模块,统计用户的图像风格选择习惯并自动推荐用户可能需要的风格模型。
四、软件设计的基本原理和采用的主要方法与技术
使用快速转换方法的风格转换过程如图所示:
图像风格迁移功能包含图像前馈迁移功能与风格模型训练功能。
图像风格迁移功能中的前馈迁移部分的具体做法是利用pytorch搭建深度学习框架,搭建图像风格迁移的前馈神经网络,其网络参数通过加载保存在服务器端的不同模型参数文件来获得,从而实现不同风格特征迁移。
图像风格迁移中的另一部分,风格模型训练则需要在服务器端实现。利用pytorch在GPU服务器中搭建深度学习框架来实现风格模型训练功能。在GPU计算服务器上得到的风格模型通过数据库系统保存其必要信息,并将模型参数文件保存于服务器端。
分享社交功能以及个性化推荐功能涉及到数据库服务器与分布式计算服务器开发。个性化推荐中,向用户推荐的新风格通过在分布式计算服务器上处理数据得到。而GPU服务器与数据库服务器上实现的业务逻辑通过通信服务器与前端相联系。
服务器端开发由通信服务器开发、GPU服务器开发与数据库服务器开发组成。服务器端开发与前端开发共同组成了本图像风格转换应用开发。
五、软件架构设计和模型设计(数据流程图、模型设计、算法设计)
5.1 软件架构
5.2 数据流图
顶层数据流图
细分数据流图
5.3 流程图
七、软件实现
7.1 前端模块实现
7.1.1页面uploadimg.html
(1) 页面结构分析:
-
Head:相关文件参数引用
-
body:页面主体:
-
bar:登录注册链接,离开页面链接
1)h:图片标题显示
2)main:主要功能区 1)表单
2) 跳转链接
(2)页面相关功能介绍:
1)登录注册页面跳转:点击“login or register”按钮跳转到“register.html”页面。
2)离开主页跳转:点击“exit”按钮离开页面。
3)上传本地图片,并等比放缩到合适比例并显示图片:点击“上传本地图片”。
4)展示图片风格:鼠标移动至图片上可见风格说明
5)选择图片风格:点击下拉框选择风格
6)确定风格变量:在“priority”框中输入风格参数
7)提交图片以及参数:点击“点击提交”按钮
8)页面切换:点击右侧箭头按钮切换页面至“upload2img.html”
7.1.2 页面upload2img.html
(1)页面结构分析:
1)head:相关文件参数的引用
2)body:页面主体:
1)h:展示标题图片
2)div:主体:
1)a链接:返回index.html:
2)img:展示向左图片
3)表单:
1)wrap:表单主体:
2)manage:管理窗口
3)show:展示窗口
4)priority:输入参数
5)sumbit:提交
6) end:页面尾部
(2)页面相关功能介绍:
1)点击“左箭头”:返回uploadimg.html
2)点击“上传本地图片”:上传本地图片
3)点击“priority”:输入参数
4)点击“submit”:提交
7.1.3 register.html