在deeplab v3p中,虽然我训练了我的数据集,但它没有用。 为什么?
我的环境如下:
OS Platform and Distribution: Ubuntu 16.04 lts
TensorFlow installed from: conda
TensorFlow version: 18
Bazel version: no
CUDA/cuDNN version: cuda 9 cudnn 7
GPU model and memory: titan x (2 cards), 64gb memory
Exact command to reproduce: -
我做了以下工作:
a)生成简单数据集:
训练图像随机排列两个图形(圆形和矩形)并随机绘制颜色。 标签图像设置为背景为0RGB(0,0,0),矩形为1 RGB(1,1,1),圆为2RGB(2,2,2),255为RGB(255,255, 255)将该行作为分割。
b)转换为tf.record
在build_voc2012_data.py
中,我将原始数据集的文件路径更改为我的数据集。
然后,我运行它并创建了tf.record。
c)培训
在segmentation_dataset.py
中,我添加了DATASETS INFORMATION。
_MYDATASETS_INFORMATION = DatasetDescriptor(
splits_to_sizes={
'train': 10000,
'trainval': 1000,
'val': 1000,
},
num_classes=3,
ignore_label=255,
)
_DATASETS_INFORMATION = {
'cityscapes': _CITYSCAPES_INFORMATION,
'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
'ade20k': _ADE20K_INFORMATION,
'mydata': _MYDATASETS_INFORMATION
}
然后,我开始训练。
python 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 --train_crop_size=513 --train_batch_size=4 --training_number_of_steps=1000000 --fine_tune_batch_norm=true --tf_initial_checkpoint="./datasets/y/model.ckpt" --train_logdir="./datasets/x" --dataset_dir="./datasets/z/tfrecord" --dataset=mydata
d)完成培训
由于一百万次迭代,最小损失为4.765。 当它开始训练时,它是7.56。
e)VIS。 两个测试图像。
从上面的结果来看,我认为Deeplab v3效果不佳。 我的用法错了吗?或者参数设置不正确? 或者学习不够?
答案 0 :(得分:2)
这里的问题是您的训练批次大小(--train_batch_size=4
)太小。您需要具有更大的批次大小。
请参阅 Tradeoff batch size vs. number of iterations to train a neural network,以便更好地选择更准确的值。