gpt4 book ai didi

python - Caffe:如何加载图像数据进行语义分割

转载 作者:行者123 更新时间:2023-11-28 22:35:18 25 4
gpt4 key购买 nike

我正在尝试将 Caffe 用于简单的语义图像分割任务(即将图像中的每个像素分类为属于 2 个类之一)。

我遇到了两个问题:1) 数据准备,以及 2) 网络层定义。

我试着阅读了一些例子。

虽然这些链接很有用,但它们并不特别适用于 2D 图像的语义分割。

我非常感谢(即使是简短的)以下流畅管道中的代码示例:

  1. 以正确的格式准备图像标签(二维数组)。使用 MemoryData 或 HDF5 作为输入的示例将是完美的!
  2. 正确定义网络prototxt以输入数据和上述标签。

谢谢!

最佳答案

虽然在 Caffe 主线程上没有关于此的任何教程,但有很多关于在 Caffe 中进行语义分割的教程。对于初学者,您应该查看 Fully Convolutional Networks master 的教程以及 tutorial on using SegNet (GitHub 单独 here )或使用 DeepLab .这些都是使用 Caffe 进行语义分割的最先进方法。

为了更直接地回答您的问题,

1)数据准备:作为对最近的深度学习方法表现出兴趣的人,您可能会发现没有一种方法可以进行数据准备。它们既取决于数学上的可能性(末端具有完全连接层的网络需要相同比例的图像,通常大小相同),也取决于提高性能的方法(均值减法)。也就是说,有一些常见的技术(为了简单起见,我假设在这一点上你可以使用不同比例的图像,就像完全卷积网络一样。如果你想看看裁剪是如何工作的,有一个很好的在 Caffe 上的 ImageNet 教程中解释了这种类型的数据准备)。使用 Transformer 类,大多数人会执行以下操作:

transformer.set_transpose('data', (2,0,1))  # move image channels to outermost dimension
transformer.set_mean('data', mu) # subtract the dataset-mean value in each channel
transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data', (2,1,0)) # swap channels from RGB to BGR

在分割的上下文中,这就是您需要做的全部。语义标签采用图像本身的形式(通常)。例如,在 Pascal VOC Caffe 示例中,您将标签读为

n.data, n.label = L.Python(module = 'pascal_multilabel_datalayers', layer = datalayer, ntop = 2, param_str=str(data_layer_params))

**2) 网络层定义**

对于网络层定义,请记住神经网络的一大亮点是除了输入和输出之外,它们还可以处理各种数据类型。因此,您所有的中间层都是相同的,实际上在您的情况下输入也是相同的。最后你需要的是用来评估相对于图像的交叉熵损失的东西。对于 DeepLab,他们写了一个 "Interp" layer这是做什么的。另一方面,SegNet 写了一个 "Upsample" layer type ,他们在 softmax 之前使用它来使网络输出与标签大小相同,然后是 simply use a Softmax

我想所有这一切的不利之处在于,在 Caffe 中还没有一种明确的方法可以正确地做到这一点,但好处是有很多成功的例子。希望这有帮助

关于python - Caffe:如何加载图像数据进行语义分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com