Набор данных Fx не принимает строку .xml. Необходимо преобразовать в диктовку - PullRequest
0 голосов
/ 24 октября 2019

Я адаптировал предыдущую программу обнаружения объектов Pytorch, программу сегментации для нового пользовательского набора изображений / классов. Программа Dataset.py принимает мои ограничивающие рамки .xml файлы в виде строки, которая должна быть целым числом. Единственный способ для этого - xml, чтобы продиктовать dtype. Я пробовал несколько библиотечных вызовов, таких как untangle и lxml.objectify. Я не думаю, что расположил их правильно, или они просто не работают.

Единственный способ для этого - xml, чтобы продиктовать dtype. Я пробовал несколько библиотечных вызовов, таких как untangle и lxml.objectify. Я не думаю, что разместил их правильно, или они просто не работают.

import torch
import torch.utils.data
import json
import glob
import os
from PIL import Image

from lxml import objectify
import untangle



class Dataset(torch.utils.data.Dataset):
    def __init__(self, path, transforms=None):
        self.path = path
        self.transforms = transforms
        # load all image files, sorting them to
        # ensure that they are aligned
        self.chips = sorted(glob.glob(os.path.join(path, '*.PNG')))
        self.metadata = sorted(glob.glob(os.path.join(path, '*.xml')))

    def __getitem__(self, idx):

        # load images ad masks
        chip_path = self.chips[idx]
        metadata_path = self.metadata[idx]
        image = Image.open(chip_path).convert("RGB")
        with open(metadata_path, 'r') as f:
            #metadata = json.load(f)
            metadata = f.read()


        num_objs = len(metadata["labels"])
        boxes = torch.as_tensor(metadata["boxes"], dtype=torch.float64)
        labels = torch.as_tensor(metadata["labels"], dtype=torch.int64)

        image_id = torch.tensor([idx])
        area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])
        iscrowd = torch.zeros((num_objs,), dtype=torch.int64)

        target = {}
        target["boxes"] = boxes
        target["labels"] = labels
        target["image_id"] = image_id
        target["area"] = area
        target["iscrowd"] = iscrowd

        if self.transforms is not None:
            image, target = self.transforms(image, target)

        return image, target

    def __len__(self):
        return len(self.chips)

TYPEERROR: строковые индексы должны быть целыми числами

Ошибка фокусируется на переменной num_objs.

...