【问题标题】:Image Segmentation with TensorFlow使用 TensorFlow 进行图像分割
【发布时间】:2016-07-23 20:19:33
【问题描述】:

我正在尝试了解使用 TensorFlow 来识别图像数据中的特征的可行性。我有 50x50px 的原子核灰度图像,我想对其进行分割 - 每个像素的所需输出将是 0 或 1。 0为背景,1为核心。

示例输入:raw input data

示例标签(“标签”/真正的答案是什么):output data (label)

甚至可以使用 TensorFlow 在我的数据集上执行这种类型的机器学习吗?我可能有数千张图像用于训练集。

很多例子都有一个标签对应一个类别,例如一个10位数字数组[0,0,0,0,0,0,0,0,0,0,0]为手写digit 数据集,但我还没有看到很多可以输出更大数组的示例。我会假设我的标签是 50x50 数组?

另外,关于这次分析的处理 CPU 时间有什么想法吗?

【问题讨论】:

标签: python tensorflow image-segmentation image-masking


【解决方案1】:

是的,这可以通过 TensorFlow 实现。事实上,有很多方法可以接近它。这是一个非常简单的:

认为这是一个二元分类任务。每个像素都需要分类为前景或背景。选择一组特征,每个像素将根据这些特征进行分类。这些特征可以是局部特征(例如相关像素周围的补丁)或全局特征(例如图像中像素的位置)。或者两者的结合。

然后在此数据集上训练您选择的模型(例如 NN)。当然,您的结果在很大程度上取决于您选择的功能。


如果您可以使用 TensorFlow 提供的原语将该计算表示为计算图,您也可以使用 graph-cut approach。然后,您可以不使用 TensorFlow 的优化函数(例如反向传播),或者如果您的计算中有一些可微变量,您可以使用 TF 的优化函数来优化这些变量。

【讨论】:

  • OP 要求使用 TF 进行图像分割,我在这里假设深度学习。我们已经知道 DNN 适用于分割任务。大多数文献使用反卷积或回归来产生密集预测。但是,Tensorflow 似乎没有一个很好的方法来计算损失值。 SoftmaxWithLoss() 只接受 [batch_size class_num] 输入,这在 OP 案例中显然没有帮助。既然 OP 接受了你的回答,我希望他能解释一下他是如何解决他的问题的。
【解决方案2】:

SoftmaxWithLoss() 适用于您的图像分割问题,如果您将预测标签和真实标签映射从 [batch, height, width, channel] 重塑为 [N, channel]。

在您的情况下,您的最终预测图将是通道 = 2,并且在重塑后,N = batchheightwidth,然后您可以在 tensorflow 中使用 SoftmaxWithLoss() 或类似的损失函数来运行优化。

请参阅this question,这可能会有所帮助。

【讨论】:

  • 如果正在加载的标签图像是(H,W,3)[RGB颜色],您如何将代表标签的那3个维度重塑为1个维度?例如 Pascal VOC 的分割图像是彩色编码的,但我相信只有 21 个类。
【解决方案3】:

尝试为模型使用卷积过滤器。卷积层和下采样层的堆叠。输入应该是归一化的像素图像,输出应该是掩码。最后一层应该是 softmaxWithLoss。 HTH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2016-12-03
    相关资源
    最近更新 更多