OSASIS(One-Shot Structure-Aware Stylized Image Synthesis)

news2025/3/24 21:45:17

文章目录

  • 摘要
  • abstract
  • 论文摘要
  • 方法
    • 损失函数
    • 实验
    • 结论
  • 总结

摘要

本周阅读了一篇关于新型图像风格化的论文《One-Shot Structure-Aware Stylized Image Synthesis》,旨在解决现有GAN模型在风格化过程中难以保持输入图像结构的问题。通过分离图像的结构和语义信息,实现对内容和风格的精确控制。该方法采用了扩散模型和结构保持网络,以及clip方向性损失,以提高风格化图像的原始质量,并在结构上保持方面表现出色。

abstract

This week I read a paper on a new type of Image stylization, “One-Shot Structure-Aware Stylized Image Synthesis”, which aims to solve the problem that existing GAN models have difficulty maintaining input image Structure during the stylization process. By separating the structure and semantic information of the image, the precise control of the content and style is realized. The method uses the diffusion model and structure retention network, as well as the clip directivity loss, to improve the original quality of the stylized image, and performs well in structure retention.

论文摘要

论文中主要提出一种新颖的单发性风格化方法Osasis,在结构保持方面非常强大。OSASIS能够有效地从图像的结构中分离语义,允许它控制对给定输入实现的内容和样式的级别。实验表明对于在训练过程中很少遇到的输入图像优于其他风格化方法。
在这里插入图片描述
OSASIS能够使用单个参考图像对输入图像进行风格化,同时稳健地保留输入图像的结构和内容。
在这里插入图片描述
在微调期间,跨域损失将逼真的图像(有界的黄色)与其程式化的对应图像(有界的绿色)进行比较。同时,域内损耗测量同一域内方向位移的对齐,用黄色和绿色描绘。重建损失将原始风格图像与重建的对应图像进行比较。直观地说,方向损失的组合保证了每次迭代生成的IBin被定位为来自IstyleB的投影向量和IAin与CLIP空间中的跨域和域内对应向量共线.

方法

通过逐渐解开图像的结构和语义信息来实现有效的风格化。将结构信息定义为图像的整体概述,图像的综合性进一步解构为内容和样式的组合。

在推理期间控制低级视觉特征(例如纹理和颜色)的数量,称为风格,以及高级视觉特征(例如对象和身份)的数量,称为内容。

采用了两种不同的潜在代码:结构潜在代码xt0和语义潜在代码Zsem,Zsem适当地调节到微调后的DDIM,使我们能够实现这种控制,有效地执行风格化。此外,我们直接对语义潜在代码zsem进行了优化,用于文本驱动的操作。通过将优化的潜影与微调的DDIM相结合,OSASIS能够生成具有操纵属性的风格化图像。

损失函数

在训练阶段为了解决结构信息丢失问题,论文引入了一个结构保留网络SPN,它利用1*1卷积有效的保留了IAin的空间信息和结构完整性。为了生成下一个时间步xt-1的输出,使用SPN反向DiffAE:
x t S P N = S P N ( I A i n ) x t ′ = x t + λ S P N ∗ x t S P N x t − 1 = α t − 1 f θ ( x t ′ , t , z s e m i n ) + 1 − α t − 1 ϵ θ B ( x t ′ , t , z s e m i n ) \mathbf{x}_{t}^{SPN}=SPN(I_{A}^{\mathrm{in}}) \\ \mathbf{x}_{t}^{\prime}=\mathbf{x}_{t}+\lambda_{SPN}*\mathbf{x}_{t}^{SPN}\\ \mathbf{x}_{t-1}=\sqrt{\alpha_{t-1}}f_{\theta}(\mathbf{x}_{t}^{\prime},t,\mathbf{z}_{\mathrm{sem}}^{\mathrm{in}})+\sqrt{1-\alpha_{t-1}}\epsilon_{\theta}^{B}(\mathbf{x}_{t}^{\prime},t,\mathbf{z}_{\mathrm{sem}}^{\mathrm{in}}) xtSPN=SPN(IAin)xt=xt+λSPNxtSPNxt1=αt1 fθ(xt,t,zsemin)+1αt1 ϵθB(xt,t,zsemin)
损失函数:包括跨域损耗、域内损耗和重构损耗。跨域损失的目的是对齐从域A到域B的变化方向,确保从IAin到IBin的变化与从IAstyle到的变化保持一致IBstyle。虽然跨域损失为模型优化提供了语义信息的变化,但在单独实现时往往会导致意想不到的变化。因此,引入域内损失来提供额外的信息,测量域A和域B内变化的相似性。重建损失为捕获从IAstyle到IBstyle的跨域变化提供了额外的指导。

实验

