PyTorch 1.0 中文文档:torchvision.datasets

本文详细介绍了PyTorch中数据集的使用,包括如何通过继承torch.utils.data.Dataset来创建自己的数据集,以及如何利用DataLoader进行数据的批处理和并行加载。文中列举了多种内置数据集,并解释了transform和target_transform参数的作用。
部署运行你感兴趣的模型镜像

译者:BXuan694

所有的数据集都是torch.utils.data.Dataset的子类, 即:它们实现了__getitem____len__方法。因此,它们都可以传递给torch.utils.data.DataLoader,进而通过torch.multiprocessing实现批数据的并行化加载。例如:

imagenet_data = torchvision.datasets.ImageFolder('path/to/imagenet_root/')
data_loader = torch.utils.data.DataLoader(imagenet_data,
                                          batch_size=4,
                                          shuffle=True,
                                          num_workers=args.nThreads)

目前为止,收录的数据集包括:

数据集

以上数据集的接口基本上很相近。它们至少包括两个公共的参数transformtarget_transform,以便分别对输入和和目标做变换。

阅读全文/改进本文

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>我们正在讨论 `torchvision.transforms.RandomResizedCrop` 的参数信息。根据用户的问题,他想要了解这个变换的参数。 根据引用[1]和[2]的上下文,我们知道`RandomResizedCrop`是torchvision.transforms中提供的一种数据增强方法。 根据PyTorch官方文档(虽然引用中没有直接给出,但我们可以根据常识和引用提示)以及用户之前提到的引用,我们可以给出参数介绍。 下面我将详细介绍`RandomResizedCrop`的主要参数及其含义: 1. `size`:输出的尺寸(必需参数)。可以是一个整数(此时将输出正方形图像)或者一个二元组(高度, 宽度)。 2. `scale`:随机裁剪区域的面积比例范围(默认为(0.08, 1.0))。裁剪区域会在这个范围内随机选择。 3. `ratio`:随机裁剪区域的宽高比范围(默认为(3/4, 4/3))。裁剪区域的宽高比会在这个范围内随机选择(取对数后再均匀采样)。 4. `interpolation`:插值方法(默认为`PIL.Image.BILINEAR`)。当调整裁剪区域到指定大小时使用的插值方式。可选值包括:`PIL.Image.NEAREST`、`PIL.Image.BILINEAR`、`PIL.Image.BICUBIC`等。 此外,还有一个参数: 5. `max_attempts`:尝试寻找符合`ratio`要求的裁剪区域的最大尝试次数(默认为10)。如果超过这个次数还未找到,则采用中心裁剪。 注意:在PyTorch 1.7.0之后,`max_attempts`参数被引入,以避免在极端比例下无限循环。 使用方法示例: 创建一个`RandomResizedCrop`变换,将图像随机裁剪并缩放到224x224像素: ```python transform = transforms.RandomResizedCrop(size=(224, 224), scale=(0.08, 1.0), ratio=(3./4., 4./3.), interpolation=Image.BILINEAR) ``` 在`Compose`中使用: ```python from torchvision import transforms from PIL import Image transform = transforms.Compose([ transforms.RandomResizedCrop(224), # 简写,只给出size,其他默认 transforms.ToTensor(), ]) ``` 引用[3]中给出了一个使用`Compose`组合变换的例子,其中包含了`Resize`、`RandomCrop`等,但并没有直接使用`RandomResizedCrop`。不过,我们可以参考其使用方式[^3]。 下面是一个更具体的例子,展示如何在数据加载中使用: ```python import torchvision from torchvision import transforms # 定义包含RandomResizedCrop的变换 train_transform = transforms.Compose([ transforms.RandomResizedCrop(224, scale=(0.08, 1.0), ratio=(0.75, 1.33)), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) # 在数据集上应用 train_dataset = torchvision.datasets.ImageFolder(root='path/to/data', transform=train_transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) ``` 注意事项: - 该变换同时用于图像分类等任务的数据增强,通过随机裁剪和缩放增加模型泛化能力。 - 当`scale`参数设置得较小时,裁剪区域会很小,可能只包含物体的一部分;而较大的`scale`则可能包含大部分或全部物体。 - `ratio`参数控制裁剪区域的形状,避免过于极端的长宽比。 引用说明:我们参考了torchvision.transforms模块的通用知识[^1][^2]以及Compose的使用方式[^3]。 </think>### `torchvision.transforms.RandomResizedCrop` 参数详解 `RandomResizedCrop` 是 PyTorch torchvision 中常用的图像增强方法,它会随机裁剪图像区域并缩放到指定尺寸。以下是其完整参数列表和使用说明: #### 📐 核心参数 1. **size** (必需) - 类型:`int` 或 `(int, int)` - 作用:输出图像的尺寸 - 示例: - `size=224` → 输出 224×224 正方形 - `size=(256, 128)` → 输出 256×128 矩形 2. **scale** - 类型:`(float, float)` - 默认值:`(0.08, 1.0)` - 作用:随机裁剪区域占原图面积的比例范围 - 公式:裁剪面积比例 $r$ 满足 $\text{scale}[0] \leq r \leq \text{scale}[1]$ - 示例:`scale=(0.2, 0.8)` 裁剪原图20%-80%的区域 3. **ratio** - 类型:`(float, float)` - 默认值:`(3/4, 4/3)` - 作用:裁剪区域的宽高比范围 - 公式:宽高比 $a = \frac{w}{h}$ 满足 $\text{ratio}[0] \leq a \leq \text{ratio}[1]$ - 示例:`ratio=(1, 2)` 允许正方形到2:1长方形的裁剪 #### ️ 可选参数 4. **interpolation** - 类型:`InterpolationMode` - 默认值:`InterpolationMode.BILINEAR` - 作用:缩放时使用的插值算法 - 可选值: - `NEAREST`:最近邻插值(最快) - `BILINEAR`:双线性插值(默认) - `BICUBIC`:双三次插值(质量最高) - 示例:`interpolation=InterpolationMode.BICUBIC` 5. **antialias** - 类型:`bool` - 默认值:`True` (PyTorch1.13) - 作用:是否启用抗锯齿 - 说明:仅当`interpolation`为`BILINEAR`或`BICUBIC`时生效 #### 💻 使用示例 ```python import torchvision.transforms as T from torchvision.transforms import InterpolationMode transform = T.Compose([ T.RandomResizedCrop( size=224, scale=(0.2, 1.0), ratio=(0.75, 1.33), interpolation=InterpolationMode.BICUBIC ), T.ToTensor(), T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 应用变换 transformed_img = transform(original_img) ``` #### ️ 注意事项 1. **随机性**:每次调用会产生不同的裁剪位置和尺寸 2. **宽高比采样**:实际宽高比在log空间均匀采样(符合视觉特性) 3. **与`RandomCrop`区别**: - `RandomCrop`:固定裁剪尺寸 - `RandomResizedCrop`:随机裁剪尺寸+缩放 4. **典型应用场景**:图像分类模型训练(如ResNet、ViT)的首个增强步骤[^3] #### 📊 采样过程演示 1. 随机选择面积比例 $r \in [\text{scale}_\text{min}, \text{scale}_\text{max}]$ 2. 随机选择宽高比 $a \in [\log(\text{ratio}_\text{min}), \log(\text{ratio}_\text{max})]$ 3. 计算实际宽高: $$w = \sqrt{r \times a}, \quad h = \frac{w}{a}$$ 4. 随机选择裁剪区域的左上角坐标 $(x, y)$ 该增强策略能有效提升模型对物体位置和尺度变化的鲁棒性[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值