先上结论,unfold是先对第一通道展平,再对第二通道展平,依次叠加
import cv2
import numpy as np
import torch
import torch.nn.functional as F
b=1
c=2
h=12
w=12
s=torch.arange(1,b*c*h*w+1).float()
s=s.view(b,c,h,w)
up_factor=2
kernel=3*up_factor
t = F.unfold(s, kernel_size=(kernel, kernel),
padding=up_factor, stride=up_factor)
print(s)
print("\n*****************************\n")
print(t.shape)
print(t)
print(t[0, :, 0])
结果
tensor([[[[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.,
12.],
[ 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23.,
24.],
[ 25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35.,
36.],
[ 37., 38., 39., 40., 41., 42., 43., 44., 45., 46., 47.,
48.],
[ 49., 50., 51., 52., 53., 54., 55., 56., 57., 58., 59.,
60.],
[ 61., 62., 63., 64., 65., 66., 67., 68., 69., 70., 71.,
72.],
[ 73., 74., 75., 76., 77., 78., 79., 80., 81., 82., 83.,
84.],
[ 85., 86., 87., 88., 89., 90., 91., 92., 93., 94., 95.,
96.],
[ 97., 98., 99., 100., 101., 102., 103., 104., 105., 106., 107.,
108.],
[109., 110., 111., 112., 113., 114., 115., 116., 117., 118., 119.,
120.],
[121., 122., 123., 124., 125., 126., 127., 128., 129., 130., 131.,
132.],
[133., 134., 135., 136., 137., 138., 139., 140., 141., 142., 143.,
144.]],
[[145., 146., 147., 148., 149., 150., 151., 152., 153., 154., 155.,
156.],
[157., 158., 159., 160., 161., 162., 163., 164., 165., 166., 167.,
168.],
[169., 170., 171., 172., 173., 174., 175., 176., 177., 178., 179.,
180.],
[181., 182., 183., 184., 185., 186., 187., 188., 189., 190., 191.,
192.],
[193., 194., 195., 196., 197., 198., 199., 200., 201., 202., 203.,
204.],
[205., 206., 207., 208., 209., 210., 211., 212., 213., 214., 215.,
216.],
[217., 218., 219., 220., 221., 222., 223., 224., 225., 226., 227.,
228.],
[229., 230., 231., 232., 233., 234., 235., 236., 237., 238., 239.,
240.],
[241., 242., 243., 244., 245., 246., 247., 248., 249., 250., 251.,
252.],
[253., 254., 255., 256., 257., 258., 259., 260., 261., 262., 263.,
264.],
[265., 266., 267., 268., 269., 270., 271., 272., 273., 274., 275.,
276.],
[277., 278., 279., 280., 281., 282., 283., 284., 285., 286., 287.,
288.]]]])
*****************************
torch.Size([1, 72, 36])
tensor([[[ 0., 0., 0., ..., 101., 103., 105.],
[ 0., 0., 0., ..., 102., 104., 106.],
[ 0., 0., 0., ..., 103., 105., 107.],
...,
[182., 184., 186., ..., 0., 0., 0.],
[183., 185., 187., ..., 0., 0., 0.],
[184., 186., 188., ..., 0., 0., 0.]]])
tensor([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 1., 2., 3., 4., 0., 0., 13., 14., 15., 16.,
0., 0., 25., 26., 27., 28., 0., 0., 37., 38., 39., 40.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 145., 146., 147., 148., 0., 0., 157., 158., 159., 160.,
0., 0., 169., 170., 171., 172., 0., 0., 181., 182., 183., 184.])