Key Error cause the dataset creation fails and leads to a "'COCODataset' object has no attribute 'cache'" error
haaddii opened this issue · comments
File "C:\Users\whatever\train.py", line 139, in <module>
launch(
└ <function launch at 0x00000135B6027A60>
> File "C:\Users\whatever\yolox\core\launch.py", line 98, in launch
main_func(*args)
│ └ (╒═══════════════════╤═══════════════════════════════════════════════════════════════════════════════════════════════════════...
└ <function main at 0x00000135B6000DC0>
File "C:\Users\whatever\train.py", line 118, in main
trainer.train()
│ └ <function Trainer.train at 0x00000135B6034F70>
└ <yolox.core.trainer.Trainer object at 0x00000135B649FAF0>
File "C:\Users\whatever\yolox\core\trainer.py", line 74, in train
self.before_train()
│ └ <function Trainer.before_train at 0x00000135B64A2DC0>
└ <yolox.core.trainer.Trainer object at 0x00000135B649FAF0>
File "C:\Users\whatever\yolox\core\trainer.py", line 149, in before_train
self.train_loader = self.exp.get_data_loader(
│ │ │ └ <function Exp.get_data_loader at 0x000001358E0CF550>
│ │ └ ╒═══════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════...
│ └ <yolox.core.trainer.Trainer object at 0x00000135B649FAF0>
└ <yolox.core.trainer.Trainer object at 0x00000135B649FAF0>
File "C:\Users\whatever\yolox\exp\yolox_base.py", line 181, in get_data_loader
self.dataset = self.get_dataset(cache=False, cache_type=cache_img)
│ │ │ │ └ None
│ │ │ └ <function Exp.get_dataset at 0x000001358E0CF4C0>
│ │ └ ╒═══════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════...
│ └ None
└ ╒═══════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════...
File "C:\Users\whatever\yolox\exp\yolox_base.py", line 142, in get_dataset
return COCODataset(
└ <class 'yolox.data.datasets.coco.COCODataset'>
File "C:\Users\whatever\yolox\data\datasets\coco.py", line 73, in __init__
self.annotations = self._load_coco_annotations()
│ │ └ <function COCODataset._load_coco_annotations at 0x000001358E06F550>
│ └ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
└ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
File "C:\Users\whatever\yolox\data\datasets\coco.py", line 90, in _load_coco_annotations
return [self.load_anno_from_ids(_ids) for _ids in self.ids]
│ │ │ └ ['2944454546995814400', '2944454547067117568', '2944454547067117569', '2944454547146809344', '2944454547146809345', '29444545...
│ │ └ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
│ └ <function COCODataset.load_anno_from_ids at 0x000001358E06F5E0>
└ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
File "C:\Users\whatever\yolox\data\datasets\coco.py", line 90, in <listcomp>
return [self.load_anno_from_ids(_ids) for _ids in self.ids]
│ │ │ │ │ └ ['2944454546995814400', '2944454547067117568', '2944454547067117569', '2944454547146809344', '2944454547146809345', '29444545...
│ │ │ │ └ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
│ │ │ └ '2944454546995814400'
│ │ └ '2944454546995814400'
│ └ <function COCODataset.load_anno_from_ids at 0x000001358E06F5E0>
└ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
File "C:\Users\whatever\yolox\data\datasets\coco.py", line 93, in load_anno_from_ids
im_ann = self.coco.loadImgs(id_)[0]
│ │ │ └ '2944454546995814400'
│ │ └ <function COCO.loadImgs at 0x000001358E0561F0>
│ └ <pycocotools.coco.COCO object at 0x00000135BCEBF280>
└ <yolox.data.datasets.coco.COCODataset object at 0x00000135BCEBF5E0>
File "C:\Users\username\.conda\envs\YoloX\lib\site-packages\pycocotools\coco.py", line 227, in loadImgs
return [self.imgs[id] for id in ids]
│ │ └ '2944454546995814400'
│ └ {'2944454546995814400': {'file_name': '2944454546995814400.jpg', 'height': 341, 'width': 256, 'id': '2944454546995814400'}, '...
└ <pycocotools.coco.COCO object at 0x00000135BCEBF280>
File "C:\Users\username\.conda\envs\YoloX\lib\site-packages\pycocotools\coco.py", line 227, in <listcomp>
return [self.imgs[id] for id in ids]
│ │ │ └ '2'
│ │ └ '2'
│ └ {'2944454546995814400': {'file_name': '2944454546995814400.jpg', 'height': 341, 'width': 256, 'id': '2944454546995814400'}, '...
└ <pycocotools.coco.COCO object at 0x00000135BCEBF280>
KeyError: '2'
Exception ignored in: <function CacheDataset.__del__ at 0x000001358E06F160>
Traceback (most recent call last):
File "C:\Users\whatever\yolox\data\datasets\datasets_wrapper.py", line 177, in __del__
if self.cache and self.cache_type == "ram":
AttributeError: 'COCODataset' object has no attribute 'cache'
It seems like it had already grab the right picture id but somehow in <listcomp>
(when creating a new list with new id?) it threw out a KeyError.
So pycocotools only support a dataset with sorted ids like from one to thousand?
Update, solved after correct the image_id to ints