J'essaie de calculer une image de gradient par canal dans PyTorch. Pour ce faire, je veux effectuer une convolution 2D standard avec un filtre de Sobel sur chaque canal d'une image. J'utilise la fonction torch.nn.functional.conv2d
pour cette fonction
Dans mon code d'exemple minimum fonctionnel ci-dessous, j'obtiens une erreur :
import torch
import torch.nn.functional as F
filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1)
RuntimeError : Étant donné groups=1, weight[1, 1, 3, 3], donc attendu input[1, 3, 10, 10] pour avoir 1 canaux, mais j'ai obtenu 3 canaux à la place.
Cela suggère que groups
doit être de 3. Cependant, lorsque je fais groups=3
j'obtiens une erreur différente :
import torch
import torch.nn.functional as F
filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1, groups=3)
RuntimeError : argument invalide 4 : o /usr/local/src/pytorch/torch/lib/TH/generic/THTensor.c:440
Lorsque je vérifie ce bout de code dans la classe THTensor, il fait référence à un ensemble de contrôles de dimension, mais je ne sais pas où je me trompe.
Que signifie cette erreur ? Comment puis-je effectuer la convolution que je souhaite réaliser avec cette conv2d
fonction ? Je crois que je comprends mal la groups
paramètre.