chenyuntc / simple-faster-rcnn-pytorch

A simplified implemention of Faster R-CNN that replicate performance from origin paper
Other
3.98k stars 1.14k forks source link

input image with no bounding box #210

Open hank08tw opened 4 years ago

hank08tw commented 4 years ago

How to change the code to enable input image without bounding box in annotation? I face the following error:

Traceback (most recent call last): File "train.py", line 133, in fire.Fire() File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/fire/core.py", line 138, in Fire component_trace = _Fire(component, args, parsed_flag_args, context, name) File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/fire/core.py", line 468, in _Fire target=component.name) File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/fire/core.py", line 672, in CallAndUpdateTrace component = fn(*varargs, **kwargs) File "train.py", line 76, in train for ii, (img, bbox, label_, scale) in tqdm(enumerate(dataloader)): File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/tqdm/std.py", line 1133, in iter for obj in iterable: File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 363, in next data = self._next_data() File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 971, in _next_data return self._process_data(data) File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 1014, in _process_data data.reraise() File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/_utils.py", line 395, in reraise raise self.exc_type(msg) ValueError: Caught ValueError in DataLoader worker process 2. Original Traceback (most recent call last): File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/_utils/worker.py", line 185, in _worker_loop data = fetcher.fetch(index) File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/torch/utils/data/_utils/fetch.py", line 44, in data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/zhanshihan/simple-faster-rcnn-pytorch/data/dataset.py", line 107, in getitem ori_img, bbox, label, difficult = self.db.get_example(idx) File "/home/zhanshihan/simple-faster-rcnn-pytorch/data/voc_dataset.py", line 126, in get_example bbox = np.stack(bbox).astype(np.float32) File "<__array_function__ internals>", line 6, in stack File "/home/zhanshihan/miniconda3/envs/simplefasterrcnn/lib/python3.7/site-packages/numpy/core/shape_base.py", line 423, in stack raise ValueError('need at least one array to stack') ValueError: need at least one array to stack

BreezeHavana commented 4 years ago

I added following codes in voc_dataset.py, line 76, if there is no object in xml file, it won't be read: id_list_file = os.path.join( data_dir, 'ImageSets/Main/{0}.txt'.format(split)) id_listread = [id.strip() for id_ in open(id_list_file)] id_list = list() for i in id_list_read: obj = ET.parse(os.path.join(data_dir, 'Annotations', i + '.xml')) if obj.findall('object'): id_list.append(i) self.ids = id_list

hank08tw commented 4 years ago

Thanks for your help! But this piece of code ignores all images with no bbox on them. Is it possible to train on some images with no bbox as ground truth for fasterrcnn?