从FFHQ数据集[12]中随机选择20000张图像,使用每个图像的语义子码zsem
和随机子码xT ~N(0, I)(即随机重建)来重建每个图像。我们使用感知相似度损失将重建图像与原始图像进行比较,以确定重建的质量。
在这里插入图片描述
上图论文中的方法成功地保留了低密度属性,而其他基线方法却没有做到这一点。
在这里插入图片描述
由于基于gan的反演方法的能力有限,基线方法无法从样式图像的结构和语义中解脱出来。这导致结构伪影被转移到输出图像中,而OSASIS仅成功地提取语义。

代码
下面代码的核心思想是将一张目标图像(即 img_ref_B)加噪到某个时间步,然后从这个噪声状态通过扩散模型反向还原多次,并从中挑选最接近原图的一张。

def main():
    args = create_argparser().parse_args()

    # set seed
    random.seed(args.seed)
    np.random.seed(args.seed)
    th.manual_seed(args.seed)

    dist_util.setup_dist()
    logger.configure(dir=args.sample_dir)

    logger.log("creating model and diffusion...")
    model, diffusion = create_model_and_diffusion(
        **args_to_dict(args, model_and_diffusion_defaults().keys())
    )
    model.load_state_dict(
        dist_util.load_state_dict(args.model_path, map_location="cpu")
    )
    model.to(dist_util.dev())
    if args.use_fp16:
        model.convert_to_fp16()
    model.eval()

    logger.log("sampling...")

    device = dist_util.dev()
    transform_256 = transforms.Compose([
        transforms.Resize((256,256)),
        transforms.ToTensor(),
        transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))  
    ])

    # imgs_ref_domainB = glob.glob(f'{args.input_dir}/*')
    imgs_ref_domainB = [f'{args.input_dir}/art_{args.seed}.png']
    percept_loss = lpips.LPIPS(net='vgg').to(device)
    l1 = th.nn.L1Loss(reduction='none')

    # for img_file in tqdm(imgs_ref_domainB):
    #     # file_name = img_file.split('/')[-1]
    # file_name = Path(img_file).name
    
    img_file = os.path.join(args.input_dir, args.img_name)
    img_ref_B = Image.open(img_file).convert('RGB')
    img_ref_B = transform_256(img_ref_B)
    img_ref_B = img_ref_B.unsqueeze(0).to(device)
    img_ref_B_all = img_ref_B.repeat(args.n,1,1,1)

    t_start = int(diffusion.num_timesteps*args.t_start_ratio)
    t_start = th.tensor([t_start], device=device)
    
    # forward DDPM
    xt = diffusion.q_sample(img_ref_B_all.clone(), t_start)

    # reverse DDPM
    indices = list(range(t_start))[::-1]
    for i in indices:
        t = th.tensor([i] * img_ref_B_all.shape[0], device=device)
        with th.no_grad():
            out = diffusion.p_sample(
                model,
                xt,
                t,
                clip_denoised=True,
                denoised_fn=None,
                cond_fn=None,
                model_kwargs=None,
            )
            xt = out["sample"]

        # # reverse DDIM
        # indices = list(range(t_start))[::-1]
        # for i in indices:
        #     t = th.tensor([i] * img_ref_B_all.shape[0], device=device)
        #     with th.no_grad():
        #         out = diffusion.ddim_sample(
        #             model,
        #             xt,
        #             t,
        #             clip_denoised=True,
        #             denoised_fn=None,
        #             cond_fn=None,
        #             model_kwargs=None,
        #         )
        #         xt = out["sample"]

        # compute loss
        # from torchvision.utils import save_image
        #计算 L1 和 LPIPS(感知损失)衡量每张重建图像与原图的相似度。
        # save_image(xt/2+0.5, os.path.join('step1_tmp', file_name))
        l1_loss = l1(xt, img_ref_B.repeat(int(args.n),1,1,1))
        l1_loss = l1_loss.mean(dim=(1,2,3))
        lpips_loss = percept_loss(xt, img_ref_B.repeat(int(args.n),1,1,1)).squeeze()
        loss = 10*l1_loss + lpips_loss

        # pick best image
        img_idx = th.argmin(loss)
        img_ref_A = xt[img_idx]
        
        os.makedirs(args.sample_dir, exist_ok=True)
        utils.save_image(img_ref_A/2+0.5, os.path.join(args.sample_dir, args.img_name))

加权组合后选取最小loss的图像作为最终结果。

结论

OSASIS在风格化中表现出强大的结构感知能力,能够有效地从图像中分离出结构和语义。虽然OSASIS在结构感知的风格化方面取得了重大进展,但仍存在一些限制。OSASIS的一个显著限制是它的训练时间比比较方法要长。这种延长的训练时间是该方法保持结构完整性和适应各种风格的增强能力的一种权衡。OSASIS在保持输入图像的结构完整性方面的鲁棒性、在域外参考风格化方面的有效性以及在文本驱动操作中的适应性使其成为风格化图像合成领域的一种很有
前途的方法。

总结

