Python 如何在PyTorch中加载带有多个JSON注释的图像
我想知道如何使用PyTorch中的数据加载器来实现我的自定义文件结构。我已经阅读了PyTorch文档,但所有这些都是带有类的单独文件夹 我的文件夹结构由2个文件夹(称为培训和验证)组成,每个文件夹有2个子文件夹(称为图像和json注释)。“images”文件夹中的每个图像都有多个对象(如汽车、自行车、人等),每个图像都有注释,并有单独的JSON文件。遵循标准coco注释。我的目的是制作一个神经网络,可以对视频进行实时分类 编辑1: 我已经按照法比奥·佩雷斯的建议完成了编码Python 如何在PyTorch中加载带有多个JSON注释的图像,python,python-3.x,opencv,deep-learning,pytorch,Python,Python 3.x,Opencv,Deep Learning,Pytorch,我想知道如何使用PyTorch中的数据加载器来实现我的自定义文件结构。我已经阅读了PyTorch文档,但所有这些都是带有类的单独文件夹 我的文件夹结构由2个文件夹(称为培训和验证)组成,每个文件夹有2个子文件夹(称为图像和json注释)。“images”文件夹中的每个图像都有多个对象(如汽车、自行车、人等),每个图像都有注释,并有单独的JSON文件。遵循标准coco注释。我的目的是制作一个神经网络,可以对视频进行实时分类 编辑1: 我已经按照法比奥·佩雷斯的建议完成了编码 class lDa
class lDataSet(data.Dataset):
def __init__(self, path_to_imgs, path_to_json):
self.path_to_imgs = path_to_imgs
self.path_to_json = path_to_json
self.img_ids = os.listdir(path_to_imgs)
def __getitem__(self, idx):
img_id = self.img_ids[idx]
img_id = os.path.splitext(img_id)[0]
img = cv2.imread(os.path.join(self.path_to_imgs, img_id + ".jpg"))
load_json = json.load(open(os.path.join(self.path_to_json, img_id + ".json")))
#n = len(load_json)
#bboxes = load_json['annotation'][n]['segmentation']
return img, load_json
def __len__(self):
return len(self.image_ids)
当我尝试这个的时候
l_data = lDataSet(path_to_imgs = '/home/training/images', path_to_json = '/home/training/json_annotations')
我用l_data[][0]获取l_数据,用json获取l_数据。现在我很困惑。我将如何将其与PyTorch中可用的微调示例一起使用?在该示例中,dataset和dataloader的操作如下所示。您应该能够使用实现自己的数据集。您只需要实现
\uuu len\uuu
和\uu getitem\uu
方法
在您的情况下,您可以迭代图像文件夹中的所有图像(然后您可以将图像ID存储在数据集中的列表中)。然后,使用传递到\uuuu getitem\uuu
的索引来获取相应的图像id。使用此图像id,您可以读取相应的JSON文件并返回所需的目标数据
大概是这样的:
class YourDataLoader(data.Dataset):
def __init__(self, path_to_imgs, path_to_json):
self.path_to_imags = path_to_imgs
self.path_to_json = path_to_json
self.image_ids = iterate_through_images(path_to_images)
def __getitem__(self, idx):
img_id = self.image_ids[idx]
img = load_image(os.path.join(self.path_to_images, img_id)
bboxes = load_bboxes(os.path.join(self.path_to_json, img_id)
return img, bboxes
def __len__(self):
return len(self.image_ids)
在遍历图像中
可以获得目录中图像的所有ID(例如文件名)。
在load_bboxes
中,您可以阅读JSON并获得所需的信息
如果您想要引用,我有一个JSON加载器实现。您应该能够使用实现自己的数据集。您只需要实现\uuu len\uuu
和\uu getitem\uu
方法
在您的情况下,您可以迭代图像文件夹中的所有图像(然后您可以将图像ID存储在数据集中的列表中)。然后,使用传递到\uuuu getitem\uuu
的索引来获取相应的图像id。使用此图像id,您可以读取相应的JSON文件并返回所需的目标数据
大概是这样的:
class YourDataLoader(data.Dataset):
def __init__(self, path_to_imgs, path_to_json):
self.path_to_imags = path_to_imgs
self.path_to_json = path_to_json
self.image_ids = iterate_through_images(path_to_images)
def __getitem__(self, idx):
img_id = self.image_ids[idx]
img = load_image(os.path.join(self.path_to_images, img_id)
bboxes = load_bboxes(os.path.join(self.path_to_json, img_id)
return img, bboxes
def __len__(self):
return len(self.image_ids)
在遍历图像中
可以获得目录中图像的所有ID(例如文件名)。
在load_bboxes
中,您可以阅读JSON并获得所需的信息
如果您需要参考,我有一个JSON加载程序实现。我已经阅读了您的代码,这是一个很大的帮助。我是一个初学者,我仍然很困惑。我把它们作为编辑1。请帮助您尝试使用分类网络来训练目标探测器。请参考一些物体探测器教程。我已经阅读了你的代码,这是一个很大的帮助。我是一个初学者,我仍然很困惑。我把它们作为编辑1。请帮助您尝试使用分类网络来训练目标探测器。请参考一些对象检测器教程。