问题标签 [deeplab]

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 投票
0 回答
145 浏览

python - 如何通过 Resnet、FCn、DeepLab 图像分割评估解决 GPU OOM 问题?

我正在学习有关 Python 中图像分割的 youtube 教程:link

本教程基于我为细化目的而参考的其他教程,特别是这个: OpenCV Pytorch Segmentation

我正在使用具有 8 GB GPU 内存的 NVDIA 2070 显卡。

我的问题是,原始教程通过 FCN 教授了使用 Resnet 的语义分割程序的基本 CPU 实现。我想以此为基础来利用 GPU,所以我找到了后一个教程。我在这方面并没有任何经验,但我想出了如何在 GPU 上运行它并立即遇到 GPU OOM 问题:


运行时错误:CUDA 内存不足。尝试分配 184.00 MiB(GPU 0;8.00 GiB 总容量;5.85 GiB 已分配;26.97 MiB 空闲;PyTorch 总共保留 5.88 GiB)


当我在小图像上运行此程序时,或者将高清图像的图像质量降低到 50% 分辨率时,我不会收到 OOM 错误。

我的戳戳和催促让我相信我的 OOM 是跨此任务分配内存的结果。所以现在我尝试实现替代的 DeepLab 解决方案,希望它能更有效地分配内存,但事实并非如此。

这是我的代码:

我想知道的是,是否有解决 GPU 问题的方法?当我拥有一个通常强大的 GPU 时,我不想将自己限制在 CPU 渲染上,每张图像大约需要一分钟。正如我所说,我对其中的大部分内容都很陌生,但我希望有一种方法可以更好地在这个过程中分配内存。

我有一些潜在的解决方案,但我无法找到实施资源。

  1. (糟糕的解决方案)在 GPU 接近内存末尾时限制计算并将任务的其余部分切换到 CPU。我不仅觉得这很糟糕,而且我也没有真正看到如何在任务中实现 GPU CPU 切换。

  2. (更好)通过将图像分割成可管理的位来修复内存分配,并将这些位保存到临时文件中,然后最后将它们组合起来。

  3. 两者的某种组合。

现在我担心的是分割图像会降低结果的质量,因为每一块都不会在上下文中,我需要某种智能拼接,这超出了我的工资等级。

所以我通常会问是否有资源来解决这些可能的解决方案,或者是否有更好的解决方案。

最后,我的实现是否有问题导致 GPU OOM 错误?我不知道是我的代码没有优化,还是 DeepLab 和 FCN 都只是超级内存密集型并且从我的角度来看是不可优化的。任何帮助将不胜感激!谢谢!

0 投票
1 回答
179 浏览

opencv - 基于图像轮廓细化分割掩码

我有一个图像,我将绿色边框作为分割蒙版的轮廓。我希望根据在原始图像上找到的轮廓来细化这个轮廓,以获得像第二张图像中的蒙版 - 其中头发的边缘更加精致。

分割蒙版轮廓 在此处输入图像描述

我已经尝试过分段掩码的膨胀和腐蚀的组合,但它感觉不像是一个通用的解决方案——因为它涉及手动调整内核大小。

有更好的方法吗?

0 投票
1 回答
139 浏览

tensorflow - 将我的数据集转换为 TFrecord 格式以在 colab 中运行 Deeplabs 时出错

我正在尝试在 Colab 中的自定义数据集上运行 Deeplabs。我想将我的数据集转换为 TFRecord 格式,但是当我运行 build_voc2012_data.py 文件时出现错误。有人能告诉我为什么我会得到它以及如何摆脱它吗?

0 投票
0 回答
25 浏览

python - 以 TFRecord 格式为 Deeplabs v3 plus 转换我的自定义 skin_lesion 数据集 600 图像失败

我已将 deeplabs 存储库克隆到我的驱动器,并将包含 600 个图像的数据集添加到 deeplabs/datasets/skin_lesion 文件夹中。但是当我运行脚本时,转换没有发生。我该如何解决这个问题?

当我运行时显示以下

但是没有转换或创建任何新文件夹。

0 投票
1 回答
160 浏览

python - 获得 Deeplab 对小/欠平衡类的更严格的分割结果

