当前位置: 首页 > news >正文

Torchvision 0.26:深度学习视觉库全面解析

torchvision — Torchvision 0.26 documentation

Models and pre-trained weights — Torchvision 0.26 documentation

VGG — Torchvision 0.26 documentation

Torchvision 0.26是 PyTorch 生态中专门用于计算机视觉(Computer Vision)的核心库文档。在 2026 年的背景下,它已经成为了一个高度成熟的工具包,涵盖了从数据加载、图像增强到最前沿模型调用的全流程。

该网页内容主要可以划分为以下6 大核心板块


1. Transforms (数据变换与增强)

这是文档中变动最频繁也最重要的部分。在 0.26 版本中,V2 Transforms已经完全取代了旧版。

  • 多模态支持:V2 变换不仅支持图片(Image),还原生支持视频(Video)边界框(Bounding Boxes)掩码(Masks)

  • 高性能:大部分变换支持在 GPU 上直接运行(通过 Tensor 驱动)。

  • 常用操作:包括RandomResizedCropNormalizeColorJitter以及强大的AutoAugment


2. Models (预训练模型库)

文档提供了大量工业界和学术界主流的架构,并且附带了在 ImageNet 或其他大型数据集上的预训练权重

  • 架构涵盖

    • 分类:从经典 ResNet 到最新的Vision Transformers (ViT)Swin Transformer

    • 检测与分割:Faster R-CNN, Mask R-CNN, DeepLabV3 等。

    • 视频处理:MViT, Video ResNet。

  • Weights API:使用Weights枚举类来更精确地调用特定版本的模型参数(如ResNet50_Weights.IMAGENET1K_V2)。


3. Datasets (内置数据集)

它内置了加载主流视觉数据集的接口,省去了用户手动写爬虫或解析器的麻烦。

  • 经典集:MNIST, CIFAR10, ImageNet。

  • 特定任务集:COCO (目标检测), Cityscapes (语义分割), Kinetics (视频)。

  • 标准格式:所有数据集都能完美配合 PyTorch 的DataLoader使用。


4. Operators (底层算子)

这一章主要面向需要自定义高性能层的高级开发者。

  • 视觉算子:如NMS (非极大值抑制)RoIAlign (感兴趣区域对齐)、各种IoU (交并比)计算。

  • 这些算子通常是用 C++/CUDA 实现的,速度极快,是构建目标检测算法的基石。


5. IO (输入输出)

专门负责图像和视频的高速读取与解码。

  • torchvision.io:提供read_imageread_video函数,直接将磁盘文件读取为 GPU 友好的 Tensor 格式,不再需要通过 PIL 或 OpenCV 中转。


6. Training References (训练参考脚本)

这是 0.26 文档中非常有价值的一部分,它提供了官方用来训练那些预训练模型的原始脚本

  • 如果你想复现官方的精度,或者学习如何编写专业的分布式训练代码,这些参考脚本是最佳示例。

在 Torchvision 0.26 的文档中,“Models and pre-trained weights” 页面是整个库的“核心仓库”。它不仅提供了各种先进的深度学习架构,还提供了在海量数据上训练好的“大脑”(权重)。

以下是该页面的深度解析:


1. 核心理念:模型 = 骨架 + 灵魂

文档将模型分为两个部分:

  • 模型架构 (Architectures):即神经网络的结构代码(如 ResNet, ViT)。

  • 预训练权重 (Pre-trained Weights):在特定数据集(如 ImageNet)上训练得到的参数。


2. 全新的 Weights API (重点)

在旧版本中,我们通常使用pretrained=True。但在 0.26 文档中,这种方式已被弃用,取而代之的是更加透明和灵活的Weights Enum API

为什么要改?

  • 版本控制:一个模型可能有多个版本的权重(比如 ResNet50 有 V1 和更强的 V2)。

  • 自动配套增强:新 API 可以直接告诉你这个权重需要什么样的预处理(缩放、归一化参数)。

代码对比:

# ❌ 旧方式 (不推荐) model = torchvision.models.resnet50(pretrained=True) # ✅ 新方式 (推荐) from torchvision.models import resnet50, ResNet50_Weights model = resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)

3. 模型大类

文档根据任务目标将模型分成了几大阵营:

任务类型代表模型应用场景
图像分类ResNet, EfficientNet,ViT (Vision Transformer), Swin识别图片里是什么
目标检测Faster R-CNN, SSD, RetinaNet,DETR找出物体的位置并打框
实例分割Mask R-CNN, DeepLabV3像素级抠图
视频分类MViT, Video ResNet识别动作(如挥手、跑步)
光流估计RAFT跟踪物体在两帧间的运动

4. 自动预处理 (Transforms)

这是 0.26 版本最贴心的改进。不同的预训练模型对输入图片的要求不同(有的要求 $224 \times 224$,有的要求 $232 \times 232$)。

文档通过weights.transforms()提供了自动化的预处理逻辑:

# 获取该权重对应的预处理步骤 weights = ResNet50_Weights.DEFAULT preprocess = weights.transforms() # 直接应用到图片 img_transformed = preprocess(img)

