当我用YOLACT运行train.py时,出现错误KeyError:0

时间:2020-10-19 01:38:46

标签: python pytorch

我是机器学习和编程的新手。 现在,我正在尝试使用自己的数据来开发YOLACT AI。 但是,当我运行train.py时,出现以下错误,无法学习。 我该怎么做才能克服此错误?`

(yolact) tmori@tmori-Lenovo-Legion-Y740-15IRHg:~/yolact$ python train.py --config=can_config  --save_interval=2000

    loading annotations into memory...
    Done (t=0.00s)
    creating index...
    index created!
    loading annotations into memory...
    Done (t=0.00s)
    creating index...
    index created!
    Initializing weights...
    Begin training!
    
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    [  0]       0 || B: 4.840 | C: 16.249 | M: 4.682 | S: 2.749 | T: 28.521 || ETA: 9:18:44 || timer: 3.352
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    [  1]      10 || B: 4.535 | C: 9.228 | M: 4.379 | S: 1.867 | T: 20.008 || ETA: 3:25:24 || timer: 0.864
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    /home/tmori/yolact/utils/augmentations.py:309: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      mode = random.choice(self.sample_options)
    
    Computing validation mAP (this may take a while)...
    
    Traceback (most recent call last):
      File "train.py", line 504, in <module>
        train()
      File "train.py", line 371, in train
        compute_validation_map(epoch, iteration, yolact_net, val_dataset, log if args.log else None)
      File "train.py", line 492, in compute_validation_map
        val_info = eval_script.evaluate(yolact_net, dataset, train_mode=True)
      File "/home/tmori/yolact/eval.py", line 956, in evaluate
        prep_metrics(ap_data, preds, img, gt, gt_masks, h, w, num_crowd, dataset.ids[image_idx], detections)
      File "/home/tmori/yolact/eval.py", line 427, in prep_metrics
        detections.add_bbox(image_id, classes[i], boxes[i,:],   box_scores[i])
      File "/home/tmori/yolact/eval.py", line 315, in add_bbox
        'category_id': get_coco_cat(int(category_id)),
      File "/home/tmori/yolact/eval.py", line 293, in get_coco_cat
        return coco_cats[transformed_cat_id]
    KeyError: 0

我正在尝试开发一种能找到罐子并将其细分的AI。 首先,我仅用labelme注释了一个“ can”项,然后使用labelme2coco.py创建了一个COCO格式的json文件。 之后,我根据YOLACT的GitHub上的“自定义数据集”修改了config.py并运行了train.py。

我的开发环境如下。 作业系统:Ubuntu20.04LTS 水蟒:4.8.3 的Python:3.6.12 火炬:1.4.0 CUDA工具包:10.1 cuDNN:7.6.5

1 个答案:

答案 0 :(得分:0)

annotations.json中的类ID应该从1开始而不是0。如果它们是从0开始,请在config.py中的标签映射“ my_custom_dataset”中尝试添加此

'label_map': { 0:  1, 1:  2, 2:  3... and so on}

在这种情况下,共有3个班级!

在相同脚本num_classes中的yolact_base_config中,也应比您的类数大1,例如,在这种情况下,它应为4。