首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载图像掩码(标签)在Keras中进行图像分割

如何加载图像掩码(标签)在Keras中进行图像分割
EN

Stack Overflow用户
提问于 2017-07-18 23:08:25
回答 3查看 11.7K关注 0票数 11

我使用Tensorflow作为Keras的后端,并试图了解如何将我的标签引入到图像分割培训中。

我使用的是LFW零件数据集,它既有地面真实图像,也有地面真相掩码,看起来如下* 1500张训练图像:

由于我理解这个过程,在培训期间,我加载了两个

  • (X)图像
  • (Y)蒙面图像

为了满足我的需要分批做这件事。现在我的问题是,仅仅将它们(图像和掩模图像)加载为NumPy数组(N,N,3)就足够了,还是需要以某种方式处理/重塑掩码图像。实际上,掩码/标签被表示为R、G、B像素,其中:

  • 255,0,0头发
  • 0,255,0脸
  • 0,0,255背景

我可以这样做,把它正常化为0-1,我不知道我是否应该这么做:

代码语言:javascript
复制
im = Image.open(path)
label = np.array(im, dtype=np.uint8)
label = np.multiply(label, 1.0/255)

所以我以:

  • 1,0,0头发
  • 0,1,0面
  • 0,0,1背景

我在网上找到的一切都使用了tensorflow或keras中的现有数据集。如果您有一个可能被认为是自定义数据集,那么在如何完成任务方面,没有什么是那么清楚的。

我发现这与咖啡有关:https://groups.google.com/forum/#!topic/caffe-users/9qNggEa8EaQ

他们主张将掩膜图像转换为(H, W, 1) (HWC),我的类将分别作为背景、头发和脸的0, 1 ,2

这可能是重复的(类似问题/答案的组合):

如何实现多类语义分割?

Tensorflow:如何创建Pascal VOC风格的图像

我找到了一个将PascalVOC处理为(N,N,1)的示例,我对其进行了调整:

代码语言:javascript
复制
LFW_PARTS_PALETTE = {
    (0, 0, 255) : 0 , # background (blue)
    (255, 0, 0) : 1 , # hair (red)
    (0, 0, 255) : 2 , # face (green)
}

def convert_from_color_segmentation(arr_3d):
    arr_2d = np.zeros((arr_3d.shape[0], arr_3d.shape[1]), dtype=np.uint8)
    palette = LFW_PARTS_PALETTE

    for i in range(0, arr_3d.shape[0]):
        for j in range(0, arr_3d.shape[1]):
            key = (arr_3d[i, j, 0], arr_3d[i, j, 1], arr_3d[i, j, 2])
            arr_2d[i, j] = palette.get(key, 0) # default value if key was not found is 0

    return arr_2d

我认为这可能接近我想要的,但没有着落。我想我应该是(N,N,3),因为我有3节课?上述版本和另一个版本源自这两个地点:

https://github.com/martinkersner/train-CRF-RNN/blob/master/utils.py#L50

resnet/utils.py#L41 (这个链接-热的值)

EN

Stack Overflow用户

回答已采纳

发布于 2017-12-14 03:14:28

因为这是语义分割,所以你要对图像中的每个像素进行分类,所以你最有可能使用的是交叉熵损失。Keras以及TensorFlow都要求您的掩码是一个热编码的,而且,您的掩码的输出维应该是类似批处理、高度、宽度、num_classes <- -在计算交叉熵掩码之前,您必须以与您的掩码相同的方式进行整形,这实际上意味着您必须将您的逻辑和掩码重塑为张量形状-1,num_classes -1表示“任意数量”。

看一下这里的结尾

由于您的问题是关于加载您自己的图像,所以我刚刚构建了一个输入管道,以便自己进行分段,虽然是在TensorFlow中,所以我不知道它是否对您有帮助,请看一看您是否感兴趣:用于分割的Tensorflow输入管道

票数 9
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45178513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档