1

我尝试在 TensorFlow 模型园中的 deeplab 模型上训练我自己的数据集,随着时间的推移,我可以得到一个减少的损失结果,我使用官方 repo 提供的预训练模型。

但是当我尝试查看最新的检查点或尝试将模型冻结为 .pb 并进行推理时,除了黑色图像之外什么都没有(我用 NumPy 检查这些图像,所有像素都是 0)。

我的训练脚本是这样的:

python deeplab/train.py \
--logtostderr \
--num_clones=1 \
--training_number_of_steps=500000 \
--train_split="train" \
--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={$OWN_DATASET} \
--train_logdir={$TRAIN_LOGDIR} \
--dataset_dir={$DATASET_DIR}  \
--tf_initial_checkpoint={$INITIAL_CHECKPOINT}

以前有没有人发生过?

4

1 回答 1

0

这是一个旧线程,我不知道您是否仍需要帮助,但您尚未提供有关数据集的太多信息。以下是一些通用指针:

  1. 尝试在 train.py 中设置这些标志

    --fine_tune_batch_norm=False \
    --initialize_last_layer=False \
    --last_layers_contain_logits_only=True \
    
  2. 确保 SegmentationClassRaw 文件夹标签掩码为 0、1、2、3...,其中 0 是背景,1、2、3...是各个类。运行“asarray(image)”查看这些像素并确保标签正确。

  3. 如果你有一个不平衡的数据集,你可以尝试在 train.py 中设置不同标签的权重。

    --label_weights=1 \  # Weight for label 0 (Background)
    --label_weights=10 \  #Weight for label 1 (Object class 1)
    --label_weights=15 \  #Weight for label 2 (Object class 2)
    
  4. 如果一切都失败了,请尝试更大的数据集。225 张图像和 2000 个步骤(带有初始 mobilenetv2 检查点)的数据集大小为我产生了结果,尽管由于数据集大小很小,因此准确性/性能不是很好。作为参考,这个小数据集的损失在 2000 步后大约为 0.05-0.06。

于 2021-08-02T20:44:44.810 回答