我已经在 CelebAMask-HQ 数据集 ( https://github.com/switchablenorms/CelebAMask-HQ ) 上训练了官方的 Tensorflow deeplab 模型 ( https://github.com/tensorflow/models/tree/master/research/deeplab ) ,拥有一个可以语义分割所有面部片段(例如眼睛、鼻子等)的模型。我在超参数设置上花费的时间很少,并使用默认设置:

我唯一调整的是类权重,其中我根据总数据集中属于每个类的所有像素的比率计算了类权重。这些计算的比率是:

作为类权重,我取1/<class_ratio>,所以背景的类权重是 3.57,眉毛的类权重是 121.95。

最后,我做了一些数据增强,比如旋转、翻转和改变亮度。

我的结果相当不错,但是当我将训练集的一些图像输入到模型中时,有一些值得注意的地方。在原始分段下方: org_mask

这里是分段结果: 分段结果

如您所见,分割的结果非常好,但尤其是眼睛、眉毛和鼻子等较小的类别并没有像我希望的那样“紧密分割”。基本上对于所有被模型分割的图像,眼睛、鼻子和眉毛都大于原始分割。因此,我想更改一些超参数以获得更小类的更严格的分割结果。

关于为较小的班级获得更严格的结果的可能方法有什么建议吗?我目前根据总数据集中属于每个类的像素的绝对百分比计算类权重的方法效果很好,但也许另一种计算类权重的方法效果更好?还是能够进行精细分割的不同底层模型结构?

任何帮助表示赞赏。谢谢!

0 投票
1 回答
134 浏览

python - 为什么我在 WiSe 数据集中使用 DeepLab v3+ 得到完全零预测,即使损失不断减少?

我正在尝试在 WiSe 数据集( https://cvhci.anthropomatik.kit.edu/~mhaurile/wise/ )上训练DeepLab v3+ 模型( https://github.com/tensorflow/models/research/deeplab/) . 我已经修改了提供的脚本中的参数并开始运行脚本,但即使损失不断减少(从步骤 10 的大约 2.7 到步骤 100 的大约 1.9),我在导出的预测中得到全零检查站。即使在每张火车图像上,我都得到了一个全零的预测。 数据集信息(我已经处理了数据集以满足我的需要): 训练图像:1222 Val 图像:100 总图像:1322 总类:9(包括背景)train.py





类:['background', 'TitleSlide', 'PresTitle', 'ImageCaption', 'Image', 'Code', 'Enumeration', 'Tables', 'Paragraph'] \

我将以下代码添加到datasets/data_generator.py

请注意,在我的数据集中,实际上没有图像具有标签为 255 的任何像素。每个标签都在 [0, 8] 范围内。我也尝试设置num_classes为9,但没有任何成功。
我的目录结构如下:

我用来运行培训的命令:

请注意,我已设置initialize_last_layer = Falselast_layers_contain_logits_only = False。我使用了 ImageNet 预训练的 Xception-65 模型作为骨干网络,我从这里给出的链接下载了它(具体来说,我使用了xception_65_imagenet)。
我还做了以下更改utils/train_utils.py

当我执行训练时,它可以成功进入训练部分,现在已经训练到大约 110 步。我使用以下命令导出了一个中间检查点:

检查点成功导出。然后我尝试使用此处给出的示例笔记本运行推理。具体来说,当我运行以下部分时,0会在输出中打印:

任何给定的图像都会发生同样的情况。为什么会这样?任何帮助将不胜感激。

0 投票
2 回答
49 浏览

python - 使用本地图像文件进行 Deeplab 测试

我正在尝试在本地计算机上运行 deeplab。我在我的电脑上安装了 deeplab 并定义了路径。Deeplab 在我的本地计算机上成功运行。这是 deeplab_demo.ipynb 的最后一个块

我正在运行它 jupyter notebook。它适用于“_SAMPLE_URL”变量或任何包含图像文件的链接。我想用本地图像文件测试 deeplab。

注意:环境变量已定义。所以我可以从这个笔记本访问我的本地文件。所有图书馆都在工作。但我不想在 URL 上测试图像,只是本地图像文件。

0 投票
1 回答
754 浏览

python - 在 Google Colab 上与在本地机器上训练 DeepLab ResNet V3 之间的巨大差异

我正在尝试训练 Deeplab Resnet V3 对自定义数据集执行语义分割。我一直在本地机器上工作,但我的 GPU 只是一个小型 Quadro T1000,所以我决定将我的模型转移到 Google Colab 上,以利用他们的 GPU 实例并获得更好的结果。

虽然我得到了我希望的速度提升,但与我的本地机器相比,我在 colab 上的训练损失大不相同。我复制并粘贴了完全相同的代码,所以我能找到的唯一区别在于数据集中。我使用的是完全相同的数据集,除了 colab 上的数据集是 Google Drive 上本地数据集的副本。我注意到驱动器订单文件在 Windows 上有所不同,但我看不出这是一个问题,因为我随机打乱了数据集。我知道这些随机分裂可能会导致输出的微小差异,但是训练损失的大约 10 倍的差异是没有意义的。

我还尝试使用不同的随机种子、不同的批量大小、不同的 train_test_split 参数以及将优化器从 SGD 更改为 Adam 在 colab 上运行该版本,但是,这仍然会导致模型很早就收敛,损失约为 0.5。

这是我的代码:

这是 Colab 上一个 epoch 的输出:

这是我本地机器上的输出:

我不会粘贴更多,因为它很长并且需要一段时间才能运行,但是到第三个 epoch 结束时,Colab 模型的损失仍然在 0.5 左右反弹,而在本地它达到 0.02。

如果有人可以帮助我解决这个问题,将不胜感激。

0 投票
0 回答
40 浏览

tensorflow - 基于预训练的检查点,在我自己的数据集上对 Deeplab 进行精细训练

我正在使用 deeplab 进行平面图像分割任务。我使用 PASCAL VOC 2012 训练的官网提供的预训练检查点来推断我自己的数据。有些分割结果好不如要求。我打算在我自己的飞机数据集上训练模型,但也基于现有的检查点来加速训练过程。

我该怎么做,有人有这方面的经验吗?谢谢

0 投票
1 回答
85 浏览

python - 对于非方形图像,Deeplabv3 重新训练结果偏斜

我在 Google Colab 中微调预训练模型deeplabv3_mnv2_pascal_train_aug时遇到问题。

当我使用vis.py进行可视化时,如果图像的高度/宽度较大,即图像不是正方形,结果似乎会移到图像的左侧/上侧。

用于微调的数据集是Look Into Person。这样做的步骤是:

  1. 在 deeplab/datasets/data_generator.py 中创建数据集
  1. 转换为 tfrecord
  1. 训练
  1. 可视化

通过以下步骤,我面临的问题的一个示例是:

原始图像

Deeplabv3 结果

我不知道我是否遗漏了一些重要的东西,或者是否需要更多的培训。然而,训练似乎不是一个解决方案,因为它的损失目前从 1.5 上下波动到 0.5,大约。

提前致谢。