Я адаптировал предыдущую программу обнаружения объектов 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.