外贸做网站的好处,怎样拉注册公司客户,做网站的属于什么岗位,wordpress 登录 logo文章目录 [Pytorch]语义分割任务分类的实现 [Pytorch]语义分割任务分类的实现
假如我们定义了一个网络用于语义分割任务#xff0c;这个网络简称为model() 语义分割任务要做的是#xff1a;
对于一个图片输入input#xff0c;大小为#xff08;B#xff0c;C#xff0c… 文章目录 [Pytorch]语义分割任务分类的实现 [Pytorch]语义分割任务分类的实现
假如我们定义了一个网络用于语义分割任务这个网络简称为model() 语义分割任务要做的是
对于一个图片输入input大小为BCW H)其中B为batchsizeC为通道数channel我们的网络输出一个WH保持为原图大小的输出output而通道数改为分类类别数num_class目的是对于原图每一个像素位置都进行分类给每一个像素都分出一个预测类别标签。所以语义分割网络的输出output的尺寸应该为BNWH,其中N为num_class
对于输出outputsWH范围内的每一个位置在通道N的第i个通道位置的值都代表了将该坐标xy的像素分类为第i类的类别得分。 例如如下初始化了一个tensor来模拟对应的output
out torch.tensor([[[1, 2],[4, 5],],[[1, 7],[0, 3]],[[2, 1],[6, 2]]
])其中中间: [1, 7] [0, 3] 这个矩阵就代表在这个2x2的图片中将四个位置的像素预测成第1类类别从0开始的类别得分分别为1703 最终预测出每一个位置的类别应该为所有通道N中取最大的那一个通道所对应的类别
# 模拟batchsize为1的情况
out out.unsqueeze(0)
print(out.shape)输出torch.Size([1, 3, 2, 2])
使用tensor.max(dim)方法统计对应维度的最大值我们这里所要统计的是通道维度上的最大值所以使用以下方法
out out.max(1)输出torch.return_types.max( valuestensor([[[2, 7], [6, 5]]]), indicestensor([[[2, 1], [2, 0]]]))
out.max(1)方法返回了两个列表其中第一个列表是每一个位置对应通道中的最大值而第二个列表返回的是对应通道的索引也就是对应的类别我们在实际预测中是以分类为目的所以取第二个列表改为
out out.max(1)[1]输出tensor([[[2, 1], [2, 0]]])
这样一来矩阵 [2, 1] [2, 0] 就是最终每一个像素的分类结果