问题标签 [semantic-segmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
113 浏览

python - 即使我对输入进行归一化,binary_corssentropy 损失也是负数

我尝试使用 U-net 来做语义分割问题。掩码图像是二进制的。但是在训练时,我发现我的损失是负数。这里的损失我使用 binary_crossentropy。这是我的代码:

他们都有类型np.float32

然后我使用 imageDataGenerator 来增强图像,代码如下:

My net 的最后一层定义如下:

我真的很好奇为什么会发生这种情况?'sigmoid' 函数的输出是否介于 0 和 1 之间?

如果您有什么想法,请与我讨论。非常感谢!

0 投票
1 回答
1008 浏览

python - 多类图像分类,如何加载掩码

我对Keras完全陌生,我才工作了几天,所以我很缺乏经验。

我能够训练一个与类一起工作的 U-Net 网络,然后输入一个 RGB 图像和一个灰度掩码进行训练,代码如下:

这是我的 U-Net 模型:

现在我必须修改问题并使其成为一个多类分类器,所以我不再使用掩码,而是使用两个掩码。所以我有两种类型的 grasycale 面具(Mca_maskNotMca_mask同一个火车 img),在这种情况下,标准做法是什么?将两个面具合二为一?

0 投票
1 回答
458 浏览

matlab - 通过某些层的逐元素求和组合具有不同输入的两个神经网络

我正在考虑通过激活函数的元素求和将两个卷积神经网络组合成一个。这两个网络都有不同的输入,但它们的架构相似。

我从某些论文和 github 页面中看到,这已经成功地用 Python 实现了。但是,我想知道这是否也可以在 MATLAB 中实现?

我想要重现的一个例子是 Hazirbas 等人的 FuseNet 架构。https://github.com/zanilzanzan/FuseNet_PyTorch

Hazirbas 等人的 FuseNet NN 架构。

是否可以在 MATLAB 中重现这一点,如果可以,我该如何开始?

0 投票
0 回答
1382 浏览

android - 无法在 Android 应用程序中加载 tflite deeplab 分割模型。错误:ByteBuffer 不是有效的 flatbuffer 模型

在将转换后的 TFLite 模型加载到 android 应用程序时遇到问题。

模型:Deeplabv3 Mobilenetv2(在 Pascal VOC 上训练)TFLite 版本:1.10

使用 tflite_convert 将 pb 文件转换为 tflite。(张量流版本:1.11.0)

代码:

错误:

在build.gradle中将tensorflow-lite版本改为'org.tensorflow:tensorflow-lite:0.0.0-nightly',得到如下错误

0 投票
0 回答
498 浏览

python - Keras 结合了两个损失函数的值

我有一个模型内容一个编码器和两个解码器,两个损失函数:

我会将这两种损失的值合并到一个损失值中,并将组合的结果反向。我的问题与我阅读并尝试过的问题很接近,我发现每个分支(输出)都有一个称为损失函数的模型。

0 投票
1 回答
422 浏览

python - 用于在训练之外的对象级别上从语义分割评估预测边界框的度量

语境

为简单起见,让我们假设我们正在对一系列宽度为w、具有三个通道(r、g、b)和n 个标签类的单像素高图像执行语义分割。

换句话说,单个图像可能看起来像:

并有尺寸[3, w]

那么对于具有及其标签的给定图像,w=10基本n=3事实可能是:

我们的模型可能会预测为输出:

为进一步简单起见,让我们通过将模型的输出二值化来转换模型的输出0.9

然后,如果我们要查看每个类的“对象”,边界框(或者在这种情况下只是边界,即[start, stop]像素),我们从二进制掩码中预测的对象“引入”一个对象:

与基本事实的对象相比:

问题

如果我想要一个度量来描述边界的准确性,平均而言,每个对象,什么是合适的度量?

我在训练预测边界框的模型的上下文中理解 IOU ,例如它是一个对象到对象的比较,但是当一个对象可能被分割成多个时应该怎么办?

目标

我想要一个指标,每个班级都给我这样的东西:

但是当一个对象被分割成几个时,我不确定如何最好地解决这个问题......

0 投票
1 回答
1263 浏览

tensorflow - 为什么 DeepLabV3+ 生成的所有图像都只变成黑色?

我尝试使用 DeepLab v3+ 进行语义分割,但结果全黑了。

我把原来的文件删掉了,把原来的数据分别放在ImageSets/,JPEGImages/和SegmentationClass/对应的里面。

我根据 PASCAL VOC 2012 颜色的规则准备了 SegmentationClassRaw 图像。

我编辑了 build_voc2012_data.py 和 segmentation_dataset.py

[build_voc2012_data.py]

[segmentation_dataset.pu]

我像这样运行 train.py 和 vis.py。

[train.py 命令]

[vis.py 命令]

两者都没有问题,但我确认了图片datasets/pascal_voc_seg/exp/train_on_trainval_set/vis/raw_segmentation_results/,这些都是黑色的。为什么?

这是因为火车数据大于 512x512 吗?(训练数据量很大:大约15000x13500)

[构建我的目录]

0 投票
1 回答
1543 浏览

python - TensorFlow Sigmoid Cross Entropy with Logits 用于一维数据

语境

假设我们有一些一维数据(例如时间序列),其中所有序列都有固定长度l

我们要执行语义分割,有n个类:

那么单个示例的输出具有 shape [n, l](即data_formatis not "channels_last")并且批处理输出具有 shape [b, n, l],其中b是批处理中示例的数量。

这些类是独立的,所以我的理解是使用sigmoid交叉熵在这里适用于损失而不是 softmax 交叉熵。


问题

关于预期格式和使用,我有一些相关的小问题tf.nn.sigmoid_cross_entropy_with_logits

  1. 由于网络输出的张量与批处理标签的形状相同,我应该在输出 logits 的假设下训练网络,还是采用 keras 方法(参见 keras 的binary_crossentropy)并假设它输出概率?

  2. 鉴于一维分割问题,我应该呼吁tf.nn.sigmoid_cross_entropy_with_logits

    • data_format='channels_first'(如上图),或
    • data_format='channels_last' (例如.T)

    如果我想为每个频道单独分配标签?

  3. 传递给优化器的损失操作应该是:

    • tf.nn.sigmoid_cross_entropy_with_logits(labels, logits),
    • tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels, logits)), 或者
    • tf.losses.sigmoid_cross_entropy?

