longcw / faster_rcnn_pytorch

Faster RCNN with PyTorch
MIT License
1.7k stars 466 forks source link

the given numpy array has zero-sized dimensions. #46

Open luhc15 opened 6 years ago

luhc15 commented 6 years ago

File "/home/luhongchao/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.py", line 224, in call result = self.forward(*input, **kwargs) File "/home/luhongchao/pytorch/faster_rcnn_pytorch/faster_rcnn/faster_rcnn.py", line 71, in forward cfg_key, self._feat_stride, self.anchor_scales) File "/home/luhongchao/pytorch/faster_rcnn_pytorch/faster_rcnn/faster_rcnn.py", line 123, in proposal_layer x = network.np_to_variable(x, is_cuda=True) File "/home/luhongchao/pytorch/faster_rcnn_pytorch/faster_rcnn/network.py", line 86, in np_to_variable v = Variable(torch.from_numpy(x).type(dtype)) RuntimeError: the given numpy array has zero-sized dimensions. Zero-sized dimensions are not supported in PyTorch

Is there anyone got this problem ? how should I solve this

ymchen7 commented 6 years ago

I have encountered the same problem and I guess it's because your annotation or other stuff are empty. The pytorch can't handle e.g. 01010 tensor while numpy.ndarray does.

mtroym commented 5 years ago

I found the in the datasets/pascal_voc.py has bugs, if your annotation has ymin or xmin is 0, the loaded annotation would be 65535 which is out of range of width and height, make sure the loaded data to be positive! From my experiment, modified the datasets/pascal_voc.py line near line ~220 change the code by this.

x1 = max(float(bbox.find('xmin').text) - 1, 0)
y1 = max(float(bbox.find('ymin').text) - 1, 0)
x2 = max(float(bbox.find('xmax').text) - 1, 0)
y2 = max(float(bbox.find('ymax').text) - 1, 0)

which solved this issue. 👍