pytorch 使用einops重新排列5DTensor

2ledvvac  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(201)

我正在分析ViViT的实施情况:视频视觉转换器。此模型的输入Tensor具有(批量大小,帧数,通道=3,H,W)的形式。当涉及到面片嵌入时,它使用从from einops.layers.torch import Rearrange导入的Rearrange,如下所示:

self.to_patch_embedding = nn.Sequential(
            Rearrange('b t c (h p1) (w p2) -> b t (h w) (p1 p2 c)', p1 = patch_size, p2 = patch_size),
            nn.Linear(patch_dim, dim),
        )

我的问题是Rearrange函数对输入Tensor[b,t,c,h,w]会发生什么变化,这是因为虽然我读了论文,但它对我来说仍然是模糊的?
任何帮助都是受欢迎的。

628mspwn

628mspwn1#

假设有一个形状为(32, 10, 3, 32, 32)的输入Tensor,表示(batchsize, num frames, channels, height, width)
b t c (h p1) (w p2)p1=2p2=2将Tensor分解为(32, 10, 3, (16, 2), (16, 2))
b t (h w) (p1 p2 c)将分解后的Tensor合成为(32, 10, 32*32=1024, 2*2*3=12)

相关问题