代码

这个Colab突出了我的困惑,并证明了这data_format确实很重要......,但文档没有明确说明预期的内容。

虚拟数据

损失

tf.nn

tf.reduced_mean(tf.nn)

损失函数

测试等效性

数据格式等效

tf.reduce_mean 和 tf.losses 之间的等价性

0 投票
1 回答
651 浏览

python - 人类分割训练网络

我正在尝试训练一个语义分割网络(E-Net),特别是用于高质量的人体分割。为此,我收集了“监督人员”数据集,并使用提供的 API 提取了注释掩码。该数据集包含高质量的掩码,因此我认为与例如 COCO 数据集相比,它将提供更好的结果。

监督 - 下面的例子:原始图像 - 基本事实。

在此处输入图像描述

首先,我想给出模型的一些细节。网络本身 ( Enet_arch) 从最后一个卷积层返回 logits 和通过 产生的概率tf.nn.sigmoid(logits,name='logits_to_softmax')

我在地面实况上使用 sigmoid 交叉熵,在学习率上使用返回的 logits、动量和指数衰减。模型实例和训练管道如下。

我首先尝试在单个图像上过度拟合模型,以识别该网络可以捕获的细节深度。为了提高输出质量,我将所有图像的大小调整为1080p,然后再将它们输入网络。在这个试验中,我对网络进行了 10K 次迭代训练,总误差达到了 ~30%(从 捕获tf.losses.get_total_loss())。

如下所示,在单个图像上训练的结果非常好。

监督 - 下面的示例:(1)损失(2)输入(调整大小之前)| 基本事实(调整大小之前)| 1080p 输出

在此处输入图像描述

在此处输入图像描述

后来,我尝试在整个数据集上进行训练,但训练损失会产生很多波动。这意味着在某些图像中网络表现良好,而在另一些图像中则不然。作为 743360 次迭代(即 160 个 epoch,因为训练集包含 4646 张图像)后的结果,我停止了训练,因为我所做的超参数选择显然有问题。

监督 - 下面的示例:(1)损失(2)学习率(3)输入(调整大小之前)| 基本事实(调整大小之前)| 1080p 输出

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

另一方面,在训练集图像的某些实例上,网络会产生如下所示的公平(虽然不是很好)结果。

监督 - 下面的示例:输入(调整大小之前)| 基本事实(调整大小之前)| 1080p 输出

在此处输入图像描述

为什么我在这些训练实例上有这些差异?我应该对模型或超参数进行任何明显的更改吗?这个模型是否可能不适合这个用例(例如低网络容量)?

提前致谢。

0 投票
2 回答
1463 浏览

android - Tensorflow-lite - 从量化模型输出中获取位图

我们正在使用 tensorflow-lite 在 android 中进行语义分割应用。使用的“.tflite”deeplabv3 模型具有类型为 (ImageTensor) uint8[1,300,300,3] 的输入和类型为 (SemanticPredictions) uint8[300,300] 的输出。我们成功了能够在 tflite.run 方法的帮助下运行模型并以 ByteBuffer 格式获取输出。但是我们无法在 java 中从该输出中提取图像。使用 pascal voc 数据集训练并实际转换为的模型TF 模型中的 tflite 格式:' mobilenetv2_dm05_coco_voc_trainval '。

该问题似乎类似于以下 stackoverflow 问题:tensorflow-lite - using tflite Interpreter to get an image in output

处理浮点数据类型转换的相同问题似乎已在 github 问题中得到修复:https ://github.com/tensorflow/tensorflow/issues/23483

那么,我们如何才能正确地从 UINT8 模型输出中提取分割掩码呢?