CNN:用于逐像素分类的 Softmax 层

CNN: Softmax layer for pixel-wise classification

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

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

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

感谢您的帮助!

答案是softmax层不要将这N个通道变换成labels的最终图像

假设您有 N 通道输出,您的问题是如何将其转换为 3 通道以获得最终输出。

答案是你不知道。这 N 个通道中的每一个代表一个 class。要走的路是你应该有一个具有相同高度和重量和 3 个通道的虚拟数组。

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

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

-> 如果通道 7 代表汽车,您需要在高度 = 5 和宽度 = 5 的虚拟数组上放置一个红色像素。

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

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

这个虚拟数组称为掩码。

例如,假设这是一个输入

我们正在尝试使用像素方式 ​​classification 来定位大脑的肿瘤区域。这里 classes 的数量是 2,肿瘤存在和不存在。所以 softmax 层输出一个 2 通道对象,其中通道 1 表示存在肿瘤,而通道 2 表示不存在。

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

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

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

所以基本上您将尝试使用 N 通道从您的输出创建蒙版图像(第 2 个)。叠加它们将为您提供最终输出