Torchlib C Conv2D работает не так, как предполагалось

#pytorch #libtorch

Вопрос:

У меня есть ядро размера [3,3] и изображение размера [B, 3, H, W]

Я хочу применить одно и то же ядро параллельно через эти 3 канала. Они не обмениваются данными по каналам

Это мой код

   auto module = torch::nn::Conv2d(
    torch::nn::Conv2dOptions(3, 3, {3, 3}).padding(1).bias(false));
  module->weight = kernel.unsqueeze(0) 
                     .unsqueeze(0)
                     .repeat({1, 3, 1, 1})
                     .to(in_image.device());

  return module(in_image);
 

Размер выходного сигнала составляет [1, 1, Ч, Вт]

Но тот же код реализован на Python

     conv = torch.nn.Conv2d(in_channels=3, out_channels=3, groups=1, kernel_size= (3,3), padding=3//2, bias=False)
    conv.weights = x_kernel.unsqueeze(0).unsqueeze(0).repeat(1,3,1,1)
    out = conv(rgb_image)
 

Это дает [1, 3, Ч, Ш]. Что это дает?

Комментарии:

1. Можете ли вы привести фиктивные примеры для kernel , x_kernel , in_image и rgb_image ? Чтобы нам было легче воспроизвести проблему ?