Этот код Я обнаружил, что имеет нейронную сеть, которая настроена на получение черно-белых изображений.(Это сиамская сеть, но эта часть не актуальна).Когда я изменяю его, чтобы взять мои изображения, а НЕ конвертировать их в черно-белое, я получаю ошибку, показанную ниже.
Я попытался изменить первый Conv2d, шестую строку, с 1 на 3
class SiameseNetwork(nn.Module):
def __init__(self):
super(SiameseNetwork, self).__init__()
self.cnn1 = nn.Sequential(
nn.ReflectionPad2d(1),
# was nn.Conv2d(1, 4, kernel_size=3),
nn.Conv2d(3, 4, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(4),
nn.ReflectionPad2d(1),
nn.Conv2d(4, 8, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(8),
nn.ReflectionPad2d(1),
nn.Conv2d(8, 8, kernel_size=3),
nn.ReLU(inplace=True),
nn.BatchNorm2d(8))
self.fc1 = nn.Sequential(
nn.Linear(8*300*300, 500),
nn.ReLU(inplace=True),
nn.Linear(500, 500),
nn.ReLU(inplace=True),
nn.Linear(500, 5))
def forward_once(self, x):
output = self.cnn1(x)
output = output.view(output.size()[0], -1)
output = self.fc1(output)
return output
def forward(self, input1, input2):
output1 = self.forward_once(input1)
output2 = self.forward_once(input2)
return output1, output2
Моя ошибка, когда изображения НЕ конвертируются в черно-белые и остаются цветными.
RuntimeError: invalid argument 0: Sizes of tensors must match
except in dimension 0. Got 3 and 1 in dimension 1 at
/opt/conda/conda-bld/pytorch-nightly_1542963753679/work/aten/src/TH/generic/THTensorMoreMath.cpp:1319
Я проверил формы изображений как массивы (прямо перед тем, как они войдут в модель), как черно-белые и цветные ...
B & W
torch.Size([1, 1, 300, 300])
Цвет
torch.Size([1, 3, 300, 300])
Вот ссылка на Блокнот Jupyter со всем исходным кодом, с которым я работаю ... https://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch/blob/master/Siamese-networks-medium.ipynb
РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ: Мне показалось,решил эту проблему путем преобразования изображений в RBG в части кода SiameseNetworkDataset
img0 = img0.convert("L")
, измененной на
img0 = img0.convert("RGB")
Я только что закомментировал строку раньше и подумал, что это оставило ее вRGB, но это было что-то еще, что модель не поняла.Кроме того, необходимо было изменить OP.
nn.Conv2d(1, 4, kernel_size=3),
изменено на
nn.Conv2d(3, 4, kernel_size=3),
Если вы хотите ответить с объяснением того, что делает модель, которая прояснит этоЯ дам тебе зеленый чек.Не очень понимаю nn.Conv2d