【mmdetection采坑记录】(一)将自己的数据转成COCO数据集的格式

在转成COCO数据集格式的过程中,最麻烦的是生成annotations中的文件。这个过程我交给了小可爱去做,结果小可爱在转的时候,annotations字段中的每个字段中的id均设置为0。也就是说所有的annotations的id都一样,这会出现什么错误呢?

在【mmdetection实践】构建自己的数据集中讲过,get_ann_info(self, idx)函数是负责在训练的时候加载img和label的,那么在CocoDataset中是怎么工作的呢,直接从代码里找答案:

class CocoDataset(CustomDataset):
    def get_ann_info(self, idx):
        img_id = self.img_infos[idx]['id']  # 根据在dataloader中的idx选取img_id
        ann_ids = self.coco.getAnnIds(imgIds=[img_id])  # 根据img_id找到该img对应的所有的annotations的id,储存在ann_ids中
        ann_info = self.coco.loadAnns(ann_ids)  # 根据ann_ids中annotations的id加载annotations
        return self._parse_ann_info(self.img_infos[idx], ann_info)

也就是说,所有annotations的id如果都为0,那么无论img_id是什么,对应的ann_id都是0,而在加载target时当然也会出错。

小可爱坑我+1次!!!

小可爱非要让我把锅推给自己,说是我给了8个1个图片和label,以至于小可爱没有发现这个问题!!!

你可能感兴趣的:(mmdetection)