1. 图像分类 (Image Classification)
图像分类 任务是将整个图像分类为一个类别。通常,output
是对整个图像的类别的预测,而 label
是该图像的真实类别。
1.1 image
的形状
-
image
是输入图像数据,通常是一个四维张量:-
形状:
(batch_size, channels, height, width)
-
说明:批次中的每个图像是一个 RGB 图像(有 3 个通道),并且具有指定的高度和宽度。
-
示例:
-
假设图像尺寸是
3x3
,batch_size = 2
,并且是 RGB 图像(3 个通道),则:-
image
的形状:(2, 3, 3, 3)
-
其中:
-
2
:批次大小,表示 2 张图像。 -
3
:图像的颜色通道数(RGB)。 -
3, 3
:每张图像的尺寸(高 3,宽 3)。
-
-
1.2 label
的形状
-
label
是图像的真实标签(类别)。在图像分类中,每张图像对应一个 整数标签,表示该图像的类别。-
形状:
(batch_size,)
-
说明:标签是一个一维张量,长度等于批次大小,每个值代表一个类别的整数标签。
-
示例:
-
对于二分类任务,
label
可能是:label = torch.tensor([0, 1]) # 第一个图像的标签是 0,第二个图像的标签是 1
-
label
的形状:(2,)
,表示 2 张图像的类别。
1.3 output
的形状
-
output
是模型对每张图像的预测,通常是每个类别的得分或概率。在图像分类中,output
是 类别得分 或 概率,并且通常使用softmax
或sigmoid
函数将它们转换为概率。-
形状:
(batch_size, num_classes)
-
说明:每张图像有一个类别得分或概率,
num_classes
是类别数量。
-
示例:
-
对于二分类问题(背景和前景),
output
可能是:output = torch.tensor([[0.7, 0.3], # 第一个图像:类别 0 的概率是 0.7,类别 1 的概率是 0.3 [0.2, 0.8]]) # 第二个图像:类别 0 的概率是 0.2,类别 1 的概率是 0.8
-
output
的形状:(2, 2)
,表示批次中有 2 张图像,每张图像有 2 个类别的预测概率。
2. 语义分割 (Semantic Segmentation)
语义分割 任务是将图像中的每个像素分类到一个类别。每个像素的标签表示该像素的类别。因此,output
和 label
是 像素级别的标签。
2.1 image
的形状
-
image
是输入图像数据,通常是一个四维张量:-
形状:
(batch_size, channels, height, width)
-
说明:每张图像是一个 RGB 图像(3 个通道),并且具有指定的高度和宽度。批次大小是图像的数量。
-
示例:
-
假设图像尺寸是
3x3
,batch_size = 2
,并且是 RGB 图像(3 个通道),则:-
image
的形状:(2, 3, 3, 3)
-
其中:
-
2
:批次大小,表示 2 张图像。 -
3
:图像的颜色通道数(RGB)。 -
3, 3
:每张图像的尺寸(高 3,宽 3)。
-
-
2.2 label
的形状
-
label
是每个像素的类别标签,通常是一个 二维张量,每个像素的值表示该像素所属的类别。-
形状:
(batch_size, height, width)
-
说明:
label
是一个三维张量,包含每张图像的像素级别标签。
-
示例:
-
对于二分类任务(背景和前景),
label
可能是:label = torch.tensor([[[0, 0, 1], # 第一张图像的标签:背景(0)和前景(1) [0, 1, 1], [2, 2, 1]], [[1, 0, 1], # 第二张图像的标签:背景(0)和前景(1) [1, 1, 0], [2, 0, 1]]])
-
label
的形状:(2, 3, 3)
,表示批次中有 2 张图像,每张图像是 3x3 的大小,每个像素有一个类别标签(例如:0、1、2)。
2.3 output
的形状
-
output
是模型对每个像素的预测,通常是一个 类别得分 或 概率图,每个像素位置有多个得分(针对每个类别)。对于二分类问题,output
的形状通常是(batch_size, num_classes, height, width)
。-
形状:
(batch_size, num_classes, height, width)
-
说明:
output
是一个四维张量,其中num_classes
是类别数量,每个像素会有一个对应类别的得分。
-
示例:
-
对于二分类问题(背景和前景),
output
可能是:output = torch.tensor([[[[0.2, 0.8], # 第一张图像:每个像素在背景和前景类别下的得分 [0.5, 0.5], [0.6, 0.4]], [[0.8, 0.2], [0.1, 0.9], [0.7, 0.3]]], [[[0.9, 0.1], # 第二张图像:每个像素在背景和前景类别下的得分 [0.3, 0.7], [0.2, 0.8]], [[0.6, 0.4], [0.5, 0.5], [0.9, 0.1]]]])
-
output
的形状:(2, 2, 3, 3)
,表示批次中有 2 张图像,每张图像有 2 个类别(背景和前景),每个图像的尺寸是3x3
。
总结:
图像分类 (Image Classification):
-
image
的形状:(batch_size, channels, height, width)
,例如(2, 3, 3, 3)
。 -
label
的形状:(batch_size,)
,例如(2,)
。 -
output
的形状:(batch_size, num_classes)
,例如(2, 2)
。
语义分割 (Semantic Segmentation):
-
image
的形状:(batch_size, channels, height, width)
,例如(2, 3, 3, 3)
。 -
label
的形状:(batch_size, height, width)
,例如(2, 3, 3)
。 -
output
的形状:(batch_size, num_classes, height, width)
,例如(2, 2, 3, 3)
。
自我理解
图像分类:一张图像的预测值为一个列表,列表里面有num_classes个值,每个值表示对应类别的概率。
语义分割:一张图像的的每个像素的预测值为一个列表,列表里面有num_classes个值,每个值表示对应类比的概率。