使用TensorFlow进行图像分割

4
我正在尝试使用TensorFlow来识别我的图像数据中的特征可行性。 我有50x50像素的细胞核灰度图像,希望将其分割 - 每个像素的期望输出应为0或1。 背景为0,细胞核为1。
示例输入:原始输入数据 示例标签(“标签”/真实答案):输出数据(标签) 在我的数据集上使用TensorFlow执行这种类型的机器学习是否可行?我可能会有数千个图像用于训练集。
许多示例中,标签与单个类别对应,例如手写数字数据集的10个数字数组[0,0,0,0,0,0,0,0,0,0,0],但我没有看到太多可以输出更大数组的示例。 我会假设标签将是一个50x50的数组?
此外,您对此类分析的处理CPU时间有什么想法?

有没有找到解决方案?我找不到适用于像素级分割的损失函数。它不是对每个像素进行分类,而是选择一个(x,y)输出张量进行分类。请参见https://dev59.com/Q5jga4cB1Zd3GeqPGCZg - Kendall Weihe
请查看 https://github.com/Russell91/TensorBox。 - Martin Thoma
3个回答

1
是的,这可以通过TensorFlow实现。实际上,有很多方法可以处理它。以下是其中一种非常简单的方法:

将其视为二元分类任务。需要将每个像素分类为前景或背景。选择一组特征来对每个像素进行分类。这些特征可以是局部特征(例如在问题像素周围的补丁)或全局特征(例如图像中像素的位置)。或两者的组合。

然后在此数据集上训练所选的模型(例如NN)。当然,您的结果高度取决于您选择的特征。


如果您可以使用TensorFlow提供的基本操作来表示计算图,并且希望进行图割方法,那么您也可以采用这种方法。然后,您可以选择不使用TensorFlow的优化函数(如反向传播),或者如果计算中存在可微变量,则可以使用TF的优化函数来优化这些变量。


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

1

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

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

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


如果加载的标签图像是(H、W、3)[RGB颜色],您如何将代表标签的这3个维度重塑为1个维度?例如,Pascal VOC的分割图像是彩色编码的,但我相信只有21类。 - AJ Venturella

0
尝试在模型中使用卷积滤波器。堆叠卷积和下采样层。输入应为归一化的像素图像,输出应为掩码。最后一层应为softmaxWithLoss。希望对你有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接