TorchVision的使用
1. 转换和增强图像
torchvision.transforms.v2
参数 | 作用 |
---|---|
Resize | 将输入调整为给定大小 |
RandomShortestSize | 随机调整输入的大小 |
RandomResize | 随机调整输入的大小 |
RandomCrop | 在随机位置裁剪输入 |
RandomResizedCrop | 裁剪输入的随机部分并将其调整为给定大小 |
RandomIoUCrop | 随机 IoU 裁剪转换 |
CenterCrop | 在中心裁剪输入 |
FiveCrop | 将图像或视频裁剪为四个角和中央裁剪 |
TenCrop | 将图像或视频裁剪为四个角,中央裁剪加上这些角的翻转版本(默认使用水平翻转) |
RandomHorizontalFlip | 以给定的概率水平翻转输入 |
RandomVerticalFlip | 以给定的概率垂直翻转输入 |
Pad | 用给定的“pad”值填充所有侧面的输入 |
RandomRotation | 按角度旋转输入 |
RandomAffine | 随机仿射变换:输入保持中心不变 |
RandomPerspective | 以给定的概率对输入执行随机透视变换 |
ElasticTransform | 使用弹性变换来转换输入 |
2. 模型和预训练权重
该子包包含用于寻址的模型的定义 不同的任务,包括:图像分类、像素语义 分割, 对象检测, 实例分割, 人 关键点检测、视频分类和光流
TorchVision使用PyTorch torch.hub为每个提供的架构提供预先训练的权重。实例化预先训练的模型会将其权重下载到缓存目录中。可以使用TORCH_HOME环境变量设置此目录。
修改缓存目录方法:
-
设置TORCH_HOME环境变量
变量名:TORCH_HOME
变量值:自己定义的缓存路径
保存后如果不生效请重启电脑尝试
-
临时改变环境变量(但是每次都要加上这部分代码)
import os os.environ['TORCH_HOME']='路径'
在使用预训练模型之前,必须对图像进行预处理 (使用正确的分辨率/插值调整大小,应用推理变换, 重新调整值等)。没有标准方法可以做到这一点,因为它取决于 如何训练给定模型。它可能因型号系列、变体或 均匀重量版本。使用正确的预处理方法至关重要,并且 否则可能会导致精度降低或输出不正确。
列出和检索可用模型:
all_models = list_models()
classification_models = list_models(module=models)
初始化模型:
m1 = get_model("mobilenet_v3_large", weights=None)
m2 = get_model("quantized_mobilenet_v3_large", weights="DEFAULT")
获取权重:
weights = get_weight("MobileNet_V3_Large_QuantizedWeights.DEFAULT")
weights_enum = get_model_weights("quantized_mobilenet_v3_large")
weights_enum2 = get_model_weights(models.quantization.mobilenet_v3_large)
3. 使用 Hub 中的模型
大多数预训练模型都可以直接通过 PyTorch Hub 访问,而无需安装 TorchVision。
# Option 1: 将权重参数作为字符串传递
model = torch.hub.load("pytorch/vision", "resnet50", weights="IMAGENET1K_V2")
# Option 2: 将权重参数作为枚举传递
weights = torch.hub.load("pytorch/vision", "get_weight", weights="ResNet50_Weights.IMAGENET1K_V2")
model = torch.hub.load("pytorch/vision", "resnet50", weights=weights)
通过 PyTorch Hub 检索特定模型的所有可用权重:
weight_enum = torch.hub.load("pytorch/vision", "get_model_weights", name="resnet50")
print([weight for weight in weight_enum])