标签: semantic-segmentation

什么是"语义分割"与"分割"和"场景标记"相比?

语义分割只是一个Pleonasm还是"语义分割"和"分割"之间存在差异?"场景标记"或"场景解析"有区别吗?

像素级和像素级分割有什么区别?

(旁边问题:当你有这种像素方式的注释时,你是否可以免费获得物体检测,还是还有什么可做的?)

请提供您的定义来源.

使用"语义分割"的来源

使用"场景标签"的来源

使用"像素级"的来源

  • Pinheiro,Pedro O.和Ronan Collobert:"从卷积网络的图像级到像素级标签." 2015年计算机视觉和模式识别会议论文集.(见http://arxiv.org/abs/1411.6228)

使用"pixelwise"的来源

谷歌Ngrams

"语义分割"似乎最近比"场景标记"更多地使用

在此输入图像描述

image-processing object-detection computer-vision image-segmentation semantic-segmentation

92
推荐指数
3
解决办法
5万
查看次数

使用TensorRT部署语义分段网络(U-Net)(不支持上采样)

我正在尝试使用TensorRT部署经过培训的U-Net。使用Keras(以Tensorflow作为后端)对模型进行了训练。代码与这一代码非常相似:https : //github.com/zhixuhao/unet/blob/master/model.py

当我将模型转换为UFF格式时,使用如下代码:

import uff
import os
uff_fname = os.path.join("./models/", "model_" + idx + ".uff")
uff_model = uff.from_tensorflow_frozen_model(
    frozen_file = os.path.join('./models', trt_fname), output_nodes = output_names, 
    output_filename = uff_fname
)
Run Code Online (Sandbox Code Playgroud)

我将收到以下警告:

Warning: No conversion function registered for layer: ResizeNearestNeighbor yet.
Converting up_sampling2d_32_12/ResizeNearestNeighbor as custom op: ResizeNearestNeighbor
Warning: No conversion function registered for layer: DataFormatVecPermute yet.
Converting up_sampling2d_32_12/Shape-0-0-VecPermuteNCHWToNHWC-LayoutOptimizer as custom op: DataFormatVecPermute
Run Code Online (Sandbox Code Playgroud)

我试图通过用upsampling(双线性插值)替换upsampling层并转置卷积来避免这种情况。但是转换器会抛出类似的错误。我检查了https://docs.nvidia.com/deeplearning/sdk/tensorrt-support-matrix/index.html,似乎还不支持所有这些操作。

我想知道是否有解决此问题的方法?TensorRT还喜欢其他格式并支持上采样吗?还是可以用其他受支持的操作替换它?

我还看到某处可以添加自定义操作来替换那些不支持TensorRT的操作。虽然我不太确定工作流程如何。如果有人可以指出自定义图层的示例,那也将非常有帮助。

先感谢您!

python keras tensorflow tensorrt semantic-segmentation

17
推荐指数
1
解决办法
1008
查看次数

损失函数正在减少但度量函数保持不变?

我正在研究医学图像分割。我有两节课。0 级作为背景,1 级作为病变。由于数据集高度不平衡,我使用损失函数作为(1 - 加权骰子系数)和度量函数作为骰子系数。我已将数据集从 0-255 标准化为 0-1。我正在使用带有 tensorflow 后端的 keras 来训练模型。在训练 UNet++ 模型时,我的损失函数随着每个时期而减少,但我的指标保持不变。我无法理解为什么随着损失按预期减少,指标是恒定的?另外,我无法理解,为什么当骰子系数返回 0 到 1 之间的值时损失大于 1?

这是我的损失函数:

def dice_loss(y_true, y_pred):
    smooth = 1.
    w1 = 0.3
    w2 = 0.7

    y_true_f = K.flatten(y_true[...,0])
    y_pred_f = K.flatten(y_pred[...,0])
    intersect = K.abs(K.sum(y_true_f * y_pred_f, axis = -1))
    denom = K.abs(K.sum(y_true_f, axis = -1)) + K.abs(K.sum(y_pred_f, axis = -1))
    coef1 = (2 * intersect + smooth) / (denom + smooth)

    y_true_f1 = K.flatten(y_true[...,1])
    y_pred_f1 = K.flatten(y_pred[...,1])
    intersect1 = K.abs(K.sum(y_true_f1 * y_pred_f1, axis …
Run Code Online (Sandbox Code Playgroud)

python image-segmentation keras tensorflow semantic-segmentation

11
推荐指数
1
解决办法
1086
查看次数

在 unet 架构中使用自定义权重图的正确方法

u-net 架构中有一个著名的技巧,就是使用自定义权重图来提高准确性。下面是它的详细信息:

在此处输入图片说明

现在,通过在这里和其他多个地方询问,我了解了 2 种方法。我想知道哪个是正确的,或者还有其他更正确的正确方法吗?

  1. 首先是torch.nn.Functional在训练循环中使用方法:

    loss = torch.nn.functional.cross_entropy(output, target, w) 其中 w 将是计算出的自定义重量。

  2. 二是reduction='none'在训练循环外调用损失函数时 使用criterion = torch.nn.CrossEntropy(reduction='none')

    然后在训练循环中乘以自定义权重:

    gt # Ground truth, format torch.long
    pd # Network output
    W # per-element weighting based on the distance map from UNet
    loss = criterion(pd, gt)
    loss = W*loss # Ensure that weights are scaled appropriately
    loss = torch.sum(loss.flatten(start_dim=1), axis=0) # Sums the loss per image
    loss = torch.mean(loss) # Average across a batch
    
    Run Code Online (Sandbox Code Playgroud)

现在,我有点困惑哪个是正确的,或者还有其他方法,还是两者都是正确的?

python image-segmentation pytorch semantic-segmentation

9
推荐指数
1
解决办法
1545
查看次数

语义分段丢失功能

对于二元分割问题,以加权方式组合交叉熵损失和骰子得分是否有意义?

优化骰子得分会产生超过分割的区域,而交叉熵损失会为我的应用产生欠分割区域.

neural-network image-segmentation deep-learning tensorflow semantic-segmentation

8
推荐指数
1
解决办法
1863
查看次数

U-net与FCN背后的直觉用于语义分割

我不太了解以下内容:

Shelhamer等人提出的用于语义分割的FCN中,他们提出了像素到像素的预测以构造图像中对象的蒙版/精确位置。

在用于生物医学图像分割的FCN的略微修改版本中,U-net的主要区别似乎是“与从收缩路径中相应裁剪的特征图的串联”。

现在,为什么此功能特别是在生物医学细分方面有所作为?我可以指出的是,生物医学图像与其他数据集的主要区别在于,在生物医学图像中,定义对象的特征集不如每天常见的对象丰富。数据集的大小也受到限制。但是,此额外功能是否受这两个事实或其他原因的启发?

artificial-intelligence neural-network image-segmentation semantic-segmentation convolutional-neural-network

7
推荐指数
1
解决办法
3654
查看次数

如何在 AWS Sagemaker 中检索分段掩码中使用的标签

从分段掩码中,我试图检索掩码中表示的标签。

这是我在 AWS Sagemaker 中通过语义分割模型运行的图像。

摩托车和其他一切背景

用于进行预测和显示掩码的代码。

from sagemaker.predictor import json_serializer, json_deserializer, RealTimePredictor
from sagemaker.content_types import CONTENT_TYPE_CSV, CONTENT_TYPE_JSON

%%time
ss_predict = sagemaker.RealTimePredictor(endpoint=ss_model.endpoint_name, 
                                     sagemaker_session=sess,
                                    content_type = 'image/jpeg',
                                    accept = 'image/png')

return_img = ss_predict.predict(img)

from PIL import Image
import numpy as np
import io

num_labels = 21
mask = np.array(Image.open(io.BytesIO(return_img)))
plt.imshow(mask, vmin=0, vmax=num_labels-1, cmap='jet')
plt.show()
Run Code Online (Sandbox Code Playgroud)

该图像是创建的分割蒙版,它代表摩托车,其他一切都是背景。

[分段掩码[2]

从代码中可以看出,有 21 个可能的标签,其中 2 个用于蒙版,一个用于摩托车,另一个用于背景。我现在想弄清楚的是,如何在 21 个可能的选项中打印出这个掩码中实际使用的标签?

如果您需要任何进一步的信息,请告诉我,我们非常感谢您的帮助。

python python-imaging-library mxnet semantic-segmentation amazon-sagemaker

7
推荐指数
1
解决办法
181
查看次数

用于语义分割的 ImageDataGenerator

我正在尝试使用 Keras 进行语义分割,并且在尝试加载图像时使用flow_from_directory方法出现此错误。

Found 0 images belonging to 0 classes.
Found 0 images belonging to 0 classes.
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow.keras.preprocessing.image import ImageDataGenerator

data_generator = ImageDataGenerator()
train_generator = data_generator.flow_from_directory(
                                        directory="../input/Training_dataset/Images",
                                        target_size=(IMG_SIZE, IMG_SIZE),
                                        batch_size=16,
                                        class_mode=None,
                                        classes=None
                                        )

mask_generator = data_generator.flow_from_directory(
    directory="../input/Training_dataset/Masks/all",
    class_mode=None,
    classes=None,
    batch_size = 1,
    )
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这个问题,但解决方案在 Keras 中不起作用,用于语义分割,flow_from_directory() 错误

python keras tensorflow semantic-segmentation

6
推荐指数
1
解决办法
6161
查看次数

如何调整图像分割掩模的大小?

我为每个图像都有一个二进制掩码,每个掩码像素的值为 0 或 255。现在,因为我的图像分割需要固定大小的图像,所以我必须调整图像和掩码的大小。但是,当我调整图像大小时,掩码中会有一些位置的值大于 0 但小于 255。我如何知道要保留哪一个?因为图书馆要求只能有0或255。请帮助我,非常感谢。

computer-vision image-segmentation deep-learning conv-neural-network semantic-segmentation

6
推荐指数
2
解决办法
5172
查看次数

运行时错误 - 张量的元素 0 不需要 grad 并且没有 grad_fn

我正在使用 Unet 模型进行语义分割 - 我有一个自定义的图像数据集及其掩码,均为 .png 格式。我查看了在线论坛并尝试了一些东西,但没有多少效果?任何有关如何解决错误或改进代码的建议都会有所帮助。

model.eval()
with torch.no_grad():
    for xb, yb in val_dl:
        yb_pred = model(xb.to(device))
        # yb_pred = yb_pred["out"].cpu()
        print(yb_pred.shape)
        yb_pred = torch.argmax(yb_pred,axis = 1)     
        break
    
    print(yb_pred.shape)
    

criteron = nn.CrossEntropyLoss(reduction = 'sum')
opt = optim.Adam(model.parameters(), lr = 3e-4)

def loss_batch(loss_func, output, target, opt = None):
    loss = loss_func(output, target)
    
    if opt is not None:
        opt.zero_grad()
        loss.backward()
        opt.step()        
    return loss.item(), None

lr_scheduler = ReduceLROnPlateau(opt, mode = 'min', factor = 0.5, patience= 20, verbose = 1)

def get_lr(opt):
    for …
Run Code Online (Sandbox Code Playgroud)

python pytorch semantic-segmentation

6
推荐指数
1
解决办法
2万
查看次数