torch.nn.functional.one_hot在图像分割中的一种用法

图像分割的最后一层一般是卷积网络的输出
self.Conv = nn.Conv2d(64, num_classes, kernel_size=1, stride=1, padding=0)
num_classes就是输出的分类个数。

我们以4分类为例子,图像尺寸为2×2,标注类别分别是0,1,2,3


label
>>> label = torch.arange(4).reshape(2,2)
>>> label 
# tensor([[0, 1],
#         [2, 3]])

输入图像经过卷积网络,再经过softmax()函数后,输出层应该是4层2×2张量(矩阵),第一层的含义是:[0][0]这个像素大概率是类别1,其他像素大概率不是类别1,第二层的含义是:[1][0]这个像素大概率是类别2,其他像素大概率不是类别2。第三层和第四层类似。

输出层

那怎么比较输出层和标注层呢,输出层的shape=(4,2,2),标注层的shape=(2,2),
一种方法是把输出层shape转换成(2,2)(这里不做介绍),还有一种就是把标注层shape改为(4,2,2),用到的方法就是torch.nn.functional.one_hot(),函数的具体api可以去官网查询。用法如下:

>>> abel_C = torch.nn.functional.one_hot(label,4)
>>> label_C.shape
# torch.Size([2, 2, 4])
# 再用translate转换
>>> label_C= torch.transpose(torch.transpose(label_C,0,2),1,2)
>>> label_C.shape
# torch.Size([4, 2, 2])
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容