美文网首页
语义分割由网络输出到类别标签的处理过程(转)

语义分割由网络输出到类别标签的处理过程(转)

作者: zelda2333 | 来源:发表于2020-05-24 19:43 被阅读0次

原链接:语义分割由网络输出到类别标签的处理过程

logits是网络的输出,logits.shape=(batch_size, w, h, 21),21类语义标签。

pred_classes = tf.expand_dims(tf.argmax(logits, axis=3, output_type=tf.int32), axis=3)#shape=(?, ?, ?, 1)

我们用numpy解释argmax和expand_dims这两个函数:

import numpy as np
 
#(2, 2, 4, 3)
x = np.array([[[[31,20,10],
            [20,43,30],
            [40,10,62],
            [40,60,76]],
           [[10,72,20],
            [81,30,40],
            [97,50,70],
            [40,50,68]]],
 
          [[[10,22,10],
            [20,30,81],
            [40,10,62],
            [40,65,30]],
           [[10,72,20],
            [81,30,40],
            [97,50,70],
            [40,50,68]]]])
 
#(2, 2, 4)
y1 = np.argmax(x, axis=3)
'''[[[0 1 2 2]
     [1 0 0 2]]
    [[1 2 2 1]
     [1 0 0 2]]]'''
 
#(2, 2, 4, 1)
y2 = np.expand_dims(y1, axis=3)
'''[[[[0]
      [1]
      [2]
      [2]]
     [[1]
      [0]
      [0]
      [2]]]
    [[[1]
      [2]
      [2]
      [1]]
     [[1]
      [0]
      [0]
      [2]]]]'''

y2的值是每个一维列表的最大值的下标,如第一个值为0,是因为[31,20,10]中最大元素31的下标是0。

batch_size为1时的网络输出:

[[[31,20,10],
  [20,43,30],
  [40,10,62],
  [40,60,76]],
 [[10,72,20],
  [81,30,40],
  [97,50,70],
  [40,50,68]]]

注意图像大小是2×4,而不是4×3或3×4。所以[31,20,10]是第一个像素被归类为第0类、第1类、第2类的概率。因为31最大,所以该像素的语义标签被归类为0。这样就可以解释y2:

[[[0]
  [1]
  [2]
  [2]]
 
 [[1]
  [0]
  [0]
  [2]]]

batch_size=1时,它是指一个2×4的图像的第(0,0)个像素标签为0、第(0,1)个像素标签为1、... 、第(1,3)个像素标签为2。

得到预测分割的0,1,2结果后,分别对pred,ground truth 进行one-hot后评估。

def one_hot(label):
   '''Convert label (d,h,w) to one-hot label (d,h,w,num_class).
   '''
   num_class = np.max(label) + 1
   return np.eye(num_class)[label]

gt_one_hot = one_hot(gt)   # 将 GT one-hot
pred_one_hot = one_hot(pred)     # 将预测的segmention one-hot

# 单独的每个类。0对应于background类(忽略)。
csf_pred = pred_one_hot[:,:,:,1]
csf_label = label_one_hot[:,:,:,1]

gm_pred = pred_one_hot[:,:,:,2]
gm_label = label_one_hot[:,:,:,2]

csf_dr = dice_ratio(csf_pred, csf_label)
gm_dr = dice_ratio(gm_pred, gm_label)

print('--->avg:', np.mean([csf_dr, gm_dr))

代码来自 Non-Local U-Net

相关文章

  • 语义分割由网络输出到类别标签的处理过程(转)

    原链接:语义分割由网络输出到类别标签的处理过程 logits是网络的输出,logits.shape=(batch_...

  • 语义分割入门

    语义分割是什么? 语义分割是将标签或类别与图片的每个像素关联的一种深度学习算法。它用来识别构成可区分类别的像素集合...

  • 语义分割

    (一)语义分割和数据集 (1)什么是语义分割? 语义分割将图片的每一个像素分类到对应的类别。神经网络能够在像素级别...

  • Unet图像分割

    Unet网络是一种图像语义分割网络,图像语义分割网络让计算机根据图像的语义来进行分割,例如让计算机在输入下面下图,...

  • 2019 语义分割指南

    语义分割是指将图像中的每个像素归于类标签的过程,这些类标签可以包括一个人、汽车、鲜花、一件家具等。 我们可以将语义...

  • 图像分割

    一、语义分割  图像语义分割的目标是标记图像每个像素的类别。因为我们需要预测图像中的每个像素,所以此任务通常被称为...

  • 计算机视觉-语义分割

    什么是语义分割 我们都知道,图像是由许多像素(Pixel)组成,而「语义分割」顾名思义就是将像素按照图像中表达语义...

  • 3-HTML标签(2)

    一、div和span div和span是非常重要的标签,div的语义是division“分割”; span的语义就...

  • CVPR2019|Knowledge Adaptation fo

    高效语义分割的知识适应 论文翻译 Abstract 准确性和效率对语义分割任务都具有重要意义。现有的深 Fcn 由...

  • Semantic Segmentation using Adve

    在本文中,作者提出了一种对抗训练方法来训练语义分割模型。 作者训练卷积语义分割网络以及对抗网络,以区分来自真实图片...

网友评论

      本文标题:语义分割由网络输出到类别标签的处理过程(转)

      本文链接:https://www.haomeiwen.com/subject/drnjahtx.html