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

标签 tensorflow deep-learning segmentation-fault semantic-segmentation deeplab

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

我删除了原始文件,并将原始数据分别放在 ImageSets/,JPEGImages/和 SegmentationClass/中。

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

我编辑了 build_voc2012_data.py 和 segmenting_dataset.py

[build_voc2012_data.py]

FLAGS = tf.app.flags.FLAGS

tf.app.flags.DEFINE_string('image_folder',
                           './VOCdevkit/VOC2012/JPEGImages',
                           'Folder containing images.')

tf.app.flags.DEFINE_string(
    'semantic_segmentation_folder',
    './VOCdevkit/VOC2012/SegmentationClassRaw',
    'Folder containing semantic segmentation annotations.')

tf.app.flags.DEFINE_string(
    'list_folder',
    './VOCdevkit/VOC2012/ImageSets/Segmentation',
    'Folder containing lists for training and validation')

tf.app.flags.DEFINE_string(
    'output_dir',
    './tfrecord',
    'Path to save converted SSTable of TensorFlow examples.')


_NUM_SHARDS = 4

# add -->>
FLAGS.image_folder = "./pascal_voc_seg/VOCdevkit/VOC2012/JPEGImages"
FLAGS.semantic_segmentation_folder = "./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClassRaw"
FLAGS.list_folder = "./pascal_voc_seg/VOCdevkit/VOC2012/ImageSets/Segmentation"
FLAGS.image_format = "png"
FLAGS.output_dir = "./pascal_voc_seg/tfrecord"
# add --<<

[segmentation_dataset.pu]
# add kani 20181115 -->>
_ORIGINAL_INFORMATION = DatasetDescriptor(
    splits_to_sizes={
        'train': 10,
        'trainval': 2,
        'val': 2,
    },
    num_classes=5,
    ignore_label=255,
)
#add kani 20181115 --<<

# mod kani 20181115 -->>
# _DATASETS_INFORMATION = {
#     'cityscapes': _CITYSCAPES_INFORMATION,
#     'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
#     'ade20k': _ADE20K_INFORMATION,
# }

_DATASETS_INFORMATION = {
    'cityscapes': _CITYSCAPES_INFORMATION,
    'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
    'ade20k': _ADE20K_INFORMATION,
    'original': _ORIGINAL_INFORMATION,
}
# mod kani 20181115 --<<

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

[train.py 命令]
python train.py   --logtostderr   --train_split=trainval   --model_variant=xception_65   --atrous_rates=3   --atrous_rates=6   --atrous_rates=9   --output_stride=32   --decoder_output_stride=4   --train_crop_size=512   --train_crop_size=512   --train_batch_size=2   --training_number_of_steps=6000   --fine_tune_batch_norm=false   --tf_initial_checkpoint="./datasets/pascal_voc_seg/init_models/deeplabv3_pascal_train_aug/model.ckpt"  --train_logdir="./datasets/pascal_voc_seg/exp/train_on_trainval_set/train"  --dataset_dir="./datasets/pascal_voc_seg/tfrecord" --dataset=original

[vis.py 命令]
python vis.py   --logtostderr   --vis_split="val"   --model_variant="xception_65"   --atrous_rates=6   --atrous_rates=12   --atrous_rates=18   --output_stride=16   --decoder_output_stride=4   --vis_crop_size=513   --vis_crop_size=513   --checkpoint_dir="./datasets/pascal_voc_seg/exp/train_on_trainval_set/train"   --vis_logdir="./datasets/pascal_voc_seg/exp/train_on_trainval_set/vis"  --dataset_dir="./datasets/pascal_voc_seg/tfrecord"   --max_number_of_iterations=1   --dataset=original   --max_resize_value=512   --min_resize_value=128

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

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

[构建我的目录]
/tmp/models/research/deeplab  
-README.md  
-common.py  
-datasets/  
--__init__.py  
--build_data.py  
--convert_cityscapes.sh  
--pascal_voc_seg/  
---VOCdevkit/  
----VOC2012/  
-----Annotations/  
-----ImageSets/  
-----JPEGImages/  
-----SegmentationClass/  
-----SegmentationObject/  
---VOCtrainval_11-May-2012.tar  
---exp/  
----train_on_trainval_set/  
-----train/  
------train.py  
-----vis/  
------vis.py  
---init_models/  
----deeplabv3_pascal_train_aug/  
-----frozen_inference_graph.pb  
-----model.ckpt.data-00000-of-00001  
-----model.ckpt.index  
---tfrecord/  
----build_voc_2012.py  
--__pycache__  
--build_data.pyc  
--download_and_convert_ade20k.sh  
--remove_gt_colormap.py  
--build_ade20k_data.py  
--build_voc2012_data.py  
--download_and_convert_voc2012.sh  
--segmentation_dataset.py  
--build_cityscapes_data.py  
--build_voc2012_data.py.org  
-export_model.py  
-local_test.sh  
-model_test.py  
-utils/  
-__init__.py  
-common_test.py  
-deeplab_demo.ipynb  
-g3doc/  
-local_test_mobilenetv2.sh  
-train.py  
-vis.py  
-__pycache__  
-core/  
-eval.py  
-input_preprocess.py  
-model.py  
-train.py.bk  

最佳答案

假设您没有尝试将模型用于某些奇异的类,我的猜测是图像实际上并非全黑。这是因为您正在查看原始分割结果。输出应该只有一个颜色 channel ,并且您的 5 个类可能显示为全黑。一个简单的测试是将输出 PNG 读取为一个 numpy 数组,然后使用 np.unique 检查图像的值。 .如果所有 PNG 文件的结果确实等于 0 ,那么您看到黑色图像的原因可能有所不同。
请注意,我做出上述假设是因为您使用的训练数据很少。

关于tensorflow - 为什么 DeepLabV3+ 生成的所有图像都变成黑色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405145/

相关文章:

python-3.x - 使用 keras 扩充数据时如何修改标签

与协作实验室相比,Python 脚本在 Google 计算实例上运行速度较慢

machine-learning - caffe hdf5 H5LTfind_dataset(file_id, dataset_name_) 找不到HDF5数据集

python - 属性错误 : 'ShuffleDataset' object has no attribute 'output_shapes' - when following TF tutorial

python - 从预训练模型中获取一组嵌入 - vgg16 pytorch

c - 当我尝试使用 realloc 将新行插入 2D-Array 时出现段错误

c - 简单函数的段错误

assembly - execve shellcode 写段错误

c++ - Tensorflow如何定义预处理器宏?

tensorflow - Tensorflow模型的超参数调优|隐藏层大小和隐藏层数量