我尝试在 TensorFlow 模型花园中的 deeplab 模型上训练自己的数据集,随着时间的推移,我可以得到一个减少的损失结果,我使用官方存储库提供的预训练模型。
但是当我尝试使用最新的检查点查看或尝试将模型冻结为 .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}
以前有人发生过吗?
这是一个旧线程,我不知道您是否还需要帮助,但您没有提供有关数据集的太多信息。以下是一些常规提示:
-
尝试将这些标志设置为 train.py
--fine_tune_batch_norm=False --initialize_last_layer=False --last_layers_contain_logits_only=True
-
确保您的 SegmentationClassRaw 文件夹标签掩码为 0、1、2、3...,其中 0 是背景,1、2、3、...是单独的类。运行"asarray(image("以查看这些像素并确保标签正确。
-
如果数据集不平衡,可以尝试在 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)
-
如果全部失败,请尝试更大的数据集。225 张图像和 2000 个步骤(带有初始 mobilenetv2 检查点(的数据集大小为我产生了结果,尽管由于数据集大小很小,准确性/性能不是很好。作为参考点,这个小数据集在2000步后损失了大约0.05-0.06。