这保证了你的推理过程与官方训练过程完全一致,避免了因归一化参数不匹配导致的精度下降。

5. 性能度量指标

文档中为每个模型都列出了详细的表格,包含:

  • Acc@1 / Acc@5:在 ImageNet 上的分类准确率。

  • Params:参数量(模型占多大内存)。

  • GFLOPS:计算量(运行有多快)。


6. 如何选择模型?

  • 追求速度(移动端/嵌入式):选择MobileNetV3ShuffleNetV2

  • 追求精度(研究/高配服务器):选择ConvNeXtViT_H(大型视觉 Transformer)。

  • 平衡性最好ResNet家族或RegNet

Torchvision 0.26 文档中关于VGG的部分介绍了一系列由牛津大学视觉几何组(Visual Geometry Group)开发的经典卷积神经网络架构。虽然 VGG 诞生于 2014 年,但由于其结构的规整性易用性,它至今仍是特征提取和迁移学习的常用基准。

以下是该文档页面的核心内容讲解:


1. VGG 的核心设计理念

VGG 最大的贡献是证明了增加网络深度并使用**极小的卷积核($3 \times 3$)**能有效提升图像识别的效果。

  • 堆叠卷积层:两个 $3 \times 3$ 卷积层的感受野等同于一个 $5 \times 5$ 卷积层,但参数量更少且引入了更多非线性变换。

  • 统一结构:整个网络几乎全部由 $3 \times 3$ 卷积、步长为 2 的 $2 \times 2$ 最大池化层以及最后三个全连接层组成。


2. 文档中提供的模型变体

Torchvision 提供了多种深度的 VGG 版本,主要分为两类:

标准版 (Standard)
  • VGG11: 8 个卷积层 + 3 个全连接层。

  • VGG13: 10 个卷积层 + 3 个全连接层。

  • VGG16: 13 个卷积层 + 3 个全连接层(最常用)。

  • VGG19: 16 个卷积层 + 3 个全连接层。

带批归一化版 (With Batch Normalization)

在模型名称后加上_bn(如vgg16_bn)。

  • 优势:在卷积层和激活函数之间加入了 Batch Norm 层,能够加速模型收敛并提高训练稳定性。在实际应用中,强烈建议优先使用带_bn的版本


3. 如何调用预训练权重

在 0.26 文档中,调用方式遵循新的 Weights API 规范:

from torchvision.models import vgg16, VGG16_Weights # 1. 加载默认的最佳权重 (通常是 IMAGENET1K_V1) model = vgg16(weights=VGG16_Weights.DEFAULT) # 2. 或者加载带 Batch Normalization 的版本 from torchvision.models import vgg16_bn, VGG16_BN_Weights model_bn = vgg16_bn(weights=VGG16_BN_Weights.IMAGENET1K_V1)

4. 关键参数与性能

文档中列出了这些模型的详细规格,帮助你根据硬件条件进行选择:

  • 参数量 (Params):VGG 是著名的“显存杀手”。VGG16 大约有1.38 亿个参数,远高于 ResNet50(约 2500 万),主要原因在于其最后三个巨大的全连接层。

  • 计算量 (GFLOPS):计算开销也相对较大。

  • 输入要求:期望输入为 $224 \times 224$ 的三通道图片,且需要经过特定的均值和标准差归一化处理(可以通过weights.transforms()自动获取)。


5. VGG 的优缺点对比

优点缺点
结构极其简洁:非常适合作为初学者理解 CNN 的第一个模型。体积巨大:权重文件通常超过 500MB,不适合移动端部署。
特征提取能力强:其卷积层的特征表达非常细腻,常用于感知损失(Perceptual Loss)。训练速度慢:由于参数量巨大,且早期版本没有 BN,收敛较慢。

演示

import torchvision # train_data = torchvision.datasets.ImageNet("../data_image_net", split='train', download=True, # transform=torchvision.transforms.ToTensor()) from torch import nn # 加载 VGG16 模型,pretrained=False 表示只加载模型结构,参数是随机初始化的 vgg16_false = torchvision.models.vgg16(pretrained=False) # 加载 VGG16 模型,pretrained=True 表示加载模型结构的同时,也加载在 ImageNet 数据集上训练好的权重 vgg16_true = torchvision.models.vgg16(pretrained=True) # 打印预训练模型的结构,你会看到它分为 features(卷积层)、avgpool(池化层)和 classifier(全连接层)三部分 print(vgg16_true) # 加载 CIFAR10 数据集。注意:CIFAR10 只有 10 个类别,而原生的 VGG16 是为 ImageNet 的 1000 个类别设计的 train_data = torchvision.datasets.CIFAR10('../data', train=True, transform=torchvision.transforms.ToTensor(), download=True) # 方法一:利用 add_module 在 classifier 这个 Sequential 容器的末尾追加一个新的线性层 # 该操作将 1000 个输出映射到 10 个输出,原有的 1000 个输出节点变成了隐藏层的一部分 vgg16_true.classifier.add_module('add_linear', nn.Linear(1000, 10)) print(vgg16_true) # 打印未经过修改的随机初始化模型 print(vgg16_false) # 方法二:通过索引 [6] 直接访问 classifier 中的最后一层,并将其替换为一个新的线性层 # 这种方法直接去掉了原有的 1000 类输出层,将其替换为 10 类输出层 vgg16_false.classifier[6] = nn.Linear(4096, 10) print(vgg16_false)

