Универсальная функция загрузчика для набора данных MS COCO Style - PullRequest
0 голосов
/ 06 июня 2018

Я работаю с Mask-RCNN и хочу обучить свой собственный набор данных в кокосовом стиле с несколькими категориями.Для начала у меня есть только 2 класса (кроме фона).

Хотя Mask-RCNN поставляется с образцом набора данных, они либо содержат только один класс, либо сами генерируют данные, что делает невозможным для меняпонять, как загрузить аннотированные изображения и начать обучение.Я проводил много времени в функциях Python, но продолжал получать ошибки, такие как:

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

, что оставляло меня в значительной степени невежественным.

Текущий загрузчик, который у меня есть (чтобы загрузить мойнабор данных в стиле кокоса) следующий (из загрузчика кокоса в репозитории Mask R-CNN)

 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)))

, который, естественно, ничего не загружает.

Может ли кто-нибудь помочь мне написать функцию-загрузчик, которая может использоваться во всех видах наборов данных в стиле кокосов, независимо от номера класса?

Вот моя структура набора данных в кокосовом стиле:

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

1 Ответ

0 голосов
/ 08 июня 2018

Хорошо, я понял это.Есть файл, который я нашел здесь , показывающий общий способ загрузки набора данных в кокосовом стиле и заставить его работать.

Конечно, если вы хотите сделать это, вам нужно немного изменить переменные, так как изначально он был разработан для набора данных "shape".Таким образом, вы переименовываете все, что имеет «формы», в любое имя вашего набора данных.

НЕ пытайтесь изменить функции и способ их работы.Не пытайтесь скопировать что-то еще в этот код, вся структура является цепной, и если вы что-то измените в функции (с точки зрения потока), вы не сможете запустить код.

...