Я читаю исходный код сиамской сети. Но я не могу понять, что происходит в коде взаимной корреляции. Код:
def xcorr(self, z, x):
"""
correlation layer as in the original SiamFC (convolution process in fact)
"""
batch_size_x, channel_x, w_x, h_x = x.shape
x = torch.reshape(x, (1, batch_size_x * channel_x, w_x, h_x))
# group convolution
out = F.conv2d(x, z, groups = batch_size_x)
batch_size_out, channel_out, w_out, h_out = out.shape
xcorr_out = torch.reshape(out, (channel_out, batch_size_out, w_out, h_out))
return xcorr_out
Полный исходный код
Я вижу, что xcorr можно выполнить с помощью операции conv. Но что за идея здесь делать два раза переделывать? (Два входа функции xcorr имеют одинаковый размер на # batch-size и #channel)