我能够训练带有二进制分类标记图像的U-net.
但我很难弄清楚如何在Keras/Theano中配置最终层以进行多类分类(4类).
我有634个图像和相应的634个掩码,unit864 x 64像素.
我的面具不是黑色(0)和白色(1),而是在3个类别加上背景的颜色标记对象,如下所示:
在训练运行之前,包含掩码的数组是单热编码,如下所示:
mask_train = to_categorical(mask_train, 4)
Run Code Online (Sandbox Code Playgroud)
这使得mask_train.shape从去(634, 1, 64, 64)到(2596864, 4).
我的模型紧跟Unet架构,但最终层似乎有问题,因为我无法展平结构以匹配单热编码阵列.
[...]
up3 = concatenate([UpSampling2D(size=(2, 2))(conv7), conv2], axis=1)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(up3)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv8)
up4 = concatenate([UpSampling2D(size=(2, 2))(conv8), conv1], axis=1)
conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(up4)
conv10 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv9)
# here I used number classes …Run Code Online (Sandbox Code Playgroud) python machine-learning image-segmentation deep-learning keras
我正在Tensorflow中实现一个语义分段网络,我正在试图弄清楚如何在训练期间写出标签的摘要图像.我想以与Pascal VOC数据集中使用的类分割注释类似的方式对图像进行编码.
例如,假设我有一个网络,批量大小为1,有4个类.网络的最终预测已经形成[1, 3, 3, 4]
本质上我想要获取输出预测并运行它argmin以获得包含输出中每个点的最可能类的张量:
[[[0, 1, 3],
[2, 0, 1],
[3, 1, 2]]]
Run Code Online (Sandbox Code Playgroud)
带注释的图像使用255种颜色的调色板来编码标签.我有一个包含所有颜色三元组的张量:
[[ 0, 0, 0],
[128, 0, 0],
[ 0, 128, 0],
[128, 128, 0],
[ 0, 0, 128],
...
[224, 224, 192]]
Run Code Online (Sandbox Code Playgroud)
我怎么能获得一个形状的张量[1, 3, 3, 3](一个3x3彩色图像),使用从argmin?获得的值索引到调色板?
[[palette[0], palette[1], palette[3]],
[palette[2], palette[0], palette[1]],
[palette[3], palette[1], palette[2]]]
Run Code Online (Sandbox Code Playgroud)
我可以很容易地包装一些numpy和PIL代码,tf.py_func但我想知道是否有一种纯Tensorflow方式来获得这个结果.
编辑:对于那些好奇,这是我使用numpy的解决方案.它工作得很好,但我仍然不喜欢使用tf.py_func:
import numpy as np
import tensorflow as tf
def voc_colormap(N=256):
bitget = lambda …Run Code Online (Sandbox Code Playgroud)