Pytorch学习-利用Dataset类定义自己的数据集

定义自己的数据集类需要继承torch.utils.data中的Dataset类

主要实现两个方法,即__len__和__getitem__

from torch.utils.data import Dataset
class VOCDataSet(Dataset):#初始化def __init__(self):pass#返回数的长度def __len__(self):pass#返回样本和标签def __getitem__(self, idx):pass

以具体的例子进行演示

from torch.utils.data import Dataset
import os
import torch
import json
from PIL import Image
from lxml import etreeclass VOCDataSet(Dataset):"""读取解析PASCAL VOC2007/2012数据集"""def __init__(self, voc_root, year="2012", transforms=None, txt_name: str = "train.txt"):assert year in ["2007", "2012"], "year must be in ['2007', '2012']"# 增加容错能力if "VOCdevkit" in voc_root:self.root = os.path.join(voc_root, f"VOC{year}")else:self.root = os.path.join(voc_root, "VOCdevkit", f"VOC{year}")self.img_root = os.path.join(self.root, "JPEGImages")self.annotations_root = os.path.join(self.root, "Annotations")# read train.txt or val.txt filetxt_path = os.path.join(self.root, "ImageSets", "Main", txt_name)assert os.path.exists(txt_path), "not found {} file.".format(txt_name)with open(txt_path) as read:xml_list = [os.path.join(self.annotations_root, line.strip() + ".xml")for line in read.readlines() if len(line.strip()) > 0]self.xml_list = []# check filefor xml_path in xml_list:if os.path.exists(xml_path) is False:print(f"Warning: not found '{xml_path}', skip this annotation file.")continue# check for targetswith open(xml_path) as fid:xml_str = fid.read()xml = etree.fromstring(xml_str.encode("utf-8"))data = self.parse_xml_to_dict(xml)["annotation"]if "object" not in data:print(f"INFO: no objects in {xml_path}, skip this annotation file.")continueself.xml_list.append(xml_path)assert len(self.xml_list) > 0, "in '{}' file does not find any information.".format(txt_path)# read class_indictjson_file = './pascal_voc_classes.json'assert os.path.exists(json_file), "{} file not exist.".format(json_file)with open(json_file, 'r') as f:self.class_dict = json.load(f)self.transforms = transformsdef __len__(self):return len(self.xml_list)def __getitem__(self, idx):# read xmlxml_path = self.xml_list[idx]with open(xml_path) as fid:xml_str = fid.read()xml = etree.fromstring(xml_str.encode("utf-8"))data = self.parse_xml_to_dict(xml)["annotation"]img_path = os.path.join(self.img_root, data["filename"])image = Image.open(img_path)if image.format != "JPEG":raise ValueError("Image '{}' format not JPEG".format(img_path))boxes = []labels = []iscrowd = []assert "object" in data, "{} lack of object information.".format(xml_path)for obj in data["object"]:xmin = float(obj["bndbox"]["xmin"])xmax = float(obj["bndbox"]["xmax"])ymin = float(obj["bndbox"]["ymin"])ymax = float(obj["bndbox"]["ymax"])# 进一步检查数据,有的标注信息中可能有w或h为0的情况,这样的数据会导致计算回归loss为nanif xmax <= xmin or ymax <= ymin:print("Warning: in '{}' xml, there are some bbox w/h <=0".format(xml_path))continueboxes.append([xmin, ymin, xmax, ymax])labels.append(self.class_dict[obj["name"]])if "difficult" in obj:iscrowd.append(int(obj["difficult"]))else:iscrowd.append(0)# convert everything into a torch.Tensorboxes = torch.as_tensor(boxes, dtype=torch.float32)labels = torch.as_tensor(labels, dtype=torch.int64)iscrowd = torch.as_tensor(iscrowd, dtype=torch.int64)image_id = torch.tensor([idx])area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])target = {}target["boxes"] = boxestarget["labels"] = labelstarget["image_id"] = image_idtarget["area"] = areatarget["iscrowd"] = iscrowdif self.transforms is not None:image, target = self.transforms(image, target)return image, target

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

CMake配置安装gdal3.6.2库

安装GDAL 3.6.2库可以通过使用CMake来完成&#xff0c;尤其是在Windows平台上。这里我将提供一个详细的步骤指南&#xff0c;包括如何配置CMake以及如何使用它来构建和安装GDAL。前提是你已经安装了CMake和相应的编译器&#xff08;如Visual Studio或GCC&#xff09;。 ### 步骤…

联软安渡 UniNXG 安全数据交换系统 任意文件读取漏洞复现

0x01 产品简介 联软安渡UniNXG安全数据交换系统,是联软科技自研的业内融合网闸、网盘和DLP的一体机产品,它同时支持多网交换,查杀毒、审计审批、敏感内容识别等功能,是解决用户网络隔离、网间及网内数据传输、交换、共享/分享、存储的理想安全设备,具有开创性意义。 UniN…

什么是BI看板?选择BI看板制作工具时一定要考虑这些方面

BI看板也称为商业智能仪表板&#xff0c;是一种直观的数据可视化工具&#xff0c;它将关键业务指标&#xff08;KPIs&#xff09;和数据以图表、图形和表格的形式集中展示&#xff0c;使用户能够快速获取企业运营的实时概览。 这种数据可视化方式不仅使得复杂的数据信息易于理…

Python图嵌入信息潜在表征算法

&#x1f4dc;用例 &#x1f4dc;Python社群纽带关系谱和图神经 | &#x1f4dc;C和Python通信引文道路社评电商大规模行为图结构数据模型 | &#x1f4dc;角色图嵌入学习 | &#x1f4dc;图全局结构信息学习 | &#x1f4dc;图编码解码半监督学习 | &#x1f4dc;富文本表征学…

