学习笔记||基础知识-Dataloader和PascalVOC数据集讲解

1.数据集加载方式
pytorch中提供了Dataset基本的数据类,并在torchvision中提供了较多数据变换函数,可以利用类和函数来处理加载数据集。
pytorch标准化数据处理过程可描述为:
1)继承Dataset类(读入一部分数据并对它们做一些变换)
2)增加数据变换
3)继承Dataloader(把数据中的一部分读取出来)
2.数据集加载过程
数据加载的具体过程主要分为3步:
1.1继承Dataset类
1.2数据变换与数据增强
1.3继承dataloader
详解如下:
1.1继承Dataset类
pytorch提供了torch.utils.data.Dataset这个抽象类用来处理数据集,在使用时只需要继承该类,并重写_len_()和_getitem_()函数。
比如:
在这里插入图片描述所以,在继承Dataset类时,只需按照上面的模板,修改_init_()和_len_()以及_getitem_()即可。
1.2数据变换与数据增强
这一步虽然将数据集加载到了实例中,但在实际应用时,数据集中的图片有可能存在大小不一的情况,并且原始图片像素RGB值比较大(0-255),这些都不利于神经网络的训练和收敛,因此还需要进行一些图像变换工作。PyTorch为此提供了torchvision.transforms工具包,可以方便的进行图像缩放、裁剪、随机翻转、填充及张量归一化等操作,操作对象是PIL的Image或者Tensor。
如果需要进行多个变换功能,可以利用transform.Compose将多个变换组合起来,并且在实际使用时,通常会将变换操作集成到Dataset的继承类中。
比如:
在这里插入图片描述
1.3继承dataloader
经过前两步可以获取每一个变换后的样本,但是仍然无法进行批量处理、随机选取等操作,还需要使用torch.utils.data.Dataloader类进一步封装,该类有四个参数,第一个参数是之前继承Dataset的实例,第二个参数是批量的大小,第三个参数是是否打乱数据,第四个参数是使用几个线程来加载数据。
在这里插入图片描述
最后是用一个iter()函数来进行一个迭代,以及使用next()函数去进行读取。
2.SSD模型加载VOC数据集实例
2.1前置知识文件 XML文件
xml文件是一种用于标记电子文件使其具有结构性的标记语言,用来传输和存储数据。
如:
下图是一个xml文件,其中包含标签说明和候选框的位置以及图像大小和通道。比如下图中所示图片大小为500333,通道数为3.里面包含火车(train)这个目标,姿态未知,候选框位置对角线坐标(46.11)(500.333)。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用 PyTorch 和 Pascal VOC 数据集进行训练的一些步骤: 1. 下载 Pascal VOC 数据集并解压缩。您可以从 http://host.robots.ox.ac.uk/pascal/VOC/ 下载数据集并按照指示解压缩。 2. 安装 PyTorch。您可以从 PyTorch 网站(https://pytorch.org/get-started/locally/)获取安装说明并安装 PyTorch。 3. 安装 torchvision。您可以使用以下命令安装 torchvision: ``` pip install torchvision ``` 4. 准备数据集。您需要将 Pascal VOC 数据集转换为 PyTorch 可以读取的格式。您可以使用以下代码: ``` from torchvision import datasets, transforms data_transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) train_dataset = datasets.VOCDetection(root='path/to/PascalVOC', year='2012', image_set='train', transform=data_transform) val_dataset = datasets.VOCDetection(root='path/to/PascalVOC', year='2012', image_set='val', transform=data_transform) ``` 将 "/path/to/PascalVOC" 替换为您解压缩数据集的路径。 5. 定义模型。您可以使用现有的模型,如 ResNet 或 VGG,也可以自己定义模型。这里是一个使用 ResNet18 的示例: ``` import torch.nn as nn import torchvision.models as models model = models.resnet18(pretrained=True) # 替换最后一层全连接层 num_classes = 20 # Pascal VOC 数据集中有20个类别 model.fc = nn.Linear(model.fc.in_features, num_classes) ``` 6. 定义损失函数和优化器。这里使用交叉熵损失和随机梯度下降(SGD)优化器: ``` import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) ``` 7. 训练模型。您可以使用以下代码训练模型: ``` from torch.utils.data import DataLoader train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False) num_epochs = 10 for epoch in range(num_epochs): # 训练模型 model.train() for images, labels in train_loader: optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() # 在验证集上评估模型 model.eval() with torch.no_grad(): total_correct = 0 total_samples = 0 for images, labels in val_loader: outputs = model(images) _, predicted = torch.max(outputs, 1) total_correct += (predicted == labels).sum().item() total_samples += labels.size(0) val_accuracy = total_correct / total_samples print('Epoch [{}/{}], Val Accuracy: {:.2f}%'.format(epoch+1, num_epochs, val_accuracy*100)) ``` 在每个 epoch 结束时,模型在验证集上进行评估,并打印准确率。 希望这些步骤可以帮助您开始使用 PyTorch 和 Pascal VOC 数据集进行训练。如果您需要更详细的说明或者代码示例,请告诉我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值