问题标签 [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 投票
2 回答
9886 浏览

image-segmentation - 用于pytorch中图像分割的通道方式CrossEntropyLoss

我正在做一个图像分割任务。总共有 7 个类,所以最终的输出是一个类似于 [batch, 7, height, width] 的张量,它是一个 softmax 输出。现在直观地我想使用 CrossEntropy 损失,但 pytorch 实现不适用于通道明智的 one-hot 编码向量

所以我打算自己做一个函数。在一些stackoverflow的帮助下,我的代码到目前为止看起来像这样

我得到两个错误。代码本身提到了一个,它需要一个热向量。第二个说如下

例如,我试图让它解决一个 3 类问题。所以目标和标签是(不包括简化的批处理参数!)

目标:

[[0 1 1 0 ] [0 0 0 1 ] [1 0 0 0 ] [0 0 1 1 ] [0 0 0 0 ] [1 1 0 0 ] [0 0 0 1 ] [0 0 0 0 ] [1 1 1 0 ] [0 0 0 0 ] [0 0 0 1 ] [1 1 1 0 ]

标签:

[[0 1 1 0 ] [0 0 0 1 ] [1 0 0 0 ] [0 0 1 1 ] [.2 0 0 0] [.8 1 0 0 ] [0 0 0 1 ] [0 0 0 0 ] [1 1 1 0 ] [0 0 0 0 ] [0 0 0 1 ] [1 1 1 0 ]

那么如何修复我的代码来计算通道明智的 CrossEntropy 损失?

0 投票
1 回答
1964 浏览

python - 如何在 Keras 中保留最大索引来实现 SegNet

我正在尝试在 Keras(tf 后端)中实现 SegNet 来进行语义分割。

SgeNet 最令人印象深刻的技巧是将最大池索引传递给上采样层。但是,我在 github 上找到了许多 Keras 中的 SegNet 实现(例如),仅使用简单的 UpSampling(称为 SegNet-Basic)。

我注意到它可以在 Tensorflow 中使用“ tf.nn.max_pool_with_argmax ”来实现。所以我想知道是否有任何类似的方法来获取最大池索引并将它们放回 Keras 中的上采样中。

提前致谢。

0 投票
0 回答
662 浏览

tensorflow - 如何改进 deeplabV3+ 的 miou?

目前,我正在努力使用在我自己的数据集上训练的deeplabV3+来改进语义分割问题的结果。我已经使用模型动物园中的不同预训练模型成功训练了 deeplabV3+几次,全部基于xception_65,但我的结果保持在相同的miou范围内,大约在这个区间[10, 11]附近。我只有一个具有 11GB GPU 内存的 GPU 可供使用。我的数据集有8 个类,对象大小从小到大不等,而且非常不平衡。以下是标签权重:[1, 4, 4, 17, 42, 36, 19, 20]。在我的数据集中,我有757个训练实例和100 个 验证

训练时的一般趋势是:前 10k 次迭代我的损失减少了,但随后它只是振荡。
我试过了:

  • 调整参数,例如:学习率、last_layer_gradient_multiplier、权重衰减

  • 训练各种图像尺寸321、513、769

  • 在这个公式中使用上述权重进行某种加权

    权重 = tf.to_float(tf.equal(scaled_labels, 0)) * 1 + tf.to_float(tf.equal(scaled_labels, 1)) * 4 + tf.to_float(tf.equal(scaled_labels, 2)) * 4 + tf.to_float(tf.equal(scaled_labels, 3)) * 17 + tf.to_float(tf.equal(scaled_labels, 4)) * 42 + tf.to_float(tf.equal(scaled_labels, 5)) * 36 + tf. to_float(tf.equal(scaled_labels, 6)) * 19 + tf.to_float(tf.equal(scaled_labels, 7)) * 20 + tf.to_float(tf.equal(scaled_labels, ignore_label)) * 0.0

我在没有微调批量标准化参数(fine_tune_batch_norm = False)的情况下进行了训练。尽管我也尝试使用 321 裁剪大小训练这些参数(fine_tune_batch_norm = True),以便能够在我的 GPU中适应12的批量大小。

关键是我需要一些技巧来弄清楚我可以做些什么来改善这些结果。你们有什么感想?我需要更多数据来增加我的 miou 或硬件吗?

0 投票
1 回答
1377 浏览

tensorflow - tensorflow deeplabv3+ 类权重

我使用最新版本的 deeplab(v3+) 来训练我自己的包含 6 个类的数据集。我能够训练我的数据集,但由于我的标签非常不平衡,我想用一个类特定的值对每个类进行加权。

以下是我使用 SegNet 实现这一点的方法

这将如何与 deeplab 网络一起工作?

0 投票
0 回答
418 浏览

python - 我的图像分割结果图在白色补丁中包含黑色格子

在此处输入图像描述我正在使用 Pytorch 0.4.0 使用类似 UNet 的 CNN 架构进行图像分割。它在最终分割结果中将前景标记为 1,背景标记为 0。我使用预训练的 VGG 特征提取器作为我的编码器,所以我需要多次对编码器输出进行上采样。但结果显示结果中有一个奇怪的格子部分,如下所示:

我怀疑这些不同形状的黑色部分是由反卷积层引起的。官方文档中说反卷积层在输入像素之间添加(s-1)零。反卷积层的超参数如下所示:

kernel_size=3,stride=2,padding=1,output_padding=1

(output_padding 用于拟合跳跃连接特征大小,例如,输入大小为 40*30,我希望它在一个反卷积层中放大两倍,根据我的计算公式:out=s(in-1) +k-2p,我必须使用 padding 1 和 output-padding 1 来保持大小,否则可能有其他更好的选择我不知道。)

我想知道生成黑色格子的原因。它们看起来像网格或正方形部分。以及如何解决它。此外,我需要将所有反卷积层超参数调整为一个统一或单独修改它们?

环境:Ubuntu 16.04,Pytorch 0.4.0,GTX 1080Ti,上采样的架构是三层deconv,一层一层。

更新

在我修改了 deconv 超参数之后,(受图像分割结果使用中的噪声启发

kernel_size=4,stride=2,padding=1

从而避免输出填充并满足大小。但是在 100 epoch 之后我遇到了类似的问题。

又经过 30 个 epoch 的训练,看起来是这样的,在此处输入图像描述

刚刚散落的黑点,似乎这些黑点只是改变了它们的parttern并跳转到另一个parttern,我不知道为什么会发生。我不知道如何修改我的网络超参数。
0 投票
1 回答
511 浏览

caffe - 检查失败:top_shape[j] == bottom[i]->shape(j): for Concat layer in 3D data

我正在尝试caffe. 不同体积的宽度、高度和深度是不同的。HDF5数据集中第一个体积的输入形状是1 1 104 281 389(NxCxDxHxW),当它到达Concat layer(concat_d2c_u2a-b)时,它会引发错误,它的输入具有以下两种形状:

  • 1 256 19 64 91 scaled2c_relu_d2c_0_split_1
  • 1 512 12 56 84 比例尺u2a

我该如何解决这个问题?是因为维度的顺序吗?

0 投票
1 回答
2154 浏览

deep-learning - 语义分割中的条件随机场

CRF(条件随机场)是否仍在语义分割任务中积极使用,或者当前的深度神经网络是否使它们变得不必要?我已经在学术论文中看到了这两个答案,并且由于实施和推断似乎相当复杂,因此我想在尝试之前对它们发表意见。

谢谢

0 投票
1 回答
4365 浏览

tensorflow - 如何在tensorflow中使用pb文件导入模型

我被分配了一项任务,使用 tensorflow 和 python 对 deeplab V3+ 进行微调。为此,我从 deeplab github 页面下载了冻结模型。! 示例图像

我下载了这个文件。然后我在网上搜索了如何使用这些文件创建模型 示例图像

有仅使用 .ckpt 文件和 .meta 文件创建模型的方法,但我没有这些文件

只有几种方法可用于从 .pb 文件创建图形。我不知道使用 .pb 文件创建图表后该怎么做。我使用这些文件导入冻结模型。先感谢您

0 投票
1 回答
4264 浏览

tensorflow - 平滑骰子损失如何区分?

我正在通过最小化dice_loss普遍用于此问题的函数来训练 keras 中的 U-Net:改编自此处此处

这种实现不同于传统的骰子损失,因为它有一个平滑项来使其“可微”。我只是不明白如何添加smooth术语而不是1e-7分母中的内容会使其变得更好,因为它实际上会改变损失值。我已经通过在具有常规dice实现的测试集上使用经过训练的 unet 模型来检查这一点,如下所示:

有人可以解释为什么通常使用平滑骰子损失吗?

0 投票
2 回答
99 浏览

python - tensorflow 是否提供类似 caffe average_loss 操作的操作?

由于 gpu 的限制,我想在每两步训练后更新我的体重。具体来说,网络将首先计算第一个批输入并保存损失。然后网络计算下一批输入并平均这两个损失,并更新一次权重。它喜欢 caffe 中的 average_loss op,例如()fcn-berkeley。以及如何计算 batchnorm 更新操作。