利用deeplab v3+开源代码训练PASCAL VOC 2012数据集
deeplab v3+环境配置好之后则可以进行模型的训练
1、准备PASCAL VOC 2012数据集:可以在ubantu命令行上运行
#From the tensorflow/models/research/deeplab/datasets directory.
sh download_and_convert_voc2012.sh
下载并把数据集转换成 TFRecord格式
我已有VOC 2012数据集压缩包,所以省了下载步骤。因此手动在\research\deeplab\datasets目录下创建一个名为pascal_voc_seg的文件夹,把压缩包放进该文件夹里,再运行 sh download_and_convert_voc2012.sh(代码无需改动),运行后会多了下图红色方框里的文件(在虚拟机ubantu 16.04运行的程序,一下截图为虚拟机共享文件夹里的截图):
至此,可以运行 train.py开始训练模型
2、train.py的运行
github示例链接:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/pascal.md
权重下载链接:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md
运行命令:
# From tensorflow/models/research/
python deeplab/train.py \
--logtostderr \
--training_number_of_steps=30000 \
--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=256 \ # 当主机内存不够大时会出现内存不够的错误,因此可根据情况适当减小数值
--train_crop_size=256 \
--train_batch_size=1 \
--dataset="pascal_voc_seg" \
--tf_initial_checkpoint='./deeplabv3_pascal_trainval/model.ckpt' \ # 加载权重(路径用单引号引起来)
--train_logdir='./PATH_TO_TRAIN_DIR' \ # 保存训练的中间结果的路径,该文件夹为手动创建,如果之前的训练结果不要想重新训练,直接清空该文件夹
--dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord' # 第二步生成的tfrecord的路径
注意点:(1)上述命令中=后面不能有空格
踩过的坑:PC内存太小时会出现以下错误,我把 --train_crop_size=513 改为256可以正常训练:
至此模型训练完成
2、运行eval.py,输出为MIOU值
运行命令:
python deeplab/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 \
--eval_crop_size=513 \
--dataset="pascal_voc_seg" \
--checkpoint_dir='./PATH_TO_TRAIN_DIR' \ #上述训练中间结果保存路径
--eval_logdir='./result_test_output' \ # 结果输出路径,该文件夹需手动创建
--dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord' # 验证集tfrecord文件所在路径
踩过的坑:把–eval_crop_size=513 改为128则会出错,原因不明,错误如下图所示,不改则不会出错。
运行成功截图:
3、运行vis.py,查看结果
运行命令:
# From tensorflow/models/research/
python deeplab/vis.py \
--logtostderr \
--vis_split="val" \
--model_variant="xception_65" \
--atrous_rates=6 \
--atrous_rates=12 \
--atrous_rates=18 \
--output_stride=16 \
--decoder_output_stride=4 \
--vis_crop_size=513 \
--vis_crop_size=513 \
--dataset="pascal_voc_seg" \
--checkpoint_dir='./PATH_TO_TRAIN_DIR' \ #上述训练中间结果保存路径
--vis_logdir='./vis_output' \ # 可视化预测结果保存路径,手动创建
--dataset_dir='./deeplab/datasets/pascal_voc_seg/tfrecord' # 生成的tfrecord数据集所在路径
运行效果图:
图片处理结果:
原图:
分割图: