AIGC笔记--特征线性调制(FiLM)层的实现

AIGC笔记--特征线性调制(FiLM)层的实现

    正在检查是否收录...

目录

1--特征线性调制层的作用

2--特征线性调制层的实现

3--论文实例

1--特征线性调制层的作用

        特征线性调制(Feature-wise Linear Modulation,FiLM)层是一种神经网络模块,它可以用来实现特征的条件调整。FiLM层的主要功能是对输入特征进行缩放(scaling)和偏移(shifting),并且这个缩放和偏移是可以学习的。

        FiLM层的工作原理如下:给定一个输入特征x,FiLM层首先通过一个全连接层或其他形式的网络结构生成两个参数γ和β,然后对输入特征进行缩放和偏移,即y = γ * x + β。这里,γ和β是与输入特征x同样大小的向量,它们决定了对输入特征的缩放和偏移程度。

        FiLM层的主要作用是实现特征的条件调整,使得模型可以根据特定的条件(例如来自其他模态的信息)来调整特征的表示。这种机制在许多任务中都很有用,例如在图像生成任务中,FiLM层可以用来根据文本描述来调整生成的图像特征;在视频理解任务中,FiLM层可以用来根据音频信息来调整视频特征。

        总的来说,FiLM层是一种强大的特征调整工具,它可以帮助模型更好地利用条件信息,从而提高模型的性能。

2--特征线性调制层的实现

import torch import torch.nn as nn class FiLM(nn.Module): def __init__(self, input_dim, condition_dim): super(FiLM, self).__init__() # 全连接层,用于生成γ和β参数 self.fc_gamma = nn.Linear(condition_dim, input_dim) self.fc_beta = nn.Linear(condition_dim, input_dim) def forward(self, x, condition): # 根据条件特征获取缩放scale参数和移位参数shift,即计算γ和β参数 gamma = self.fc_gamma(condition) beta = self.fc_beta(condition) # 对输入特征x进行缩放和偏移,实现条件特征调整输入特征 y = gamma * x + beta return y if __name__ == "__main__": input_dim = 64 # 输入特征 condition_dim = 128 # 条件特征 # 创建一个FiLM层实例 film_layer = FiLM(input_dim, condition_dim) # 初始化输入特征x和条件特征condition x = torch.randn(1, input_dim) condition = torch.randn(1, condition_dim) # 使用FiLM层对输入特征x进行条件调整 y = film_layer(x, condition) print(y.shape) # [1, 64]

3--论文实例

在Audio2Photoreal中,利用音频特征来调整动作特征:

import torch import torch.nn as nn from einops import rearrange class DenseFiLM(nn.Module): def __init__(self, embed_channels): super().__init__() self.embed_channels = embed_channels self.block = nn.Sequential(nn.Mish(), nn.Linear(embed_channels, embed_channels * 2)) # nn.Mish()激活函数 def forward(self, position): # position [B dim] pos_encoding = self.block(position) # pos_encoding [B 2*dim] pos_encoding = rearrange(pos_encoding, "b c -> b 1 c") # [B 1 2*dim] scale_shift = pos_encoding.chunk(2, dim=-1) # two [B 1 dim] return scale_shift def featurewise_affine(x, scale_shift): # 获取缩放因子和移位因子 scale, shift = scale_shift # scale [B 1 dim] shift [B 1 dim] return (scale + 1) * x + shift # 调整特征 if __name__ == "__main__": B = 2 Frame_Residual_depth = 20*4 dim = 64 input_x = torch.rand(B, Frame_Residual_depth, dim) # 运动特征 condition_t = torch.rand(B, dim) # 音频条件特征 film = DenseFiLM(dim) # 调用film(condition_t)获取缩放因子和移位因子 output_x = input_x + featurewise_affine(input_x, film(condition_t)) # 通过 print(output_x.shape) # [B, Frame_Residual_depth, dim]

codingammtpu图像生成神经网络生成任务多任务
  • 本文作者:李琛
  • 本文链接: https://wapzz.net/post-15290.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.3W+
5
0
1
WAP站长官方

你所不知道的机器学习五大学派

上一篇

深入解析“云业CMS爬虫”:技术原理与实践应用

下一篇
  • 复制图片
按住ctrl可打开默认菜单