python - MS COCO 风格数据集的通用加载函数

标签 python deep-learning mscoco

我正在使用 Mask-RCNN 并希望训练我自己的几类 coco 风格的数据集。一开始,我只有 2 个类(除了背景)。

虽然 Mask-RCNN 带有样本数据集,但它们要么只包含一个类,要么自己生成数据,这让我无法理解如何加载带注释的图像并开始训练。我一直在 Python 函数上花费大量时间,但不断出现以下错误:

TypeError: list indices must be integers or slices, not str

这让我几乎一无所知。

我当前的加载器(用于加载我的 coco 样式数据集)如下(来自 Mask R-CNN 存储库中的 coco 加载器)

 def load_components(self, dataset_dir, subset, year=DEFAULT_DATASET_YEAR):

    coco = COCO("{}/annotations/instances_{}{}.json".format(dataset_dir, subset, year))
    if subset == "minival" or subset == "valminusminival":
        subset = "val"
    image_dir = "{}/{}{}".format(dataset_dir, subset, year)

    # Load all classes or a subset?
    class_ids = sorted(coco.getCatIds())

    # All images or a subset?
    image_ids = list(coco.imgs.keys())

    # Add classes
    for i in class_ids:
        self.add_class("coco", i, coco.loadCats(i)[0]["name"])

    # Add images
    for i in image_ids:
        self.add_image(
            "coco", image_id=i,
            path=os.path.join(image_dir, coco.imgs[i]['file_name']),
            width=coco.imgs[i]["width"],
            height=coco.imgs[i]["height"],
            annotations=coco.loadAnns(coco.getAnnIds(
                imgIds=[i], catIds=class_ids, iscrowd=None)))

自然不会加载任何东西。

谁能帮我写一个加载器函数,它可以用于各种 coco 风格的数据集,无论类号如何?

这是我的数据集结构,它是 cocoa 风格的:

components
│
└───train
│   │ 
│   └───annotations
│   │    │ <image_id>_<object_class_name>_<annotation_id>.png
│   │    │ ...
│   │   
│   └───<subset><year>
│   │    │   <image_id>.jpeg
│   │    │   ...  
│   └───  instances_components_train2018.json
└───val
    │ 
    └───annotations
    │    │ <image_id>_<object_class_name>_<annotation_id>.png
    │    │ ...
    │   
    └───<subset><year>
    │    │   <image_id>.jpeg
    │    │   ...
    │    │  
    └───  instances_components_val2018.json

编辑:完整追溯:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-5f1fb6581c25> in <module>()
      1 # Load dataset
      2 dataset = components.ComponentsDataset()
----> 3 dataset.load_components(DATASET_DIR, subset="train")
      4 
      5 # Must call before using the dataset

~/workspace/Mask_RCNN/samples/components/components.py in load_components(self, dataset_dir, subset)
     72         # Load all classes or a subset?
     73         class_ids = sorted(coco.getCatIds())
---> 74 
     75         # All images or a subset?
     76         image_ids = list(coco.imgs.keys())

~/workspace/Mask_RCNN/samples/components/components.py in <listcomp>(.0)
     72         # Load all classes or a subset?
     73         class_ids = sorted(coco.getCatIds())
---> 74 
     75         # All images or a subset?
     76         image_ids = list(coco.imgs.keys())

TypeError: list indices must be integers or slices, not str

最佳答案

好吧,我想通了。我找到了一个文件 here ,显示了加载 coco 样式数据集并使其工作的通用方法。

当然,如果你想这样做,你需要稍微修改变量,因为它最初是为“shapes”数据集设计的。因此,您将所有具有“形状”的内容重命名为您的数据集名称。

请勿尝试更改功能及其工作方式。不要试图将其他内容复制到该代码中,整个结构是一个链式结构,如果您更改函数中的某些内容(就流程而言),您可能无法让代码运行。

关于python - MS COCO 风格数据集的通用加载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722254/

相关文章:

javascript - 想要通过浏览器使静态 SVG 绘图(来自 matplotlib)具有交互性

python - 在 Python 解释器 : Explain behavior 中运行 Python 解释器

python - 哪种数据结构在 python 中保留顺序?

mscoco - 如何使用 MS COCO test-dev 数据集进行实例分割?

python - 类子集的 COCO api 评估

python - 加快 Pandas 中日期计算之间的时间?

optimization - 神经网络优化

image-processing - Caffe 支持 16 位图像吗?如果没有,如何实现支持?

Keras键盘中断停止训练?

python - "Error while extracting"来自 tensorflow 数据集