Megvii-BaseDetection / YOLOX

YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5 with MegEngine, ONNX, TensorRT, ncnn, and OpenVINO supported. Documentation: https://yolox.readthedocs.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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