You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyTorch对视频张量逐帧下采样(支持反向传播)

解决方案

你的核心需求是对视频张量逐帧做2D下采样(避免3D插值引入时间维度的关联),同时保证可反向传播。以下是两种可行方法,优先推荐第一种高效实现:

方法1:合并维度后用2D插值(高效推荐)

通过将batch维度和时间维度合并,把5D张量转为4D,直接用PyTorch的interpolate做2D插值,处理后再恢复原维度结构。这种方法避免循环,效率更高,且完全支持反向传播。

示例代码:

import torch

# 示例输入张量:(1, frame_number, channels, h, w)
input_tensor = torch.randn(1, 15, 3, 256, 256, requires_grad=True)
new_h, new_w = 128, 128

# 步骤1:拆分维度并合并batch与time维度
batch_size, time_steps, channels, h, w = input_tensor.shape
reshaped_tensor = input_tensor.view(batch_size * time_steps, channels, h, w)

# 步骤2:2D插值下采样(选择合适的插值模式,如bilinear/nearest)
downsampled_4d = torch.nn.functional.interpolate(
    reshaped_tensor,
    size=(new_h, new_w),
    mode='bilinear',  # 若不需要平滑,可改用'nearest'
    align_corners=False  # 保持默认False即可,避免边缘数值异常
)

# 步骤3:恢复原5D张量结构
downsampled_tensor = downsampled_4d.view(batch_size, time_steps, channels, new_h, new_w)

# 验证反向传播有效性
loss = downsampled_tensor.sum()
loss.backward()
print(input_tensor.grad is not None)  # 输出True,说明支持反向传播

方法2:逐帧循环处理(直观但效率较低)

如果更倾向于逐帧显式处理,可以遍历时间维度,对每帧单独做2D插值,最后拼接回5D张量。这种方法逻辑直观,但帧数量大时效率不如方法1。

示例代码:

import torch

input_tensor = torch.randn(1, 15, 3, 256, 256, requires_grad=True)
new_h, new_w = 128, 128
batch_size, time_steps, channels, h, w = input_tensor.shape

downsampled_frames = []
for t in range(time_steps):
    # 提取单帧:shape (1, channels, h, w)
    single_frame = input_tensor[:, t, :, :, :]
    # 对单帧做2D插值
    downsampled_frame = torch.nn.functional.interpolate(
        single_frame, size=(new_h, new_w), mode='bilinear', align_corners=False
    )
    downsampled_frames.append(downsampled_frame)

# 将所有帧拼接回5D张量
downsampled_tensor = torch.stack(downsampled_frames, dim=1)

# 验证反向传播
loss = downsampled_tensor.sum()
loss.backward()
print(input_tensor.grad is not None)  # 输出True

为什么之前的方法失败?

  • 若直接对5D张量用interpolate且指定mode='trilinear',会触发3D插值,会用到时间维度的相邻帧信息,不符合你"逐帧处理"的需求;
  • torchvision.transforms.Resize默认只处理4D(batch, C, H, W)或3D(C, H, W)张量,直接传入5D张量会报错,需要先调整维度结构再使用。

内容的提问来源于stack exchange,提问作者NancyBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:57:27