【风格迁移】AdaAttN:使用注意力机制和归一化来保持内容结构的同时转移风格特征
就像是最后的烹饪步骤,将所有准备好的食材和调味料结合起来,通过火候的精确控制(归一化处理),使得最终的菜肴不仅保持了食材原有的结构(内容图像的结构保持),还融入了新的风味(风格图像的特征),最终达到既保留了原料本身特色,又融入了新风味的完美平衡。假设我们有两幅画:一幅是宁静的村庄景色(内容图像Ic),另一幅是梵高的《星夜》(风格图像Is)。然而,如果我们的目标是快速且通用的风格迁移,特别是在实时应
AdaAttN:使用注意力机制和归一化来保持内容结构的同时转移风格特征
提出背景
论文:https://arxiv.org/pdf/2108.03647.pdf
代码:https://github.com/wzmsltw/AdaAttN
在艺术风格迁移中,我们的目标是将一幅图像的风格(例如梵高的画风)应用到另一幅图像上,同时保持原图的内容结构。
尽管已有很多方法尝试解决这个问题,但大多数方法在保持内容图像结构的同时,很难精确地捕捉和复现风格图像的局部细节和纹理。
AdaAttN(自适应注意力归一化)提出了一个新颖的方案,通过三个关键的技术细节来改善这个问题:
- 注意力图的生成: 通过深层和浅层特征的融合来决定内容图的哪些部分应当接受风格图的影响。
- 加权均值和标准差图的计算: 用于捕捉风格图的局部细节,并按照这些细节调整内容图的特征。
- 适应性归一化: 将调整后的内容特征归一化,以便在不同的区域应用不同强度的风格特征。
详细说一下。
-
深层和浅层特征的综合注意力分数计算:
- 内容: 综合考虑内容和风格图像的浅层及深层CNN特征来计算空间注意力分数。
- 这意味着,AdaAttN不仅仅关注图像的高层次(如形状、边缘)特征,也关注低层次(如纹理、颜色)特征。
- 这样做的原因是,传统的基于注意力的方法主要关注于高层抽象特征,而忽略了图像的低层细节,导致对低层纹理的关注不足并且由高层语义主导。
-
每点加权统计的计算:
- 内容: 将风格特征点视为所有空间特征点的注意力加权输出分布,并计算每点加权统计。
- 在处理风格图像时,AdaAttN考虑到每个点的特征,并根据这些特征的重要性进行加权。
- 这是为了更精确地复现风格图像的局部纹理和细节,因为不同区域的特征对于最终风格的影响是不同的。
-
内容特征的适应性归一化:
- 内容: 根据每点加权的风格特征统计来归一化内容特征,使得内容特征的局部统计与加权的风格特征统计相匹配。
- 通过调整内容图像的特征,使其在统计上与风格图像的特征相匹配,从而在不改变内容结构的情况下,实现风格的迁移。
- 这种方法确保了内容图像的每个部分都以适应其对应风格特征点的方式被调整,从而更好地融合风格特征。
AdaAttN通过这三个技术细节,使得风格迁移不仅忠实于风格图像的细节,同时也保持了内容图像的结构。
这种方法在任意风格迁移中实现了更好的平衡,有效提升了生成图像的质量和风格的多样性。
打个比方:
-
深层和浅层特征的综合注意力分数计算就像是挑选食材。
在这个过程中,厨师(AdaAttN)不仅仅关注食材的整体(如肉类或蔬菜的种类),也细致考虑每个食材的具体部分(如肉的部位或蔬菜的叶子和茎)。
这样做的目的是为了确保菜肴(生成的图像)不仅在整体上美味(风格迁移的全局一致性),也在细节上丰富多彩(保留局部纹理和细节)。
-
每点加权统计的计算类似于调味。
在这一步,厨师根据每个食材的特性和菜肴的整体风味需求,精确地调整每种调料的比例(注意力加权)。
这一过程确保了每一口都能尽可能地展现出最佳的风味组合,无论是肉类的鲜美还是蔬菜的清脆。
-
内容特征的适应性归一化就像是最后的烹饪步骤,将所有准备好的食材和调味料结合起来,通过火候的精确控制(归一化处理),使得最终的菜肴不仅保持了食材原有的结构(内容图像的结构保持),还融入了新的风味(风格图像的特征),最终达到既保留了原料本身特色,又融入了新风味的完美平衡。
AdaAttN 框架
假设我们有两幅画:一幅是宁静的村庄景色(内容图像Ic),另一幅是梵高的《星夜》(风格图像Is)。我们的目标是将《星夜》的风格应用到村庄景色上,同时保持村庄的结构不变。
总体框架
- 问题:我们需要在村庄画中引入《星夜》的风格特征,但是不能改变村庄的布局。
- 解法:就像是一位艺术家(网络)使用不同的画笔在不同层次上作画。她首先用大画笔(VGG-19网络的浅层特征)描绘出村庄的大致形状,然后用细画笔(VGG-19网络的深层特征)加入《星夜》的风格细节。通过在不同层次上应用AdaAttN模块,艺术家能够确保在添加风格时不会改变原有的结构。
自适应注意力归一化(AdaAttN)
- 问题:在给村庄添加《星夜》的风格时,我们如何确保每个部分都得到适当的风格强度,不会有过度或不足的地方。
- 解法:这就像是艺术家在给画面的每个小部分调色。通过注意力图,她确定哪些区域应该更多地体现《星夜》的风格(例如天空部分可能需要更多的蓝色和旋涡状的笔触)。然后,她会根据这些信息为每个部分混合适当的颜色和纹理。
损失函数
- 问题:在整个绘画过程中,如何确保风格融合得当,既不过分也不欠缺。
- 解法:这就好比艺术家在完成画作的每个阶段后都会退后一步审视她的作品,对比原始的《星夜》和村庄景色。全局风格损失确保整幅画的风格符合《星夜》,而局部特征损失则确保每个细节(如树木、房屋)都与原作保持一致。
视频风格迁移的扩展
- 问题:如果我们不仅想要一幅静态的画,还想要一个视频,其中村庄的每一帧都以《星夜》的风格绘制,但又不会有抖动或不连贯的问题。
- 解法:这就像是艺术家在创作一系列连续的画作。为了确保画作间的连贯性,她使用一种特殊的技术(余弦相似度)来保持帧与帧之间的一致性。跨图像相似性损失则像是一个标准,确保视频中的每一帧都保持与原始场景的相似性,从而避免了抖动。
总的来说,AdaAttN网络就像是艺术家用以创建一系列连贯且风格统一的画作的工具箱,既可以用于单幅画作,也可以扩展到一系列连续的画面(视频)。
通过这个网络,艺术家能够在每一帧中捕捉和应用《星夜》的风格,同时保持村庄景色的原貌。
在这个网络中,有一个编码器(VGG),三个AdaAttN模块,和一个解码器。
编码器负责从内容图像(Ic)和风格图像(Is)提取特征,这些特征随后通过三个AdaAttN模块进行处理,目的是调整内容特征以匹配风格特征的分布。
每个AdaAttN模块都在VGG网络的不同层级(ReLU3-1,ReLU4-1和ReLU5-1)上操作。
最终,解码器使用这些调整后的特征来生成风格化的图像(Ics)。
网络的训练是通过两种类型的损失函数来指导的:局部特征损失(Llf)和全局风格损失(Lgs),这些损失函数帮助网络学习如何更好地在保持内容结构的同时迁移风格。
- 问题:如何在任意风格迁移中有效利用深层和浅层特征,并生成高质量的风格化图像。
- 解法:使用预训练的VGG-19网络作为编码器,提取多尺度特征图,然后通过AdaAttN模块在不同层次(ReLU3-1、ReLU4-1和ReLU5-1层)上综合使用这些特征,最后通过解码器生成风格化图像。
- 子特征1:多层次特征整合。
- 之所以使用,是因为不同层次的特征包含了从浅层的纹理细节到深层的语义信息,这对于风格迁移的质量至关重要。
- 子特征1:多层次特征整合。
自适应注意力归一化(AdaAttN)
- 问题:如何在风格迁移中考虑局部风格模式,并实现内容和风格特征之间的细粒度对齐。
- 解法:通过AdaAttN模块,使用注意力机制在每个点基础上适应性地转移特征分布,同时考虑低层和高层特征。
- 子特征1:注意力图的生成。
- 之所以使用,是因为注意力机制能够衡量内容和风格特征之间的相似性,帮助模型聚焦于重要的风格特征。
- 子特征2:加权均值和标准差图的计算。
- 之所以使用,是为了更精确地模拟目标风格特征点的分布,提高风格迁移的局部一致性。
- 子特征3:适应性归一化。
- 之所以使用,是因为通过调整内容特征,使其与目标风格特征的统计属性对齐,从而在保留内容结构的同时实现风格迁移。
- 子特征1:注意力图的生成。
上图是,三种风格迁移方法的内部结构和它们各自的工作原理:
(a) AdaIN(自适应实例归一化):这是一种较早的方法,它通过调整内容特征的均值和标准差来匹配风格特征的分布。
(b) SANet(风格-注意力网络):这种方法使用注意力图来重新加权风格特征,然后将其与内容特征融合。
© AdaAttN(自适应注意力归一化):这是作者提出的方法,它不仅使用高层和低层特征来生成注意力图,还计算了加权的风格特征均值(M)和标准差(S),然后用这些统计量来适应性地归一化内容特征。
AdaAttN的主要创新在于它计算每个点的加权统计,并根据这些统计调整内容特征,这样做可以在不同空间位置上更精确地匹配风格和内容特征,从而在保持内容真实性的同时实现复杂的风格迁移。
这种方法也试图克服传统方法在处理局部风格细节时的局限性
损失函数
- 问题:如何设计损失函数以优化风格迁移的全局效果和局部特征一致性。
- 解法:综合使用全局风格损失和局部特征损失,前者确保整体风格效果,后者保证风格化图像的局部特征与AdaAttN的转换结果一致。
- 子特征1:全局风格损失。
- 之所以使用,是为了在整体上实现风格一致性。
- 子特征2:局部特征损失。
- 之所以使用,是因为它可以使模型在局部区域生成更优质的风格化输出,提高风格迁移的细节质量。
- 子特征1:全局风格损失。
视频风格迁移的扩展
- 问题:如何将任意风格迁移扩展到视频,同时解决帧间一致性和减少抖动的挑战。
- 解法:通过对注意力机制和损失函数的修改,使模型适用于视频风格迁移,保持帧间的风格一致性和视觉稳定性。
- 子特征1:使用余弦相似度计算注意力图。
- 之所以使用,是因为相比Softmax,它能产生更平坦的注意力得分分布,有利于帧间稳定性和一致性。
- 子特征2:跨图像相似性损失。
- 之所以使用,是为了确保两个内容图像的风格化结果与原图在局部相似度模式上保持一致,从而提升视频风格迁移的稳定性。
- 子特征1:使用余弦相似度计算注意力图。
自适应注意力归一化(AdaAttN)的应用场景
自适应注意力归一化(AdaAttN)是一种专门为任意风格迁移设计的解决方案,用于处理以下两个主要问题:
-
任意风格迁移中的局部风格细节问题:在任意风格迁移中,往往需要在不同的图像之间迁移风格,同时保持内容的结构不变。
传统的方法可能在全局上做得不错,但往往无法捕捉到细节。
这时,AdaAttN通过对风格特征和内容特征的注意力分数进行适应性调整来保留更多的局部细节。
-
视频风格迁移中的时间一致性问题:在视频风格迁移中,除了每一帧的风格需要迁移之外,还要保持帧与帧之间的一致性,避免出现抖动。
AdaAttN能够通过在帧间适应性地调整特征来保持一致性,从而解决这一问题。
共享的是一个核心特征:需要在不同媒介中保持风格和内容特征的一致性。
- 手机拍出的照片色彩鲜艳,而相机拍出的则更为自然。
- 现在,你想要在这两种设备上获得统一风格的照片,以便它们看起来像是由同一个设备拍摄的。
- AdaAttN相当于是一种图像编辑滤镜,不论原始照片的色彩如何,它都可以将这两张照片处理成相同的风格。
- 它会分别分析手机和相机拍摄的照片中的色彩和纹理(内容特征),然后应用一种风格(比如油画效果),使得两张照片在视觉上看起来相似,就像都是同一位艺术家画的一样。
- “不同媒介”指的是不同设备拍摄的照片,而“保持风格和内容特征的一致性”指的是在两张照片上应用相同风格滤镜的效果,使得它们具有一致的视觉风格,尽管它们的原始拍摄条件不同。
AdaAttN提供了一种共通的解决方案,能够灵活地适应不同层级的特征,并进行适当的归一化处理,以保持局部和全局的风格迁移效果。
因此,AdaAttN这种解法会在面对需要精确控制风格和内容特征的任意风格迁移任务时使用,无论是单个图像还是一系列连续的视频帧。
全流程优化
基于特征相似度的注意力机制(现有方法)
优点:
- 通用性:它不依赖于图像内容的具体类型,因此可以广泛应用于各种不同风格和内容的图像。
- 计算效率:通常,这种方法仅依赖于已有的特征表示,无需额外的训练数据,可以快速计算并实现实时风格迁移。
- 风格适应性:适用于抽象风格的迁移,因为它关注的是特征层面的相似度而非具体的图像内容。
缺点:
- 局部细节处理:可能无法精细处理每个局部区域,因为全局特征相似度不足以反映局部内容的独特性。
- 内容保持:在风格迁移时,可能会牺牲一些内容的结构细节,因为注意力是在特征层面而非像素层面计算的。
基于图像语义分割的注意力机制(替代方案)
优点:
- 细腻度:能够对图像中的单独对象或区域应用不同的风格处理,提供更细腻的风格迁移效果。
- 内容保持:通过精确地定位和分割图像中的对象,可以更好地保持原始内容的结构和细节。
- 目标化处理:可以根据图像内容的语义重要性来决定风格迁移的重点区域。
缺点:
- 数据和资源要求:需要大量标注的训练数据来训练分割模型,并且在运行时需要更多的计算资源。
- 泛化性:可能在未见过的对象类型或新的风格上表现不佳,因为分割模型的泛化能力有限。
- 抽象风格适应性:对于非具象艺术风格,如立体派或表现派,可能无法准确捕捉风格的本质,因为这些风格与具体的图像语义内容关联较少。
如果目标是保持高度的内容忠实度并对特定的对象进行详细的风格调整,那么基于图像语义分割的注意力机制可能是更好的选择。
- 例如,把他们的猫变成毕加索的立体主义画作。
- 在这种情况下,你会使用基于图像语义分割的注意力机制。
- 应用会识别照片中的猫,并且细致地应用毕加索的风格到猫的每个部分,如脸、胡须和毛发,确保转换后的图像保持了猫的结构,同时具有明显的立体主义风格。
然而,如果我们的目标是快速且通用的风格迁移,特别是在实时应用中,或者风格本身非常抽象,不依赖于图像内容的具体类型,那么基于特征相似度的注意力机制可能更为合适。
- 只想快速给他们的自拍照添加梵高的《星夜》风格,不关心细节的精确性。
这两种方法也可以结合起来,先用语义分割来确定风格迁移的关键区域,然后在这些区域内使用基于特征相似度的注意力机制来实现细节的风格化。
- 城市风景照,将天空区域详细地转换成梵高风格,同时对其他区域如建筑进行快速风格迁移。
- 首先使用图像语义分割确定天空的区域,并细致地应用梵高的笔触
- 而对于建筑等其他区域,则使用基于特征相似度的快速风格迁移
这意味着它可以在需要细致处理特定区域(如宠物、人脸)时提供高精度的风格应用,同时在其他不需要如此精细处理的区域快速完成风格迁移。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)