【学习】基础知识

1. 不同的维度表示

图像的维度表示(H , W , C):

对于一张彩色图像,通常有三个通道(红、绿、蓝),每个通道都是一个二维矩阵。假设图像的高度为 H,宽度为 W,那么图像的维度表示为 (H, W, 3)。这里的 3 表示三个通道。

对于灰度图像,只有一个通道,其维度表示为 (H, W)。

PyTorch Tensor 的维度表示(batchSize , C , H , W ):

PyTorch Tensor 的维度表示通常是 (batch_size, channels, height, width),其中:

batch_size 表示一个批次中包含的样本数。
channels 表示图像的通道数,与图像的颜色通道数相对应。
height 表示图像的高度。
width 表示图像的宽度。
因此,一张彩色图像在 PyTorch Tensor 中的维度表示为 (1, 3, H, W),其中 1 表示批次大小为 1。一张灰度图像在 PyTorch Tensor 中的维度表示为 (1, 1, H, W)。

在处理图像时,这样的维度表示是为了与深度学习模型的输入格式相匹配。深度学习模型通常期望一批数据,即使只有一张图像,也需要在批次维度上进行表示。

unsqueeze 和 squeeze的用法

squeeze 单词的意思是 挤压、压缩。

unsqueeze 是 PyTorch 中的一个操作,用于在指定的维度上插入新的维度。这个操作在张量的形状中插入一个大小为 1 的新维度。详细解释一下 unsqueeze 的用法和作用:

	new_tensor = original_tensor.unsqueeze(dim)

参数 dim: 要插入新维度的位置(维度索引,下标从0开始)。

例如,对于一个三维张量 tensor,形状为 (A, B, C),如果我们使用 tensor.unsqueeze(0),那么将在第 0 维(最前面)插入一个新的维度,形状变为 (1, A, B, C)。

squeeze 是 PyTorch 中的一个操作,用于去除张量中大小为 1 的维度。它的作用是在张量的形状中去除不必要的、大小为 1 的维度。详细解释一下 squeeze 的用法和作用:

	new_tensor = original_tensor.squeeze(dim)

参数 dim (可选): 要去除的维度索引。如果指定了 dim,那么只会去除指定位置的大小为 1 的维度。如果不指定,则会将所有维度大小为1的维度去除掉。

例如,对于一个四维张量 tensor,形状为 (1, A, 1, B),如果我们使用 tensor.squeeze(),那么将去除所有大小为 1 的维度,形状变为 (A,B)。
如果我们使用 tensor.squeeze(2),那么只会去除第 2 维(从 0 开始计数)上的大小为 1 的维度,形状变为(1,A,B)

2. transforms.ToTensor()

transforms.ToTensor() 操作将图像的像素值转换为 PyTorch 的 Tensor 格式,并自动进行了归一化,使得像素值范围在 0 到 1 之间。具体来说,它会将图像中每个像素的整数值除以 255,将像素值缩放到 0 到 1 之间。

例如,对于一个像素值为 127 的灰度图像,经过 transforms.ToTensor() 后,其对应的值将变为 127/255 = 0.498。这个操作是为了将像素值标准化到一个更小的范围,有助于训练深度学习模型时的稳定性和收敛速度。

总之,transforms.ToTensor() 会将图像中的所有像素值缩放到 0 到 1 之间。

3.torch.argmax()

argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,dim给定的定义是:the demention to reduce.也就是把dim这个维度的,变成这个维度的最大值的index。

  1. dim的不同值表示不同维度。特别的在dim=0表示二维中的列,dim=1在二维矩阵中表示行。广泛的来说,我们不管一个矩阵是几维的,比如一个矩阵维度如下:(d0,d1,…,dn−1) ,那么dim=0就表示对应到d0 也就是第一个维度,dim=1表示对应到
    也就是第二个维度,一次类推。
  2. 知道dim的值是什么意思还不行,还要知道函数中这个dim给出来会发生什么。

结合这两个才会知道dim在函数中的作用。下面举两个例子说明上面的第二点。

例子一:torch.argmax()函数中dim表示该维度会消失。

这个消失是什么意思?官方英文解释是:dim (int) – the dimension to reduce. 我们知道argmax就是得到最大值的序号索引,对于一个维度为(d0,d1) 的矩阵来说,我们想要求每一行中最大数的在该行中的列号,最后我们得到的就是一个维度为(d0,1) 的一矩阵。这时候,列就要消失了。

因此,我们想要求每一行最大的列标号,我们就要指定dim=1,表示我们不要列了,保留行的size就可以了。
假如我们想求每一列的最大行标,就可以指定dim=0,表示我们不要行了。

参考bolg:torch.argmax函数学习

通常,使用torch.argmax()得到的是一个类别索引。因为他直接读取出了最大值,通常最大值表示最大概率。
类别索引表示模型对每个像素点的预测结果所属的类别。在语义分割任务中,每个像素点被分配一个类别,这个类别索引通常对应于模型所学习的类别标签。

例如,假设我们的语义分割任务涉及三个类别:背景、人物和车辆。模型的输出经过 torch.argmax 后得到的 argmax_result 是一个包含类别索引的二维张量。假设背景类别的索引是 0,人物类别的索引是 1,车辆类别的索引是 2。

那么,argmax_result 中的每个元素表示对应位置像素点的预测类别。例如,如果 argmax_result[0, 0] 的值是 1,那么表示第一个像素点被模型预测为人物类别。

在语义分割可视化中,可以使用这些类别索引为每个像素点着色,以呈现模型的分割结果。通常,类别索引与数据集中类别标签的编码方式相关,可以参考数据集文档或元信息以理解每个索引对应的具体类别。

你可能感兴趣的:(深度学习学习记录,学习)