让您的照片动起来first motion model(2)-DENSE MOTION模型深度解析

1 概述

如果还没有阅读第一篇文章,建议先阅读。再阅读本章内容 

让您的照片动起来first motion model(1)-关键点抽取模型深度解析

在第一篇文章中详细介绍了关键点抽取模型的技术关键点以及其雅各比矩阵。相关的数学理论是taylor级数的一阶展开式。关于数学理论部分会单独写文章为大家剖析。在关键点抽取出来之后,我们需要使用关键点位移以及其周边像素的仿射变换,来构建其密集变换模型(dense motion network)。

2、Dense Motion Network

2.1 kp2gaussian

  • 该函数会将关键点信息转化为一个区域,涵盖了关键点以及其周围的邻域
  • 实现公式
    𝑒𝑥𝑝((𝑇𝑆←𝑅(𝑝𝑘)−𝑧)2/𝛿)exp((TS←R(pk)−z)2/δ)
  • 同时用来计算 原图与驱动图在与本地高斯坐标系对齐情况下的变化,在后续会详细讨论

相关源码如下

def kp2gaussian(kp, spatial_size, kp_variance):
    """
    Transform a keypoint into gaussian like representation
    """
    #关键点T(pk),shape  [batch_size,10,2] 10个关键点
    mean = kp['value']
    #z 本地坐标关键点 shape [height,width,2]
    coordinate_grid = make_coordinate_grid(spatial_size, mean.type())
    # 2
    number_of_leading_dimensions = len(mean.shape) - 1
    # (1,1,hegit,width,2)
    shape = (1,) * number_of_leading_dimensions + coordinate_grid.shape
    # (1,1,hegit,width,2)
    coordinate_grid = coordinate_grid.view(*shape)
    #(1, 10, 1, 1, 1)
    repeats = mean.shape[:number_of_leading_dimensions] + (1, 1, 1)
    # [1, 10, 64, 64, 2]
    coordinate_grid = coordinate_grid.repeat(*repeats)

    # Preprocess kp shape
    [1,10,1,1,2]
    shape = mean.shape[:number_of_leading_dimensions] + (1, 1, 2)
    mean = mean.view(*shape)
    #T(pk)-z
    mean_sub = (coordinate_grid - mean)

    out = torch.exp(-0.5 * (mean_sub ** 2).sum(-1) / kp_variance)

    return out

注意 下面代码

out = torch.exp(-0.5 * (mean_sub ** 2).sum(-1) / kp_variance)

之所以会有0.5出现是因为将两个通道相加需要求均值 

相关测试代码如下

gaussian=kp2gaussian(key_point,(64,64),0.01)
figure,ax=plt.subplots(1,2,figsize=(8,4))
ax[0].imshow(gaussian[0][0].data)
ax[1].imshow(kp_test_data)

效果如下

2.2 计算 H_k用于表示关键点与邻域的变化

exp(({T_{D \leftarrow R}(p_k)}-z)^2/{\delta})-exp(({T_{S \leftarrow R}(p_k)}-z)^2/{\delta})

\delta取 0.01

相关源码如下

def create_heatmap_representations( source_image, kp_driving, kp_source):
     
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值