我正在分析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]会发生什么变化,这是因为虽然我读了论文,但它对我来说仍然是模糊的?
任何帮助都是受欢迎的。
1条答案
按热度按时间628mspwn1#
假设有一个形状为
(32, 10, 3, 32, 32)
的输入Tensor,表示(batchsize, num frames, channels, height, width)
。b t c (h p1) (w p2)
与p1=2
和p2=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)