目录
3.SC 在aspp与deconv采用seperate conv
1.Flip
input_preprocess.py
_PROB_OF_FLIP = 0.5
该参数控制flip,如果为1,那么进入的图像一定会被flip
如果为0.5,那么是否被flip,概率是50%
如果为0,那么只有随机数到0.才会被flip,也就是说等于负数肯定是不会被flip的。
random_value = tf.random_uniform([])
is_flipped = tf.less_equal(random_value, prob)
outputs = tf.cond(is_flipped, flip, lambda: tensor_list)
这里random_value [0,1)
less_equal是<=
所以如果不想flip必须用负数
2. multi_scale input eval
多尺度输入是eval模块的一个能够大幅度提升准确率的操作。
该参数的控制在eval.py里面,可以通过参数传递控制,该参数是57行:
# Change to [0.5, 0.75, 1.0, 1.25, 1.5, 1.75] for multi-scale test.
flags.DEFINE_multi_float('eval_scales', [1.0],
'The scales to resize images for evaluation.')
可以通过运行eval.py文件传递参数控制:
python "${WORK_DIR}"/eval.py \
--logtostderr \
--eval_split="val" \
--model_variant="xception_65" \
--atrous_rates=6 \
--atrous_rates=12 \
--atrous_rates=18 \
--output_stride=16 \
--decoder_output_stride=4 \
--eval_crop_size="513,513" \
--checkpoint_dir="${TRAIN_LOGDIR}" \
--eval_logdir="${EVAL_LOGDIR}" \
--dataset_dir="${PASCAL_DATASET}" \
--max_number_of_evaluations=1 \
--eval_scales=[0.5,0.25,1.75]
官方网站https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md得到了三个官方参数:
--eval_scales=[0.5:0.25:1.75]
当然你可以选择:
[0.5, 0.75, 1.0, 1.25, 1.5, 1.75]
3.SC 在aspp与deconv采用seperate conv
该参数由model_options在model.py里面决定
model_common的实例化是在train.py里面:
model_options = common.ModelOptions(
outputs_to_num_classes=outputs_to_num_classes,
crop_size=[int(sz) for sz in FLAGS.train_crop_size],
atrous_rates=FLAGS.atrous_rates,
output_stride=FLAGS.output_stride)
在common里面他默认是true:
flags.DEFINE_boolean('decoder_use_separable_conv', True,
'Employ separable convolution for decoder or not.')
所以如果你要改,那么你就要生成时传递false。
multi_scale 的参数传递是:
--eval_scales=0.5
--eval_scales=0.75
--eval_scales=1.0
--eval_scales=1.25
--eval_scales=1.5
--eval_scales=1.75
根据https://github.com/tensorflow/models/issues/4313
另外,如果batch size改变的话,
--learning_rate_decay_step=4000也许应该相应的修改,因为,如果batch size 减小,那么同样的step,epoch就会减小,所以为了保持相应的epoch,需要增加step的数量,那么就会导致,衰减过快,最后learning rate很低,从而不起作用。