Я провожу эксперимент с использованием изображений лиц в платформе PyTorch.Входными данными x является заданное изображение лица размером 5 * 5 (высота * ширина), и имеется 192 канала.
Цель: получить исправления x для patch_size (заданные в качестве аргумента).
Я получил требуемый результат с помощью двух циклов for.Но я хочу лучше векторизованное решение, чтобы стоимость вычислений была намного меньше, чем использование двух циклов for.
Используется: PyTorch 0.4.1, (12 ГБ) Nvidia TitanX GPU.
Ниже приведена моя реализация с использованием двух циклов for
def extractpatches( x, patch_size): # x is bsx192x5x5
patches = x.unfold( 2, patch_size , 1).unfold(3,patch_size,1)
bs,c,pi,pj, _, _ = patches.size() #bs,192,
cnt = 0
p = torch.empty((bs,pi*pj,c,patch_size,patch_size)).to(device)
s = torch.empty((bs,pi*pj, c*patch_size*patch_size)).to(device)
//Want a vectorized method instead of two for loops below
for i in range(pi):
for j in range(pj):
p[:,cnt,:,:,:] = patches[:,:,i,j,:,:]
s[:,cnt,:] = p[:,cnt,:,:,:].view(-1,c*patch_size*patch_size)
cnt = cnt+1
return s
Заранее спасибо за помощь.