Реализую проект компьютерного зрения. В этом проекте я использовал FPN (с магистральной сетью ResNet50) и BayesianFPN. Эта сеть находится под управлением агента обучения с подкреплением. При реализации мне выдается
RuntimeError: The size of tensor a (64) must match the size of tensor b (256) at non-singleton dimension 3
Что заставило код выдать эту ошибку?
Это из-за несоответствия обучающего изображения (изображение RGB ) и проверочное изображение (двоичная маска)?
Есть ли какое-то внутреннее изменение размера, которое мне не хватает?
Ниже это код. Я хочу реализовать класс BayesianFPNwithRL.
Я попробовал изменить форму тензора весов. Это не сработало. Даже при разжатии или расширении этого эффекта не произошло. ДЛЯ СПРАВКИ:
Реализую проект компьютерного зрения. В этом проекте я использовал FPN (с магистральной сетью ResNet50) и [b]BayesianFPN[/b]. Эта сеть находится под управлением агента обучения с подкреплением. При реализации мне выдается [code]RuntimeError: The size of tensor a (64) must match the size of tensor b (256) at non-singleton dimension 3 [/code] [list] [*]Что заставило код выдать эту ошибку? [*]Это из-за несоответствия обучающего изображения (изображение RGB ) и проверочное изображение (двоичная маска)? [*]Есть ли какое-то внутреннее изменение размера, которое мне не хватает? [/list] Ниже это код. Я хочу реализовать класс BayesianFPNwithRL. Я попробовал изменить форму тензора весов. Это не сработало. Даже при разжатии или расширении этого эффекта не произошло. [b]ДЛЯ СПРАВКИ:[/b] [list] [*]Размеры изображения RGB – 1280x720 пикселей; [*]Размеры двоичной маски: 1280x720 пикселей. [/list] [code]# Bayesian FPN with RL class BayesianFPNWithRL(nn.Module): def __init__(self, backbone_with_fpn, rl_agent, dropout_p=0.2): super(BayesianFPNWithRL, self).__init__() self.backbone_with_fpn = backbone_with_fpn self.dropout = nn.Dropout(p=dropout_p) self.rl_agent = rl_agent
fpn_outputs = self.backbone_with_fpn(x) keys = list(fpn_outputs.keys()) features = [fpn_outputs[key] for key in keys]
common_size = features[0].shape[2:] features = [F.interpolate(f, size=common_size, mode="nearest") for f in features]
if not self.training: sampled_features = [] for _ in range(mc_samples): sampled_features.append([self.dropout(f) for f in features]) features = [ torch.mean(torch.stack([sample[i] for sample in sampled_features]), dim=0) for i in range(len(features)) ]
global_features = [f.mean(dim=(2, 3)) for f in features] rl_input = torch.cat(global_features, dim=1)