如何在PyTorch中从扁平化补丁张量重建224x224图像?
解决PyTorch补丁张量还原为原始图像的问题
你的张量对应14×14网格的16×16像素补丁(224/16=14,14×14=196),直接用view会打乱像素顺序,得按以下步骤调整维度后拼接:
- 第一步:将(196,256)的张量重塑为网格结构,对应14行14列的补丁,每个补丁保持16×16的像素维度:
patches_reshaped = patches.view(14, 14, 16, 16) - 第二步:调整维度顺序,把每个补丁的高度维度和网格的列维度交换,让同一行的补丁像素能连续拼接:
patches_transposed = patches_reshaped.permute(0, 2, 1, 3) - 第三步:将张量重塑为224×224的原始图像尺寸(14×16=224):
img = patches_transposed.reshape(224, 224)
也可以合并为一行代码:
img = patches.view(14, 14, 16, 16).permute(0, 2, 1, 3).reshape(224, 224)
为什么直接用view不行?
patches.view(224,224)会按张量的连续内存顺序直接展开,而你的补丁是按网格行排列的,每个补丁内部是16×16的连续像素,直接view会把不同行的补丁像素混在一起,导致行序混乱。上面的方法先把补丁按网格分组,再按正确的顺序拼接行内和行间的像素,就能精准还原原始图像。
内容的提问来源于stack exchange,提问作者Edward Brown
相关产品推荐
相关产品推荐