FPGA - Xilinx系列高速收发器---GTX

1&#xff0c;GTX是什么&#xff1f; GT &#xff1a;Gigabit Transceiver千兆比特收发器&#xff1b; GTX &#xff1a;Xilinx 7系列FPGA的高速串行收发器&#xff0c;硬核 xilinx的7系列FPGA根据不同的器件类型&#xff0c;集成了GTP、GTX、GTH、GTZ四种串行高速收发器&am…

(python)cryptography-安全的加密

前言 cryptography 是一个广泛使用的 Python 加密库&#xff0c;提供了各种加密、哈希和签名算法的实现。它支持多种加密算法&#xff0c;如 AES、RSA、ECC 等&#xff0c;以及哈希函数&#xff08;如 SHA-256、SHA-384 等&#xff09;和数字签名算法(如 DSA、ECDSA 等). 目录 …

pikachu靶场通关之csrf漏洞通关教程

目录 CSRF&#xff08;get型&#xff09; 1.打开网站&#xff0c;点击右上角提示 2.登录之后&#xff0c;点击修改个人信息 3.修改上述内容&#xff0c;打开抓包工具 4.抓到修改用户信息的数据包 5.构造虚假url&#xff0c;诱导用户点击 6.弹到修改后的界面 ​编辑 7.返…

前端已死? Bootstrap--CSS组件

目录 Bootstrap 下载 Bootstrap--全局CSS样式 栅格系统 栅格参数 正常显示 实例 代码演示: 排版 代码演示 表格 代码演示 表单 代码演示 等等...(文档很清晰了) Bootstrap--组件 结合演示:(页面) Bootstrap Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HT…

计算机视觉与深度学习实战:以Python为工具,基于小波的图像压缩技术

一、引言 在数字图像处理领域,图像压缩技术一直是一个热门且重要的话题。随着计算机视觉和深度学习技术的快速发展,图像压缩技术也在不断地进步和创新。本文将探讨如何使用Python这一强大的编程工具,结合深度学习技术和小波变换,实现高效的图像压缩。 二、计算机视觉与深度…

Ubuntu22.04 sudo pip 找不到命令解决方法

解决方法&#xff1a; &#xff08;1&#xff09;编辑/etc/sudoers&#xff1a; sudo vim /etc/sudoers 将Defaults env_reset修改为&#xff1a; Defaults !env_reset &#xff08;2&#xff09;编辑配置文件~/.bashrc&#xff1a; sudo vim ~/.bashrc 添加&#xff1a; a…

ps学习计划

将学习完成以下功能 1.更换证件照背景色 2.人像换装 3.人像去水印文字 4. P掉其中的一个人 去除无关的人 5.生活照扶正 6.瘦身 美白 去下巴 单眼皮变双眼皮 7.头发变颜色 8.竖图变横图技巧 9.帮小姐姐P裙子 10.人物头发变黑技巧 11.抠印章 一键抠图 12.抠图换背景 …

测试计划和管理:构建高质量软件的关键

目录 测试原则 测试计划 概述 过程 目标 策略 制定计划 范围分析和工作量估计 测试资源要求和进度管理 测试风险的控制 测试报告 测试管理工具 结论 测试是软件开发过程中的关键组成部分&#xff0c;确保了最终产品的质量和可靠性。有效的测试计划和管理对于确保测…

建筑乙级资质换证过程中的质量与安全保障

在建筑乙级资质换证过程中&#xff0c;确保质量与安全保障是至关重要的&#xff0c;它不仅关系到企业的声誉和长期发展&#xff0c;也直接关系到工程项目的成功实施和客户的满意度。以下是在换证过程中加强质量与安全保障的建议&#xff1a; 1. 明确质量与安全管理目标 在换证之…

Unreal Engine 4 简介

Unreal Engine 4&#xff08;虚幻引擎4&#xff09;是由Epic Games开发的一款强大而全面的游戏引擎。以下是关于Unreal Engine 4的简介&#xff1a; 开发目的&#xff1a;Unreal Engine 4最初是为了开发第一人称射击游戏而设计的&#xff0c;但随着时间的推移&#xff0c;它已…

Open AI再次定义AI PC?

从传统的文字交互&#xff0c;到语音和图像交互——Open AI再次提升了人们对AI PC的想象空间。 这种更贴近人类间交互的模式&#xff0c;会多大程度改变目前PC的生态&#xff1f; 随着苹果M4芯片、高通骁龙X的发布&#xff0c;AI PC也逐渐成为了市场热议的产品。 从各家PC厂…

Spring:SpringBoot Starter 工作原理详解

一、前言 通过使用Spring Boot Starter&#xff0c;开发人员可以避免手动查找和添加每个所需的库&#xff0c;从而大大简化了项目的依赖管理。这些starter不仅包含了库依赖&#xff0c;还可能包含自动配置&#xff0c;从而减少了开发人员需要编写的配置代码。 本文将分析Spring…

51单片机小车制造过程记录

首先感谢B站up主好家伙vcc的资料。 这次小车做出来虽然资料挺全的&#xff0c;但中间还是犯了很多不该犯的错误。 第一个&#xff0c;物料这次我们搞错了挺多&#xff0c;最离谱的应该是最小系统板都错了。 资料里用的stm32f103c8t6&#xff0c;我们开始买成了stm32f103c8t6。…

RHCE网络服务配置之循环执行的例行性工作

1、什么是循环执行的例行性工作 循环执行的例行性工作&#xff1a;每隔一定的周期就需要执行一次 2、crontab的工作过程 /etc/cron.allow&#xff0c;写在该文件的人可以使用crontab命令 /etc/cron.deny&#xff0c;黑名单 两个文件如果都不存在&#xff0c;只有root能使用…