我想更详细地了解softmax层如何在CNN中查看图像的语义分割/按像素分类。 CNN输出类标签的图像,其中原始图像的每个像素都有标签。
在通过网络传递测试图像之后,倒数第二层输出原始图像分辨率的N个通道。我的问题是,softmax层如何将这N个通道转换为标签的最终图像。
假设我们有C类(#可能的标签)。我的建议是,对于每个像素,其前一层的N个神经元连接到softmax层中的C神经元,其中每个C神经元代表一个类。使用softmax激活功能,C输出(对于该像素)的总和等于1(这有利于网络的训练)。最后,每个像素被分类为具有最高概率的类(由softmax值给出)。 这意味着softmax层由C * #pixels神经元组成。我的建议是否正确?我没有找到解释,希望你能帮助我。
感谢您的帮助!
答案 0 :(得分:2)
答案是softmax图层不将这N个频道转换为标签的最终图像
假设您有一个N通道输出,那么您的问题是如何将其转换为3通道以进行最终输出。
答案是你不要。这N个通道中的每一个代表一个类。要走的路是你应该有一个具有相同高度和重量的虚拟阵列和3个通道。
现在你必须用一种颜色抽象地编码每个类,如街道为绿色,汽车为红色等。
假设对于height = 5和width = 5,通道7具有最大值。现在,
- >如果通道7代表汽车,则需要在虚拟阵列上放置一个红色像素,其中height = 5且width = 5.
- >如果通道7表示街道,则需要在虚拟阵列上放置绿色像素,其中height = 5且width = 5.
所以你试图寻找一个像素所属的N类。根据类,您将在虚拟阵列上以独特的颜色重绘像素。
这个虚拟数组称为掩码。
例如,假设这是一个输入
我们正在尝试使用像素分类来定位大脑的肿瘤区域。这里的班级数是2,肿瘤存在且不存在。因此softmax层输出一个2通道对象,其中通道1表示存在肿瘤,而通道2表示不存在。
因此,无论何时对于height = X和width = Y,通道1具有更高的值,我们都会制作一个dummmy [X] [Y]图像的白色像素。当通道2具有更高的值时,我们制作黑色像素。
之后我们会得到一个这样的面具,
哪个不太有意义。但是当我们覆盖这两个图像时,我们得到了这个
所以基本上你会尝试使用N Channel从输出中创建遮罩图像(第二个)。覆盖它们将为您提供最终输出