我想更详细地了解 softmax 层如何在 CNN 中查看图像的语义分割/像素分类。 CNN 输出类标签的图像,其中原始图像的每个像素都有一个标签。

将测试图像通过网络后,倒数第二层输出原始图像分辨率的N个 channel 。我的问题是,softmax 层如何将这 N 个 channel 转换为标签的最终图像。

假设我们有 C 类(# 可能的标签)。我的建议是,对于每个像素,其前一层的 N 个神经元连接到 softmax 层中的 C 个神经元,其中每个 C 个神经元代表一个类。使用 softmax 激活函数,C 输出的总和(对于该像素)等于 1(这有助于网络的训练)。最后,每个像素被归类为概率最高的类别(由 softmax 值给出)。
这意味着,softmax 层由 C * #pixels 神经元组成。我的建议正确吗?我没有找到对此的解释,希望您能帮助我。

感谢您的帮助!

最佳答案

答案是 softmax 层 不要 将这 N 个 channel 转换为标签的最终图像

假设您有 N channel 的输出,您的问题是如何将其转换为 3 channel 以进行最终输出。

答案是你没有。这 N 个 channel 中的每一个都代表一个类。要走的路是你应该有一个具有相同高度和重量以及 3 个 channel 的虚拟阵列。

现在你必须用一种颜色对每个类进行抽象编码,比如街道为绿色,汽车为红色等。

假设高度 = 5 和宽度 = 5, channel 7 具有最大值。现在,

-> 如果 channel 7 代表汽车,则需要在高度 = 5 和宽度 = 5 的虚拟阵列上放置一个红色像素。

-> 如果 channel 7 代表街道,则您需要在高度 = 5 和宽度 = 5 的虚拟阵列上放置一个绿色像素。

所以你试图寻找一个像素属于 N 类中的哪一个。根据类,您将在虚拟数组上以独特的颜色重新绘制像素。

这个虚拟数组称为掩码。

例如,假设这是一个输入

conv-neural-network - CNN : Softmax layer for pixel-wise classification-LMLPHP

我们正在尝试使用逐像素分类来定位大脑的肿瘤区域。这里的类数是 2,肿瘤存在和不存在。所以 softmax 层输出一个 2 channel 对象,其中 channel 1 表示存在肿瘤,而 channel 2 表示存在肿瘤。

因此,每当高度 = X 和宽度 = Y 时, channel 1 具有更高的值,我们制作虚拟 [X][Y] 图像的白色像素。当 channel 2 具有更高的值时,我们制作一个黑色像素。

之后我们得到一个这样的面具,

conv-neural-network - CNN : Softmax layer for pixel-wise classification-LMLPHP

这没有多大意义。但是当我们叠加两张图片时,我们得到了这个

conv-neural-network - CNN : Softmax layer for pixel-wise classification-LMLPHP

因此,基本上您将尝试使用 N channel 从您的输出创建蒙版图像(第二个)。并覆盖它们将为您提供最终输出

关于conv-neural-network - CNN : Softmax layer for pixel-wise classification,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46244988/

10-12 22:52