Я пытаюсь передать 5-мерный тензор (после извлечения элементов из экстрактора пользовательских функций) в качестве входных данных в более быструю сеть RCNN для обучения модели обнаружения объектов. Тем не менее, я сталкиваюсь с ошибкой в нормализации ввода. Мой код выглядит следующим образом:
num_classes = 5
model = fasterrcnn_resnet50_fpn(pretrained=False)
in_features = model.roi_heads.box_predictor.cls_score.in_features
model.backbone.body.conv1 = Conv2d(5, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) # to account for 5 image
model.roi_heads.box_predictor = FastRCNNPredictor(in_features,num_classes)
# For testing to see if the input is accepted by the network
img = torch.randn([1,5,100,200])
model.eval()
output = model(img)
Я получаю следующую ошибку:
Traceback (most recent call last):
File "temp.py", line 28, in <module>
output = model(img)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__
result = self.forward(*input, **kwargs)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/generalized_rcnn.py", line 47, in forward
images, targets = self.transform(images, targets)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__
result = self.forward(*input, **kwargs)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/transform.py", line 40, in forward
image = self.normalize(image)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/transform.py", line 55, in normalize
return (image - mean[:, None, None]) / std[:, None, None]
RuntimeError: The size of tensor a (5) must match the size of tensor b (3) at non-singleton dimension 0
Я могу понять, что это из-за моего размера ввода 5 вместо 3. Итак, Я пошел дальше и изменил код в функции transform.py (строка 55) следующим образом:
return (image - mean[:, None, None,None, None]) / std[:, None, None,None, None]
Это вызвало еще одну ошибку
File "temp.py", line 28, in <module>
output = model(img)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__
result = self.forward(*input, **kwargs)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/generalized_rcnn.py", line 47, in forward
images, targets = self.transform(images, targets)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torch/nn/modules/module.py", line 547, in __call__
result = self.forward(*input, **kwargs)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/transform.py", line 41, in forward
image, target = self.resize(image, target)
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torchvision/models/detection/transform.py", line 70, in resize
image[None], scale_factor=scale_factor, mode='bilinear', align_corners=False)[0]
File "/home/jitesh/anaconda3/envs/pytorch_test_env/lib/python3.7/site-packages/torch/nn/functional.py", line 2517, in interpolate
" (got {})".format(input.dim(), mode))
NotImplementedError: Input Error: Only 3D, 4D and 5D input Tensors supported (got 6D) for the modes: nearest | linear | bilinear | bicubic | trilinear (got bilinear)
Есть ли обходной путь для этого? Или это нормально, если я раскомментирую часть кода image = self.normalize(image)
в transform.py, так как на самом деле это не изображение, а функция, которая была извлечена?