deeplabv3+ 论文相关参数 代码解析 Flip MS SC random crop

目录

 

1.Flip

2. multi_scale input eval

3.SC 在aspp与deconv采用seperate conv

multi_scale 的参数传递是:

另外,如果batch size改变的话, 


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很低,从而不起作用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DeepLabv3+是一种语义分割模型,可以用于对图像进行像素级别的分类。在训练DeepLabv3+模型时,需要准备适当的数据集。在这里,我们将介绍如何使用CamVid数据集训练DeepLabv3+模型。 CamVid是一个用于语义分割的数据集,包含数百个标注图像和相应的标注。CamVid数据集可以从以下网址下载: http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/ 在下载并解压缩数据集后,可以使用以下步骤来训练DeepLabv3+模型: 1. 准备数据集 首先,需要将CamVid数据集划分为训练集、验证集和测试集。可以使用以下命令来创建这些文件列表: ``` $ cd /path/to/CamVid $ mkdir lists $ find ./train -name "*.png" | sed 's/\.png$/\.jpg/g' > lists/train.txt $ find ./val -name "*.png" | sed 's/\.png$/\.jpg/g' > lists/val.txt $ find ./test -name "*.png" | sed 's/\.png$/\.jpg/g' > lists/test.txt ``` 然后,需要创建一个标签文件,该文件将每个类别映射到一个数字。可以使用以下命令来创建标签文件: ``` $ cd /path/to/CamVid $ mkdir labels $ echo "0 0 0 0" > labels/void.txt $ echo "128 0 0 1" > labels/sky.txt $ echo "128 128 128 2" > labels/building.txt $ echo "128 64 128 3" > labels/wall.txt $ echo "0 0 192 4" > labels/fence.txt $ echo "128 128 0 5" > labels/pole.txt $ echo "192 192 128 6" > labels/traffic_light.txt $ echo "64 64 128 7" > labels/traffic_sign.txt $ echo "64 0 128 8" > labels/vegetation.txt $ echo "192 128 128 9" > labels/terrain.txt $ echo "64 64 0 10" > labels/ground.txt $ echo "0 128 192 11" > labels/road.txt $ echo "192 192 0 12" > labels/sidewalk.txt $ echo "0 0 0 13" > labels/pedestrian.txt $ echo "64 192 0 14" > labels/rider.txt $ echo "192 128 0 15" > labels/car.txt $ echo "64 64 128 16" > labels/truck.txt $ echo "128 64 64 17" > labels/bus.txt $ echo "64 0 192 18" > labels/train.txt $ echo "192 0 64 19" > labels/motorcycle.txt $ echo "128 128 64 20" > labels/bicycle.txt ``` 在这个标签文件中,每一行代表一个类别,前三个数字分别表示RGB颜色值,最后一个数字表示类别标识符。 2. 安装依赖项 接下来,需要安装DeepLabv3+的依赖项。可以使用以下命令来安装这些依赖项: ``` $ pip install tensorflow-gpu==2.0.0 pillow matplotlib ``` 3. 创建模型 然后,需要创建DeepLabv3+模型。可以使用以下命令来创建模型: ``` $ python deeplab.py --backbone resnet --output-stride 16 ``` 在这个命令中,`--backbone`参数指定使用的ResNet模型的版本,`--output-stride`参数指定输出步长。 4. 训练模型 接下来,可以使用CamVid数据集来训练DeepLabv3+模型。可以使用以下命令来启动训练: ``` $ python train.py \ --model_dir /path/to/model \ --backbone resnet \ --output_stride 16 \ --train_list /path/to/CamVid/lists/train.txt \ --val_list /path/to/CamVid/lists/val.txt \ --label_dir /path/to/CamVid/labels \ --batch_size 8 \ --learning_rate 0.007 \ --num_epochs 30 \ --augmentations 'flip,hue_saturation,resize' ``` 在这个命令中,`--model_dir`参数指定要保存训练模型的目录,`--train_list`参数指定训练数据集的文件列表,`--val_list`参数指定验证数据集的文件列表,`--label_dir`参数指定标签文件所在的目录,`--batch_size`参数指定训练批次大小,`--learning_rate`参数指定学习率,`--num_epochs`参数指定训练轮数,`--augmentations`参数指定数据增强方式。 5. 测试模型 最后,可以使用测试集来测试训练好的DeepLabv3+模型。可以使用以下命令来启动测试: ``` $ python test.py \ --model_dir /path/to/model \ --backbone resnet \ --output_stride 16 \ --test_list /path/to/CamVid/lists/test.txt \ --label_dir /path/to/CamVid/labels \ --result_dir /path/to/result ``` 在这个命令中,`--test_list`参数指定测试数据集的文件列表,`--result_dir`参数指定测试结果的保存目录。 通过以上步骤,就可以在CamVid数据集上训练和测试DeepLabv3+模型了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值