这段代码演示了如何加载经典的VGG16模型,并展示了两种对预训练模型进行“手术”的方法:追加新层直接修改现有层。这在迁移学习(Transfer Learning)中是非常基础且实用的技巧。

1. 库引用与模型加载
  • vgg16_false: 你得到的是一个“空壳”。它有复杂的 VGG 架构,但里面的权重全是乱序的数字。如果你现在用它跑预测,结果和瞎猜没区别。

  • vgg16_true: 你得到的是一个“博学的老教授”。它已经看过了数百万张图片,能够识别狗、猫、救护车等 1000 种物体。在 0.26 版本的 torchvision 中,官方更推荐使用weights=VGG16_Weights.DEFAULT

2. VGG16 的三段式结构

当你print(vgg16_true)时,请特别留意其结构:

  1. features: 卷积层。负责从图片中提取边缘、纹理等特征。

  2. avgpool: 自适应平均池化。将特征图尺寸统一。

  3. classifier: 分类器。由 7 层组成(索引 0-6)。索引为 6 的那一层通常是Linear(4096, 1000)

3. 为什么要修改模型?

原生 VGG16 的输出维度是1000,但CIFAR10数据集只有10类。如果你不修改模型,计算损失函数(Loss)时会因为维度不匹配(1000 vs 10)而直接报错报错。

4. 两种“微创手术”方案对比
操作方式代码实现逻辑效果适用场景
追加 (Add)add_module('name', layer)在最后多加一关。原来的第 1000 类输出变成了一个特征转换层。当你觉得原有的 1000 类分类信息对你的新任务也有辅助作用时。
替换 (Modify)classifier[6] = layer拆掉旧层,换上新层。输入依然是 4096,输出变为 10。最常用。直接改变网络最后一层的输出维度,结构更简洁,计算量略小。
5. 数据的加载
  • torchvision.datasets.CIFAR10: 这里下载了 5 万张 $32 \times 32$ 的图片。虽然 VGG16 原生设计是处理 $224 \times 224$ 图片的,但在代码层面,只要全连接层的输入(那层 4096)能对上,代码就能跑通。不过,通常建议在transform里加一个Resize((224, 224))来获得更好的效果。

http://www.jsqmd.com/news/675251/

相关文章:

  • gte-base-zh快速部署指南:xinference启动gte-base-zh及WebUI操作
  • 从晶体管到指令集:用Logisim还原MIPS处理器设计精髓
  • 后端Web进阶(Springboot)
  • **Vue 3 Composition API 实战:从零搭建可复用的权
  • 机器人半马跑出50分26秒,制造业老板该关心什么?
  • Hypnos-i1-8B实操手册:tail -f日志实时监控+常见错误码速查表
  • 免费小说下载器终极指南:如何轻松保存你喜欢的网络小说
  • Fastdata极数:中国租车行业年度报告2025
  • 邦芒宝典:职场小白必须修炼的六种能力
  • Phi-3.5-mini-instruct开源可部署:支持模型热更新不中断服务
  • 哪个视频下载器好
  • fre:ac音频转换器终极指南:5大核心功能带你轻松玩转音频格式转换
  • nli-MiniLM2-L6-H768惊艳效果:小模型在长尾领域(如生物医学)NLI表现突破
  • TREX手操器2026推荐,全能运维新标杆
  • 3个关键问题:为什么你的Windows播放器需要LAV Filters解码器?
  • 安卓虚拟相机终极指南:用VCAM实现摄像头视频替换的完整教程
  • PyTorch 2.8镜像惊艳案例:脑电波信号→意识活动可视化视频生成
  • Windows更新修复终极指南:一键解决卡顿、失败、错误代码问题
  • RWKV-7 (1.5B World)镜像免配置:预置常用Prompt模板(客服/教育/编程)
  • 天阳科技面对 RWA 趋势有哪些技术储备?
  • 蓝桥杯单片机CT107D平台实战:用PCF8591做个简易电压监控器(附IIC驱动移植避坑指南)
  • 2026年Agent将不再是“会聊天的模型外壳”!收藏,小白程序员必看!
  • HTML函数在系统更新后变卡是硬件老化吗_软硬兼容性排查【方法】
  • 算法题解:单链表的高效实现(含经典致命错误深度剖析)
  • Hypnos-i1-8B镜像免配置:开箱即用的8B推理环境(GGUF+Safetensors)
  • 2026年公司地址变更指南:这五份资料缺一不可
  • real-anime-z实战教程:用‘电影感构图+高度细节’生成专业级动漫封面
  • 5个关键步骤:在Windows 10上完美部署Android子系统的完整实战指南
  • 阿里中文语音识别模型实测:Speech Seaco Paraformer一键部署,会议录音秒转文字
  • 2026年质量好的广东汽车电磁阀/AMT电磁阀/汽车电磁阀多家厂家对比分析 - 行业平台推荐