Модель PyTorch выдает IndexError: индекс 0 выходит за границы измерения 0 с размером 0 - PullRequest
0 голосов
/ 03 марта 2020

Я следовал следующему руководству на веб-сайте pytorch: https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html

Я обучил свою модель на базе данных глаз, чтобы обнаружить зрачка. Я сохраняю обученную модель и открываю ее для оценки. Проблема в том, что если на изображении нет глаз, модель будет красть sh.

. Для воспроизведения я сначала напечатал модель на рабочем изображении:

 [{'boxes': tensor([[126.9488, 112.5852, 141.5698, 127.4215]], device='cuda:0'), 'labels': tensor([1], device='cuda:0'), 'scores': tensor([1.0000], device='cuda:0'), 'masks': tensor([[[[0., 0., 0.,  ..., 0., 0., 0.],
          [0., 0., 0.,  ..., 0., 0., 0.],
          [0., 0., 0.,  ..., 0., 0., 0.],
          ...,
          [0., 0., 0.,  ..., 0., 0., 0.],
          [0., 0., 0.,  ..., 0., 0., 0.],
          [0., 0., 0.,  ..., 0., 0., 0.]]]], device='cuda:0')}]

Затем на картинка с закрытым глазом: (так что ничего не обнаружено)

[{'boxes': tensor([], device='cuda:0', size=(0, 4)), 'labels': tensor([], device='cuda:0', dtype=torch.int64), 'scores': tensor([], device='cuda:0'), 'masks': tensor([], device='cuda:0', size=(0, 1, 255, 255))}]

Последний должен выглядеть как первый.

Ошибка, которую я получаю, такова:

img1 = Image.fromarray(prediction[0]['masks'][0, 0].mul(255).byte().cpu().numpy())
IndexError: index 0 is out of bounds for dimension 0 with size 0

Я получаю, что пытаюсь достичь чего-то за пределами списка, но я не могу на самом деле инициировать список нулей предсказания, потому что это загруженная модель. Модель представляет собой файл .pt

Если вам нужно что-то еще, пожалуйста, скажите мне

С уважением

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете просто добавить чек на пустой тензор masks здесь (или проверить на boxes, labels, et c):

first_mask = prediction[0]['masks']
# check if no of elements in `masks` is zero
if first_mask.nelement() != 0:
    img1 = Image.fromarray(first_mask[0, 0].mul(255).byte().cpu().numpy())
...