使用 Mmdetection 从自定义 COCO 数据集中加载错误的“-1 背景”注释
Wrong "-1 background" annotations loaded from Custom COCO Dataset using Mmdetection
简介
我正在使用 Mmdetection 来训练使用自定义 COCO 数据集的可变形 DETR 模型。表示使用 COCO 注释格式的自定义数据集。该数据集使用与 COCO 相同的图像,但带有不同的“玩具”注释用于“游乐场”实验,注释文件是使用包 pycocotools 和 json 专门创建的。
我对这个 playground 数据集做了五种变体:2 个数据集有三个 类(类 1
、2
和 3
), 1 个数据集有 6 个 类(类 1
到 6
)和 2 个数据集有 7 个 类(类 1
到 7
).
问题
现在,在使用 mmdet.datasets.build_dataset
在 mmdetection 中创建数据集后,我使用以下代码检查是否一切正常:
from pycocotools.coco import COCO
from os import path as osp
from mmdet.datasets import build_dataset
cfg = start_config() # this is simply a function to startup the config file
ann_file = osp.join(cfg.data.train.data_root, cfg.data.train.ann_file)
coco = COCO(ann_file)
img_ids = coco.getImgIds()
ann_ids = coco.getAnnIds(imgIds=img_ids)
anns = coco.loadAnns(ids=ann_ids)
cats_counter = {}
for ann in anns:
if ann['category_id'] in cats_counter:
cats_counter[ann['category_id']]+=1
else:
cats_counter[ann['category_id']] = 1
print(cats_counter)
cats = {cat['id']:cat for cat in coco.loadCats(coco.getCatIds())}
for i in range(len(cats_counter)):
print("{} ({}) \t|\t{}".format(i, cats[i]['name'], cats_counter[i]))
ds = build_dataset(cfg.data.train)
print(ds)
对于其中三个数据集,来自 json 文件和构建的 mmdet 数据集的数量几乎完全相等。然而,对于 3-类 数据集之一和 6-类 数据集,结果非常不同,其中代码 returns 如下:
{3: 1843, 1: 659, 4: 1594, 2: 582, 0: 1421, 5: 498}
0 (1) | 1421
1 (2) | 659
2 (3) | 582
3 (4) | 1843
4 (5) | 1594
5 (6) | 498
loading annotations into memory...
Done (t=0.06s)
creating index...
index created!
CocoDataset Train dataset with number of images 1001, and instance counts:
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
| category | count | category | count | category | count | category | count | category | count |
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
| 0 [1] | 1421 | 1 [2] | 659 | 2 [3] | 581 | 3 [4] | 1843 | 4 [5] | 1594 |
| | | | | | | | | | |
| 5 [6] | 0 | -1 background | 45 | | | | | | |
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
和
{1: 1420, 0: 4131, 2: 1046}
0 (1) | 4131
1 (2) | 1420
2 (3) | 1046
loading annotations into memory...
Done (t=0.06s)
creating index...
index created!
CocoDataset Train dataset with number of images 1001, and instance counts:
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
| category | count | category | count | category | count | category | count | category | count |
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
| | | | | | | | | | |
| 0 [1] | 1419 | 1 [2] | 0 | 2 [3] | 0 | -1 background | 443 | | |
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
你可以看到注释json中没有“-1”id,而且3-类数据集中的一些类有0个注释,而 json 显然不止于此。有没有人使用 Mmdetection 遇到过类似的事情?是什么导致了这个问题?
注释文件中的 类 名称与 mmdetection 配置对象中的 类 名称不匹配。更正那些解决了问题。
简介
我正在使用 Mmdetection 来训练使用自定义 COCO 数据集的可变形 DETR 模型。表示使用 COCO 注释格式的自定义数据集。该数据集使用与 COCO 相同的图像,但带有不同的“玩具”注释用于“游乐场”实验,注释文件是使用包 pycocotools 和 json 专门创建的。
我对这个 playground 数据集做了五种变体:2 个数据集有三个 类(类 1
、2
和 3
), 1 个数据集有 6 个 类(类 1
到 6
)和 2 个数据集有 7 个 类(类 1
到 7
).
问题
现在,在使用 mmdet.datasets.build_dataset
在 mmdetection 中创建数据集后,我使用以下代码检查是否一切正常:
from pycocotools.coco import COCO
from os import path as osp
from mmdet.datasets import build_dataset
cfg = start_config() # this is simply a function to startup the config file
ann_file = osp.join(cfg.data.train.data_root, cfg.data.train.ann_file)
coco = COCO(ann_file)
img_ids = coco.getImgIds()
ann_ids = coco.getAnnIds(imgIds=img_ids)
anns = coco.loadAnns(ids=ann_ids)
cats_counter = {}
for ann in anns:
if ann['category_id'] in cats_counter:
cats_counter[ann['category_id']]+=1
else:
cats_counter[ann['category_id']] = 1
print(cats_counter)
cats = {cat['id']:cat for cat in coco.loadCats(coco.getCatIds())}
for i in range(len(cats_counter)):
print("{} ({}) \t|\t{}".format(i, cats[i]['name'], cats_counter[i]))
ds = build_dataset(cfg.data.train)
print(ds)
对于其中三个数据集,来自 json 文件和构建的 mmdet 数据集的数量几乎完全相等。然而,对于 3-类 数据集之一和 6-类 数据集,结果非常不同,其中代码 returns 如下:
{3: 1843, 1: 659, 4: 1594, 2: 582, 0: 1421, 5: 498}
0 (1) | 1421
1 (2) | 659
2 (3) | 582
3 (4) | 1843
4 (5) | 1594
5 (6) | 498
loading annotations into memory...
Done (t=0.06s)
creating index...
index created!
CocoDataset Train dataset with number of images 1001, and instance counts:
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
| category | count | category | count | category | count | category | count | category | count |
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
| 0 [1] | 1421 | 1 [2] | 659 | 2 [3] | 581 | 3 [4] | 1843 | 4 [5] | 1594 |
| | | | | | | | | | |
| 5 [6] | 0 | -1 background | 45 | | | | | | |
+---------------+-------+---------------+-------+---------------+-------+---------------+-------+---------------+-------+
和
{1: 1420, 0: 4131, 2: 1046}
0 (1) | 4131
1 (2) | 1420
2 (3) | 1046
loading annotations into memory...
Done (t=0.06s)
creating index...
index created!
CocoDataset Train dataset with number of images 1001, and instance counts:
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
| category | count | category | count | category | count | category | count | category | count |
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
| | | | | | | | | | |
| 0 [1] | 1419 | 1 [2] | 0 | 2 [3] | 0 | -1 background | 443 | | |
+----------+-------+------------+-------+----------+-------+---------------+-------+----------+-------+
你可以看到注释json中没有“-1”id,而且3-类数据集中的一些类有0个注释,而 json 显然不止于此。有没有人使用 Mmdetection 遇到过类似的事情?是什么导致了这个问题?
注释文件中的 类 名称与 mmdetection 配置对象中的 类 名称不匹配。更正那些解决了问题。