本周阅读的论文《One-Shot Structure-Aware Stylized Image Synthesis》提出了一种结构感知的单图风格化方法 OSASIS。该方法通过解耦图像的结构与语义信息,实现了风格与内容的独立控制,采用扩散模型和结构保持网络(SPN)在保持结构的同时增强风格表达。其关键在于结合CLIP方向损失、多种感知损失,以及语义潜在编码的优化,使生成图像在风格迁移的同时能最大程度地保留原图结构。实验结果显示,OSASIS在低密度区域保留、跨域风格化和文本引导方面均优于现有方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习之网盘项目单例模式

目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿,亲爱的算法工程师们!今天咱们聊一聊PDF解析的那些事儿,简直就像是在玩一场“信息捉迷藏”游戏!PDF文档就像是个调皮的小精灵,表面上看起来规规矩矩,但当你想要从它那里提取信息时,它就开始跟…

C语言【文件操作】详解中(会使用fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite函数)

引言 介绍和文件操作中文件的顺序读写相关的函数 看这篇博文前,希望您先仔细看一下这篇博文,理解一下文件指针和流的概念:C语言【文件操作】详解上-CSDN博客文章浏览阅读606次,点赞26次,收藏4次。先整体认识一下文件是…

GpuGeek:破解算力难题,赋能AI创新与普及

文章目录 一、引言二、填补算力资源供需缺口,降低使用门槛三、提升算力资源利用率,推动高效协作四、满足多样化需求,支持AI技术落地五、推动算力市场创新,促进生态良性发展六、助力AI人才培养,推动行业长远发展七、结语…

扣子平台知识库不能上传成功

扣子平台知识库不能上传成功 目录 扣子平台知识库不能上传成功查看模板复制头部到自己的excel中json数据转为excel或者csv(一定使用excel,csv总是报错) 查看模板复制头部到自己的excel中 json数据转为excel或者csv(一定使用excel&…

JVM的组成--运行时数据区

JVM的组成 1、类加载器(ClassLoader) 类加载器负责将字节码文件从文件系统中加载到JVM中,分为:加载、链接(验证、准备、解析)、和初始化三个阶段 2、运行时数据区 运行时数据区包括:程序计数…

c++进阶之------红黑树

一、概念 红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在计算机科学的许多领域中都有广泛应用,比如Java中的TreeMap和C中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性(红色或黑色&am…

ubuntu22.04安装搜狗输入法保姆教程~

一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply

《数据库原理》SQLServer期末复习_题型+考点

目录 题型: 一. 概况分析题(5小题,每小题2分,共10分) 二. 计算题(3小题,每小题5分,共15分) 三. 数据库设计(2小题,每小题10分,共2…

Zstd(Zstandard)压缩算法

要压缩的数据量越小,压缩的难度就越大。这个问题对所有压缩算法都是通用的,原因是压缩算法从过去的数据中学习如何压缩未来的数据。但是,在新数据集开始时,没有“过去”可以构建。 官网 为了解决这种情况,Zstd 提供了一…

本地部署 browser-use

本地部署 browser-use 0. 引言1. 核心功能与优势2. 快速上手3. 部署 Gradio UI4. 更多示例0. 引言 Browser-Use 是一个强大的工具,旨在让 AI Agent 能够控制浏览器,从而实现各种自动化任务。它简化了 AI 与浏览器的交互,让开发者能够轻松构建能够执行网页操作的智能应用。本…

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor,但是因为自身能力问题,读不懂官网文档,最终结合ai和网友的帖子成功引入&…

[笔记] TinyWebServer编译及demo运行过程

文章目录 前言环境搭建ubuntumysql 8.0c/c开启root用户TinyWebServer 搭建及编译过程运行结果常见问题./threadpool/../CGImysql/sql_connection_pool.h:6:10: fatal error: mysql/mysql.h: No such file or directory./server运行后直接退出了 前言 哎 也就帮帮新手看看问题 …

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及,势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营,互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容,再加上电影行业的发展,如此繁荣吸引…

虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用

一、微服务注册中心Consul 编写完延迟任务系统的web层接口,也就是说可以基于http协议来访问延迟系统,接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现,服务的注册与发现都离不开服务的注册中心,本项目选取…

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…

第十六届蓝桥杯康复训练--6

题目链接&#xff1a;790. 数的三次方根 - AcWing题库 思路&#xff1a;二分&#xff0c;注意正负号和小数判断退出的方法&#xff08;虽然正负无所谓&#xff09; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…

logisim安装以及可能出现的问题

阅读提示&#xff1a;我这篇文章更偏向于安装出现问题的解决方案 目录 一、安装步骤 二、安装问题 1、出错的问题 2、出错的原因与解决方法 一、安装步骤 1、下载logisim 官方网站&#xff1a;https://sourceforge.net/projects/circuit/ 下载适用于你操作系统的版本&…

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…