大数跨境

PyTorch极简入门02:核心Tensor张量详解!打通OpenCV与深度学习图像壁垒

PyTorch极简入门02:核心Tensor张量详解!打通OpenCV与深度学习图像壁垒 AI与计算机视觉
2026-07-20
2
导读:哈喽各位小伙伴!我们PyTorch计算机视觉零基础系列正式更新第二期!

哈喽各位小伙伴!我们PyTorch计算机视觉零基础系列正式更新第二期!

上一期我们已经手把手搭建好了专属CVPyTorch开发环境,没有看过的小伙伴可以先去翻看往期文章,零基础一站式配置,零报错可直接复用。

环境搭建完成后,很多同学迫不及待想跑深度学习图像模型,但这里必须提醒大家:不要急着堆模型、跑代码!

深度学习计算机视觉的一切运算、图像训练、模型推理,全部建立在一个核心基础之上——Tensor(张量)

绝大多数新手学不会PyTorch、跑不通视觉项目、改不懂代码的根本原因:跳过张量基础,直接硬啃模型

今天这一期,我们只讲CV刚需张量操作,摒弃无用知识点,全程结合OpenCV图像逻辑讲解,帮你彻底打通传统CV → 深度学习CV的核心壁垒,为后续图像分类、YOLO目标检测打好地基!

一、什么是Tensor张量?(大白话解释)

如果你学过OpenCV,一定对图像数组、像素矩阵不陌生,而Tensor张量,就是PyTorch专属的多维数组

我们可以简单对应理解:

0维张量:单个数字(标量)

1维张量:一维数组(向量,对应单通道像素序列)

2维张量:二维矩阵(对应灰度图图像)

3/4维张量:深度学习彩色图像、批量图像(CV最常用)

核心结论:在计算机视觉中,图像就是张量,张量就是图像

OpenCV读取的图片是numpy数组,PyTorch模型只能识别Tensor张量,所以数组与张量的转换、张量的维度操作,是所有视觉项目的第一步!

二、张量基础创建(CV高频用法)

我们直接上手实操,讲解视觉项目中100%会用到的张量创建方式,全程可复制运行。

1. 基础张量创建

python
import torch
import numpy as np

# 1. 创建空张量
empty_tensor = torch.empty(3, 3)
# 2. 创建全0张量(图像掩码常用)
zero_tensor = torch.zeros(3, 3)
# 3. 创建全1张量
one_tensor = torch.ones(3, 3)
# 4. 创建随机张量(模型初始化、数据扰动常用)
rand_tensor = torch.rand(3, 3)

print("随机张量:\n", rand_tensor)

这些基础张量常用于图像掩码、数据填充、模型参数初始化,是CV项目的高频基础操作。

2. Numpy数组转Tensor(衔接OpenCV核心!)

重点!重点!重点!

我们用OpenCV读取的所有图片,格式都是numpy数组,无法直接输入PyTorch模型,必须转换成Tensor

python
# 模拟OpenCV读取的图像numpy数组
img_np = np.random.randint(0, 255, (256, 256, 3), dtype=np.uint8)
print("OpenCV图像数组形状:", img_np.shape)  # H, W, C

# numpy数组转tensor
img_tensor = torch.from_numpy(img_np)
print("转换后Tensor形状:", img_tensor.shape)

这一步操作,贯穿所有CV深度学习项目,是传统视觉过渡到AI视觉的核心关键。

三、张量核心属性(看懂图像数据的关键)

拿到一张图像张量,我们只需要关注3个核心属性,完全适配CV场景:

python
# 随机生成一张模拟彩色图像张量
img_tensor = torch.rand(3, 256, 256)

# 1. shape:张量形状(最重要!图像维度)
print("张量形状:", img_tensor.shape)
# 2. dtype:数据类型
print("数据类型:", img_tensor.dtype)
# 3. device:设备(CPU/GPU,训练关键)
print("所在设备:", img_tensor.device)

CV专属重点讲解:维度顺序差异

OpenCV/Numpy图像[高度H, 宽度W, 通道C]

PyTorch Tensor图像[通道C, 高度H, 宽度W]

90%新手报错的根源:直接用OpenCV图像输入模型,维度顺序不匹配,导致模型无法运行!下一节我们专门解决这个问题。

四、CV必备张量操作(图像预处理核心)

以下所有操作,都是图像分类、目标检测、分割任务的标准预处理步骤,学完直接复用在你的项目中。

1. 维度变换(最常用)

解决OpenCVPyTorch维度不匹配问题,一键转换图像维度:

python
# 模拟OpenCV读取图像:H, W, C
cv_img = torch.rand(256, 256, 3)
print("原始维度(H,W,C):", cv_img.shape)

# 转换为PyTorch标准维度:C, H, W
torch_img = cv_img.permute(2, 0, 1)
print("转换后维度(C,H,W):", torch_img.shape)

2. 增加批次维度(模型推理必备)

PyTorch模型推理、训练时,必须包含batch批次维度,单张图像需要手动扩充:

python
# 单张图像维度:C, H, W
img = torch.rand(3, 256, 256)
# 增加批次维度:batch, C, H, W
img_batch = img.unsqueeze(0)
print("模型输入标准维度:", img_batch.shape)

3. 图像归一化(模型训练核心)

OpenCV图像像素范围是[0,255],深度学习模型必须归一化到[0,1][-1,1]

python
# 像素值归一化 0~255 → 0~1
img = torch.randint(0, 255, (3, 256, 256), dtype=torch.float32)
img_norm = img / 255.0
print("归一化后像素最大值:", img_norm.max())

4. TensorNumpy互转

模型推理后,需要转回Numpy,用OpenCV绘制框、保存图片:

python
# tensor转numpy
img_np = img_norm.cpu().detach().numpy()
# numpy转回tensor
img_tensor = torch.from_numpy(img_np)

五、GPU张量加速(训练提速必备)

NVIDIA显卡的小伙伴,可直接将张量迁移到GPU,大幅提升训练、推理速度

python
img_tensor = torch.rand(3, 256, 256)

# 判断GPU是否可用,自动迁移设备
if torch.cuda.is_available():
    img_tensor = img_tensor.cuda()
    print("当前设备:GPU")
else:
    print("当前设备:CPU")

六、本期核心总结

1. TensorPyTorch的核心数据结构,图像的本质就是张量

2. 核心痛点:OpenCVHWC维度,PyTorchCHW维度,必须手动转换;

3. 所有CV项目必备流程:OpenCV读图 → NumpyTensor → 维度变换 → 归一化 → 模型输入

4. 批次维度、GPU设备迁移、正反转换是模型训练与推理的基础。

七、下一期预告

本期搞定张量基础操作后,下一期我们学习PyTorch自动梯度与反向传播

这是深度学习训练的核心原理,看懂梯度,你就彻底明白:模型为什么能自动学习、自动优化参数,彻底告别只会跑代码、不懂原理的窘境!

文末福利

本期所有张量实操完整代码、图像维度转换模板、归一化工具代码已全部整理完毕!

关注【AI与计算机视觉】,零基础稳步进阶深度学习计算机视觉!

【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 78
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读361
粉丝0
内容78