为啥 DeepLabV3+ 生成的所有图像都只变成黑色?
Posted
技术标签:
【中文标题】为啥 DeepLabV3+ 生成的所有图像都只变成黑色?【英文标题】:Why do all images resulting by DeepLabV3+ become black only?为什么 DeepLabV3+ 生成的所有图像都只变成黑色? 【发布时间】:2019-04-23 14:44:07 【问题描述】:我尝试使用 DeepLab v3+ 进行语义分割,但结果全黑。
我把原来的文件删掉了,把原来的数据放到ImageSets/,JPEGImages/和SegmentationClass/各自对应的里面。
我根据PASCAL VOC 2012颜色的规则准备了SegmentationClassRaw图像。
我编辑了 build_voc2012_data.py 和 segmentation_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
【问题讨论】:
您确定用于训练的图像尺寸是 15000x13500 吗?根据我的经验,这么大的图像将需要大量的计算时间。你用多少这样的图像来训练网络? 嘿@y_kani,如果您能告诉我您要对哪个数据集执行语义分割,我可以为您提供帮助? 【参考方案1】:假设您没有尝试将模型用于某些奇异类,我猜图像实际上并非全黑。这是因为您正在查看原始分割结果。输出应该只有一个颜色通道,并且对于您的 5 个类,它可能显示为全黑。一个简单的测试是将输出 PNG 作为 numpy 数组读取,然后使用 np.unique
检查图像的值。如果确实所有 PNG 文件的结果都只是 0
,那么您看到黑色图像的原因可能会有所不同。
请注意,我做出上述假设是因为您使用的训练数据非常少。
【讨论】:
以上是关于为啥 DeepLabV3+ 生成的所有图像都只变成黑色?的主要内容,如果未能解决你的问题,请参考以下文章