gpt4 book ai didi

computer-vision - 如何在 TensorFlow 中为场景标签实现逐像素分类?

转载 作者:行者123 更新时间:2023-12-03 14:15:46 26 4
gpt4 key购买 nike

我正在使用 研究深度学习模型谷歌的 TensorFlow .该模型应用于片段和标签场景 .

  • 我正在使用 SiftFlow 数据集 其中有 33 个语义
    256x256 像素的类和图像。
  • 结果,在我使用卷积和反卷积的最后一层,我得到了以下张量(数组)[256,256,33]。
  • 接下来我想
    应用 Softmax 并将结果与​​大小的语义标签进行比较
    [256, 256]。

  • 问题:
    我应该对我的最后一层应用 mean averaging 还是 argmax,使其形状变为 [256,256,1],然后循环遍历每个像素并进行分类,就好像我正在分类 256x256 实例一样?如果答案是肯定的,如何,如果不是,还有哪些其他选择?

    最佳答案

    应用 softmax 并使用 交叉熵损失 , 你必须保留 完好无损大小为 batch_size x 256 x 256 x 33 的网络的最终输出。因此,您 无法使用 表示平均或 argmax,因为它会破坏网络的输出概率。

    您必须遍历所有 batch_size x 256 x 256 像素,并将交叉熵损失应用于您对该像素的预测。这很容易使用内置函数tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels) .

    一些警告from the doc在应用以下代码之前:

  • 警告:此操作需要 未缩放的 logits ,因为它在内部对 logits 执行 softmax 以提高效率。不要用 softmax 的输出调用这个操作,因为它会产生不正确的结果。
  • logits 并且必须具有形状 [batch_size, num_classes] 和 dtype(float32 或 float64)。
  • 标签必须具有形状 [batch_size] 和 dtype int64。

  • 诀窍是使用 batch_size * 256 * 256作为函数所需的批量大小。我们将 reshape logitslabels到这种格式。
    这是我使用的代码:

    inputs = tf.placeholder(tf.float32, [batch_size, 256, 256, 3])  # input images
    logits = inference(inputs) # your outputs of shape [batch_size, 256, 256, 33] (no final softmax !!)
    labels = tf.placeholder(tf.float32, [batch_size, 256, 256]) # your labels of shape [batch_size, 256, 256] and type int64

    reshaped_logits = tf.reshape(logits, [-1, 33]) # shape [batch_size*256*256, 33]
    reshaped_labels = tf.reshape(labels, [-1]) # shape [batch_size*256*256]
    loss = sparse_softmax_cross_entropy_with_logits(reshaped_logits, reshaped_labels)

    然后,您可以将优化器应用于该损失。

    更新:v0.10

    documentationtf.sparse_softmax_cross_entropy_with_logits表明它现在接受 logits 的任何形状,所以不需要 reshape 张量(感谢@chillinger):

    inputs = tf.placeholder(tf.float32, [batch_size, 256, 256, 3])  # input images
    logits = inference(inputs) # your outputs of shape [batch_size, 256, 256, 33] (no final softmax !!)
    labels = tf.placeholder(tf.float32, [batch_size, 256, 256]) # your labels of shape [batch_size, 256, 256] and type int64

    loss = sparse_softmax_cross_entropy_with_logits(logits, labels)

    关于computer-vision - 如何在 TensorFlow 中为场景标签实现逐像素分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35317029/

    26 4 0