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

标签 python deep-learning caffe conv-neural-network pycaffe

我正在尝试使用 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/

相关文章:

python - numpy 3D图像数组到2D

python - PyTorch nn. 格式正确的输入和权重上的线性层输出 nan

machine-learning - 概率分布中的 argmax 比 softmax 中的随机采样更好的策略?

apache-spark - 如何在 EC2 Spark 集群上训练深度神经网络(tensorflow)?

machine-learning - 是否有必要为卡住层定义后向函数?

machine-learning - 如何在CNN Caffemodel中将4096维特征向量减少为1024维向量?

caffe - 有什么方法可以减少 GPU Memory Caffe 的使用吗?

python - 关键词多词时高效搜索关键词

python - 实现我自己的高级测试脚本语言

python - 如何遍历数据框,向系列添加新字段,然后将该系列附加到 csv?