问题标签 [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.
python - ModuleNotFoundError:没有名为“tf_slim”的模块
使用 Anaconda 尝试设置 deeplab ( https://github.com/tensorflow/models/tree/master/research/deeplab )。
通过看到其他问题得到解答,我已经解决了很多问题,但遇到了一个似乎没有得到解答的问题:
当尝试运行“python deeplab/model_test.py”时,我得到:
我发现了一些建议,这可能与环境变量有关,但我的都是正确的:env vars ,我多次刷新 anaconda 窗口以确保更改正在发生。
我的文件夹目录中有 tf_slim:C:\Program Files\Python36\Lib\site-packages\tf_slim。
不知道该怎么做:(我对这种类型的安装很陌生。
我在 Windows 10 上。
machine-learning - CRF和全连接CRF的区别?
谁能解释一下语义分割的条件随机场和完全连接的条件随机场之间的区别?到目前为止,我只了解,使用 CRF,您尝试使用两种信息来改进分割掩码:
- 像素强度:类之间的边缘的一个很好的猜测是像素强度。所以有了这个我们可以加权对象的边缘
- 像素接近度:对于靠近在一起的像素,它们很可能属于同一类。没有这个,我们将在另一个类的实例中解释对象内部的边缘,例如背景。
我的假设正确吗?对于 CRF 或完全连接的 CRF 或两者都是这样吗?
谢谢!
python - 需要开始训练两次以加载检查点(它有效,但为什么?)
我正在修改 deeplab 网络。我在 mobilenet-v3 特征提取器的第一层添加了一个节点,它重用了现有变量。由于不需要额外的参数,理论上我可以加载旧的检查点。
这是我无法理解的情况:
当我在一个新的空文件夹中开始训练时,像这样加载检查点:
我得到一个错误:
但是,如果我在一个新的空文件夹中开始训练,请不要加载任何检查点:
我可以顺利开始训练。
让我更困惑的是,如果在同一个文件夹中(这是 train_logdir 没有加载检查点),我尝试使用检查点开始训练,我也可以开始训练而没有错误:
这怎么可能发生?--train_logdir 可以以某种方式存储上次训练的批量标准化参数的形状?
python - Deeplab 新数据集未找到新类
嘿,我正在尝试向帕斯卡数据集添加一个新类,以使其成为 21 个可检测的类。我已按照以下步骤操作:
- 分割图像。我挑选了鸡并做了 4 个单独的鸡分割。这是一个例子:
将对应的图片放在Voc2012 SegementationClass、SegmentationClassRaw、SegmentationObject、JPEGImages中
添加注释 XML
将新图像添加到“VOC2012\ImageSets\Main”中的所有 txt 文件
在“VOC2012\ImageSets\Main”中新增3个txt文件:chicken_train.txt、chicken_trainval.txt、chicken_val.txt。为包含鸡的文件名添加 1。将 2 个鸡文件添加到 VOC2012\ImageSets\Segmentation\train.txt 和另外 2 个到 trainval + val。
在“data_generator.py”中创建一个新数据集:
_EXTENDED_SEG_INFORMATION = DatasetDescriptor( splits_to_sizes={ 'train': 1466, 'train_aug': 10583, 'trainval': 2915, 'val': 1451, }, num_classes=22, ignore_label=255, )
为“扩展”数据集创建一个新的颜色图:
def create_extended_label_colormap(): return np.asarray([ [0, 0, 0], #background [128, 0, 0], #aeroplane [0, 128, 0], #bike [128, 128, 0], #鸟 [0, 0, 128], #boat [128, 0, 128], #bottle [0, 128, 128], #bus [128, 128, 128], #car [64, 0, 0], #猫 [192, 0, 0], #chair [64, 128, 0], #cow [64, 0, 128], #diningtable [64, 0, 128], #dog [192, 0, 128], #马 [64, 128, 128], #motorbike [192, 128, 128], #person [0, 64, 0], #pottedplant [128, 64, 0], #sheep [0, 192, 0], #沙发 [128, 192, 0], #train [0, 64, 128], #tv [128, 64, 128], #chicken ])
使用命令生成 TFRecord:
py "research\deeplab\datasets\build_voc2012_data.py" --image_folder="D:\DeepLab\models-master\research\deeplab\datasets\pascal_voc_seg\VOCdevkit\VOC2012\JPEGImages" --semantic_segmentation_folder="research\deeplab\datasets \pascal_voc_seg\VOCdevkit\VOC2012\SegmentationClassRaw" --list_folder="research\deeplab\datasets\pascal_voc_seg\VOCdevkit\VOC2012\ImageSets\Segmentation" --image_format="jpg" --output_dir="research\deeplab\datasets\extended\记录”
人为地为新的鸡类设置权重以使其出现。用命令训练:
python "D:\DeepLab\models-master\research\deeplab\train.py" --logtostderr --train_split="trainval" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates= 18 --output_stride=16 --decoder_output_stride=4 --train_crop_size="513,513" --train_batch_size=2 --dataset="extended" --training_number_of_steps=1000 --fine_tune_batch_norm=true --tf_initial_checkpoint="D:\DeepLab\ models-master\research\deeplab\datasets\pascal_voc_seg\init_models\deeplabv3_pascal_train_aug\model.ckpt" --train_logdir="D:\DeepLab\models-master\research\deeplab\datasets\extended\exp\train_on_trainval_set\train" -- dataset_dir="D:\DeepLab\models-master\research\deeplab\datasets\extended\tfrecord" --label_weights=.001 --label_weights=.01 --label_weights=.01 --label_weights=。01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 - -label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights =.01 --label_weights=100
导出模型并对其进行测试给了我这个不是很好的:
图像上的 eval 命令也会产生较差的结果:
eval/miou_1.0_class_1 [0.007157555112] eval/miou_1.0_class_16 [0.00142123573] eval/miou_1.0_class_17 [0.000168795494] eval/miou_1.1.1.1class_1 eval/0.1class/MI.1CLASS/MI.1CLASS/MI.1CLASS/MI.1CCLASS/MI.1CLASS/MI.1CLASS [0] [0]] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0]] miou_1.0_class_5[0] eval/miou_1.0_class_13[0.0135749253] eval/miou_1.0_class_15[0.0179808438] eval/miou_1.0_class_3[0.000226198768] eval/miou_1.0_class_8[0.229160205]
eval/miou_1.0_class_2[8.26003941e-07] eval/miou_1.0_class_7[0.000108588596] eval/miou_1.0_class_4[0] eval/miou_1.0_class_19[0] eval/miou_1.0_class_18[0.0089886658_6] eval/miou_1.0_class_19[0] e-05] eval/miou_1.0_overall[0.0191962905] eval/miou_1.0_class_21[0] eval/miou_1.0_class_10[0.00145707454] eval/miou_1.0_class_9[4.08720407e-05] eval/miou_1.0_062712[0.008] .0_class_11[0.00659790076]
我已经尝试训练 10,000 次迭代,看看是否可以修复它,并且它确实填充了所有其他类,但鸡肉类 (class_21) 仍然保持在 0 miou。我在这里做错了什么?!?
附加说明:如果我坚持使用基本的帕斯卡类,我确实可以正常工作,我可以得到一个非常好的模型,总体上是 0.81 米欧。只有在我尝试介绍新课程时才会出现问题。
我不确定我是否需要做另一个来替换“research\object_detection\data”中的“pascal_label_map”,或者是否不需要。
tensorflow - Tensorflow - deeplab 颜色图
我正在搞乱谷歌DeepLab的语义图像分割。我希望能够为每个语义(即人、猫等)更改颜色。使用 PASCAL 基准创建颜色图的方法是
我想如果我ind
用另一个(而不是2
拥有3
)改变值,我会得到不同的颜色。另外,是否有另一种方法可以为语义获得不同的颜色?我似乎无法猜测它是如何工作的,如何使用我们在代码中看到的移位来创建颜色图。我还链接了我在谷歌 colab 上的DeepLab处理的完整代码:
https ://colab.research.google.com/drive/1a3TnfeEjVMg7N1Dz5d_UA8GN_iKHkG_l#scrollTo=na9DyxVl4_Ul
android - 如何在 Android 上解释 mobilenetv2 分割结果输出?
我使用Deeplab官方 Github 页面上提供的 python 脚本,用我自己的数据集训练了一个量化语义分割模型。我使用了mobilenetv2_coco_voc_trainaug主干。我检查了Netron中的结果模型以及输入输出的外观:
如您所见,输出是一个大小为 257x257 的 int64 数组。据我了解,该数组应包含每个数组索引处概率最高的标签索引,还是我遗漏了什么?但是,当我尝试在 Android 中阅读此内容时,我得到的只是零和一,与图片中的内容、人、牛等无关。
}
结果也不是那么准确,因为我得到了不应该的分段值。任何帮助,将不胜感激!
tensorflow - 如何使用 freeze_interference_graph.pb 创建 Keras 模型?
我想使用预训练模型并在其末尾添加一个分割头,但问题是我只有“ frozen_inference_graph.pb ”。这些是我从模型中获得的文件:
我尝试了几种方法:
1. 将预训练的模型加载到 Keras 模型中: 我拥有的文件似乎是不可能的。它只是给了我一个 AutoTrackable 对象而不是一个模型。
2. 访问冻结模型的张量对象并使用张量制作模型: 我发现了如何访问张量,但无法使用张量对象制作 Keras 模型。
在这里我可以得到张量,但我不能在模型中使用张量:
有没有办法将此冻结图转换为 Keras 模型?或者,如果有另一种方法可以训练模型,我会很高兴知道。
PS 预训练模型是“ ssd_mobilenet_v3_small_coco_2020_01_14 ”,可以在这里找到。
tensorflow - 用于道路分割的 Deeplab
我想使用在城市景观数据集上训练的 deeplab v3 预训练模型来推断我的自定义图像。我从https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md这个网址下载了 mobilenetv2_coco_cityscapes_trainfine 检查点文件。
那么如何对我的自定义道路图像进行推理呢?
python - 如何在 pytorch 上的自定义数据集上训练 deeplabv3?
我正在尝试进行图像分割,并且了解了 DeepLabv3 的 Google 工作。
这是对论文的参考: https ://arxiv.org/abs/1706.05587
Chen, LC, Papandreou, G., Schroff, F. 和 Adam, H.,2017。重新思考用于语义图像分割的空洞卷积。arXiv 预印本 arXiv:1706.05587。
该架构经过训练可以对 Pascal VOC 2012 数据集的 20+1 个类别(20 个前景和 1 个背景类别)进行分割。
Pytorch 在 Pascal 数据集上提供了预训练的 deeplabv3,我想在城市景观上训练相同的架构。因此,Pascal VOC 数据集有不同的类别。我想知道有效的方法是什么?
目前这是我写的唯一代码:
machine-learning - Deeplabv3 不预测类
我正在尝试使用 mobilenetv3_small_seg 架构训练 deeplabv3 模型。我训练了模型,但我得到的预测是一个完整的空白掩码,没有类预测。我遵循的培训步骤是:
在 Google Colab 中克隆了官方存储库。
我准备了只有一个类的数据集(在脸上分割嘴唇)。我遵循 Pascal VOC12 数据集格式。我创建了 RGB 蒙版 (0, 255, 0),其周围有白色边界 (255, 255, 255) 和黑色背景 (0, 0, 0),如下所示。
然后我在此脚本的帮助下将 RGB 蒙版转换为具有背景:0、前景:1 和边界:255 的单通道 png(8 位),如下所示:
然后,我通过修改此脚本成功地将数据集转换为 tfrecord 。
然后我在 data_generator.py 中添加了我的数据集描述,其中 ignore_label=255 和 num_classes=2。
最后,我开始使用以下命令进行训练:
训练完成后,我用几张不同的图像测试了模型。模型的输出是 (256, 256) 数组,所有值都等于 0。没有一个值我得到 1 或其他任何值。
我是机器学习的新手。我想知道
- 我的流程有什么问题?我看了很多教程,但我找不到答案。
- 我的数据集有什么问题吗?该数据集共包含 2000 张图像。
- 我找不到 mobilenetv3_small 的预训练权重。如果有人知道,请分享,以便我进行迁移学习。
- 我将类数设置为 2(背景和前景)。那正确吗?