Deteron2 обучающая ошибка ключа
Я пытаюсь обучить свой собственный набор данных COCO с помощью detectron2, однако, когда я начинаю собственное обучение, я сталкиваюсь с ключевой ошибкой
KeyError: 'category_id
error code : https://stackru.com/images/b0ddce94bbb7e9f5782395330fc79b179afb5da2.png
//this is the code i am training with
from detectron2.engine import DefaultTrainer
from detectron2.config import get_cfg
import os
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-
InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("coco_train_new",)
cfg.DATASETS.TEST = ()
cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.00025 # pick a good LR
cfg.SOLVER.MAX_ITER = 1000 # 300 iterations seems good enough for this toy dataset; you may need to train longer for a practical dataset
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 512 # faster, and good enough for this toy dataset (default: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # only has one class (ballon)
os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = DefaultTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()
поэтому я вернулся, чтобы проверить свой файл COCO json, однако файл json был выведен в стандартном формате COCO, любая идея, что может вызвать проблему
ps Я обучаю данные с помощью примера кода detectron2, поэтому думаю, что проблем быть не должно.
2 ответа
Я предполагаю (не глядя на ваш код конструкции json), что вам не хватает 'category_id' в аннотациях. вы можете следовать приведенным ниже инструкциям для одного класса.
# Main dict
dataset_dicts = {"images": [],
"type": "Balloon-detection",
"annotations": [],
"categories": []
}
# Adding categories. At the moment only for balloon.
category = {'supercategory': 'object', 'id': 1, 'name': 'balloon'}
dataset_dicts['categories'].append(category)
for <iterate for all images>:
....
....
for <iterate for all objects>:
....
....
# Save annotation
annotation = {
'image_id': index,
"bbox": [xmin, ymin, o_width, o_height],
"area": o_width*o_height,
"bbox_mode": BoxMode.XYWH_ABS,
"category_id": 1,
"iscrowd": 0,
'id': annotation_id
}
dataset_dicts['annotations'].append(annotation)
Надеюсь, у вас есть идея.
На всякий случай... другой способ сделать это - проверить, есть ли в вашем файле COCO Json пустая метка, удалить метку и повторно сохранить файл Json, и он будет работать.