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

如何将张量填充至指定高度?MediaPipe动作识别代码原理咨询

理解PyTorch F.pad处理动作识别张量帧统一的逻辑

我用MediaPipe关键点做动作识别,部分张量形状如下:

torch.Size([3, 3, 75]) torch.Size([3, 6, 75]) torch.Size([3, 10, 75])
torch.Size([3, 11, 75]) torch.Size([3, 9, 75]) torch.Size([3, 4, 75])
torch.Size([3, 21, 75])

每个张量的第二维度(height)对应样本帧数,不同样本的帧数存在差异。我想把所有样本统一为8帧,清楚帧数不足8需要填充、超过8需要截断,但我写的代码不管height小于还是大于8都执行填充操作,而且实际运行有效,想搞懂这段代码的工作原理:

if height < 8:
    source_pad = F.pad(tensor1, pad=(0, 0, 0, 8 - height))
else:
    source_pad = F.pad(tensor1, pad=(0,0, 0, 8 - height))

代码工作原理拆解

  1. PyTorch F.pad的参数规则
    对于3维张量,pad=(a,b,c,d,e,f)的填充/截断逻辑是从后往前对应维度:

    • 最后一维(你的张量里是75维的关键点特征):前填充a个、后填充b个
    • 中间维度(你的张量里是帧数维度):前填充c个、后填充d个
    • 第一维度:前填充e个、后填充f个
  2. 你的代码参数分析
    你写的pad=(0,0,0,8-height),对应到3维张量的处理:

    • 最后一维:前后都填0,等于完全不处理
    • 中间帧数维度:前面填0,后面填8-height个元素
  3. 两种场景的实际效果

    • 当height < 8时:8-height是正数,会在帧数维度的末尾填充对应数量的默认值(通常是0),把帧数补到8,完成填充需求。
    • 当height > 8时:8-height是负数,此时F.pad会把负数识别为截断指令——对帧数维度的末尾截断height-8个元素,最终只保留前8帧,刚好实现截断需求。
  4. 冗余的if-else分支
    你代码里的if和else分支执行的是完全一样的逻辑,所以这个判断完全多余,直接写source_pad = F.pad(tensor1, pad=(0,0,0,8-height))就能同时处理填充和截断两种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:30:41