图像风格转换(Style Transfer | 风格迁移综述)
所谓风格迁移,其实就是提供一幅画(Reference style image),将任意一张照片转化成这个风格,并尽量保留原照的内容(Content)。之前比较火的修图软件Prisma就提供了这个功能。我觉得这一说法可以改成风格迁移,将一张图的风格迁移到另一张图片上,也可以理解为生成问题,根据两种图片,生成第三种(风格)图片,具体看怎么理解怎么做吧(不喜勿喷,纯个人观点)。比如下图,把一张图片的风格“迁移”到另一张图片上:
论文地址:https://arxiv.org/pdf/1508.06576v2.pdf 然而,原始的风格迁移的速度是非常慢的。在GPU上,生成一张图片都需要10分钟左右,而如果只使用CPU而不使用GPU运行程序,甚至需要几个小时。这个时间还会随着图片尺寸的增大而迅速增大。这其中的原因在于,在原始的风格迁移过程中,把生成图片的过程当做一个“训练”的过程。每生成一张图片,都相当于要训练一次模型,这中间可能会迭代几百几千次。如果你了解过一点机器学习的知识,就会知道,从头训练一个模型要比执行一个已经训练好的模型要费时太多。而这也正是原始的风格迁移速度缓慢的原因。(出处:https://zhuanlan.zhihu.com/p/24383274)
几种模型汇总一下:
1、可以理解为生成模型:
简单来说便是输入一张随机噪音构成的底图,通过计算Style Loss和Content Loss,迭代update底图,使其风格纹理上与Style Image相似,内容上与原照片相似。正常的训练过程是通过loss反向传播更新网络参数,这里则是用一个已经训练好的VGG16作为backbone,锁住参数,更新输入的底图。具体的Style Loss和Content Loss计算过程可以参考:https://zhuanlan.zhihu.com/p/57564626,这种模型的缺点就是慢。
2、一次成型的Feedforward-based method
论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1603.08155.pdf
也是比较直接的一个想法,增加了一个Autoencoder形状的Feedforward Net 来拟合风格迁移的过程。仍然是之前的Content Loss+Style loss,用另一个网络来计算并统一在一起称之为 Perceptual Loss。
3、One network, multiple styles
论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1703.09210.pdf
微软亚研这篇的模型由三部分组成,Encoder E, StyleBank Layer K, Decoder D. 作者希望将content和style的生成分离,即 E+D负责重建Content,不同的K则控制不同style的风格,每个模型可以有多达50个不同的K。
(个人觉得这种方法可能需要很大的网络结构才能实现,并且如果同时存储所有风格,模型切换实现起来可能有问题),这种方法已经做到了做到Multi-style single model。
4、接着,设计一种丢进去什么新的style都可以实时进行transfer,而无需重新训练
论文:Exploring the Structure of a Real-time, Arbitrary Neural Artistic Stylization Network
Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
一文中利用Normalization component来实现不同的style transfer,这篇文章提出了Adaptive Instance Normalization,也就是适应性的IN。
上图两个Encoder均为pre-trained VGG19,训练过程中参数不再更新。
Training和Inference过程中,Content和Style image同时传入Encoder,得到两组feature map, 然后通过AdaIN,对content image进行变换,转换所用的参数由计算得到,然后再传给decoder生成最终图片。需要注意的是 Content loss和之前paper定义的有所不同,如图所示,用的是经过AdaIN变换过的feature map计算L2 loss,而非encoder的输出。
自己的想法:
目标还是对之前的Content Loss+Style loss进行优化,但是增加一个offset来对Fx进行二次优化,并且将output styleM输出单独存储在一个张量M中,每次需要什么风格就单独选取Mi,实现Multi-style single model而且参数也不会随着其他风格进行更新。具体实现代码正在进行编写,正在准备中期,找工作,可能比较慢,有效果再更新。
再次感谢:https://zhuanlan.zhihu.com/p/57564626,https://zhuanlan.zhihu.com/p/24383274
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异