当前位置:   article > 正文

图像语义分割 —利用Deeplab v3+训练VOC2012数据集_deeplabv3+在voc

deeplabv3+在voc

前言:

  配置:windows10 + Tensorflow1.6.0 + Python3.6.4(笔记本无GPU)

  源码:https://github.com/tensorflow/models/tree/master/research/deeplab

  权重下载地址:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md

1. 运行model_test.py

  测试安装环境,如果正常,提示:

Ran 5 tests in 10.758s

2.  运行build_voc2012_data.py 生成 .tfrecord数据

  在VOC2012数据集中,文件夹JPEGImages存放着原始的[n*m*3] .jpg格式图片,文件夹SegmentationClass中存放Label数据,为[n*m*3]的 .png图片,首先应将这些label数据转换为[n*m*1]的单通道图片。

  具体转换方法见:https://blog.csdn.net/weixin_41713230/article/details/81076292

  1. python build_voc2012_data.py \
  2. --image_folder="./VOC2012/JPEGImages" \ # 保存images的路径
  3. --semantic_segmentation_folder="./VOC2012/SegmentationClass" \ #保存labels的路径,为单通道
  4. --list_folder='./VOC2012/ImageSets/Segmentation' \ # 保存train\val.txt文件的路径
  5. --image_format="jpg(image格式)" \
  6. --output_dir='./tfrecord' # 生成tfrecord格式的数据所要保存的位置

  运行成功后,会提示如下信息:

  1. >> Converting image 366/1464 shard 0 # 1464为train.txt中图片名个数
  2. >> Converting image 732/1464 shard 1
  3. >> Converting image 1098/1464 shard 2
  4. >> Converting image 1464/1464 shard 3
  5. >> Converting image 22/85 shard 0 # 85为val.txt中图片名数量,源文件中为1449
  6. >> Converting image 44/85 shard 1
  7. >> Converting image 66/85 shard 2
  8. >> Converting image 85/85 shard 3

3. 运行train.py训练模型

  1. python train.py \
  2. --logtostderr \
  3. --train_split="train" \ 选择用于训练的数据集
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --train_crop_size=256 \ # 当因内存不够而报错时,可适当调小该参数
  11. --train_crop_size=256 \
  12. --train_batch_size=2 \ # 因内存不够,设置为2
  13. --training_number_of_steps=100 \ # 尝试训练100步
  14. --fine_tune_batch_norm=False \ # 当batch_size大于12时,设置为True
  15. --tf_initial_checkpoint='./weights/deeplabv3_pascal_train_aug/model.ckpt' \ # 加载权重,权重下载链接见文章开头
  16. --train_logdir='./checkpoint' \ # 保存训练的中间结果的路径
  17. --dataset_dir='./datasets/tfrecord' # 第二步生成的tfrecord的路径

   运行成功信息如下:

   如果在第2步,没有将label数据转换为单通道数据,loss可能会爆炸性增长,也可能报错,提示:Loss is inf or nan.

  1. INFO:tensorflow:global step 1: loss = 0.3148 (15.549 sec/step)
  2. INFO:tensorflow:global step 2: loss = 0.1740 (8.497 sec/step)
  3. INFO:tensorflow:global step 3: loss = 0.5984 (6.847 sec/step)
  4. INFO:tensorflow:global step 4: loss = 0.1599 (6.683 sec/step)
  5. INFO:tensorflow:global step 5: loss = 0.3978 (6.617 sec/step)
  6. INFO:tensorflow:global step 6: loss = 0.4886 (5.881 sec/step)
  7. ………………
  8. INFO:tensorflow:global step 97: loss = 0.7356 (6.090 sec/step)
  9. INFO:tensorflow:global step 98: loss = 0.5818 (6.163 sec/step)
  10. INFO:tensorflow:global_step/sec: 0.163526
  11. INFO:tensorflow:Recording summary at step 98.
  12. INFO:tensorflow:global step 99: loss = 0.2523 (8.893 sec/step)
  13. INFO:tensorflow:global step 100: loss = 0.2783 (6.421 sec/step)
  14. INFO:tensorflow:Stopping Training.
  15. INFO:tensorflow:Finished training! Saving model to disk.

  4. 运行eval.py,输出为MIOU值

  1. python eval.py \
  2. --logtostderr \
  3. --eval_split="val" \ # 验证数据集
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --eval_crop_size=513 \
  11. --eval_crop_size=513 \
  12. --checkpoint_dir='./checkpoint' \ # 模型checkpoint所在路径
  13. --eval_logdir='./validation_output' \ # 结果输出路径,该文件夹需手动创建
  14. --dataset_dir='./datasets/tfrecord' # 验证集tfrecord文件所在路径

  运行成功信息如下:

  如果在第2步,没有将label数据转换为单通道数据,这里会报错提示:['predictions' out of bound]。

  1. INFO:tensorflow:Restoring parameters from ./checkpoint\model.ckpt-100
  2. INFO:tensorflow:Running local_init_op.
  3. INFO:tensorflow:Done running local_init_op.
  4. INFO:tensorflow:Starting evaluation at 2018-07-17-07:42:06
  5. INFO:tensorflow:Evaluation [8/85]
  6. INFO:tensorflow:Evaluation [16/85]
  7. INFO:tensorflow:Evaluation [24/85]
  8. INFO:tensorflow:Evaluation [32/85]
  9. INFO:tensorflow:Evaluation [40/85]
  10. INFO:tensorflow:Evaluation [48/85]
  11. INFO:tensorflow:Evaluation [56/85]
  12. INFO:tensorflow:Evaluation [64/85]
  13. INFO:tensorflow:Evaluation [72/85]
  14. INFO:tensorflow:Evaluation [80/85]
  15. INFO:tensorflow:Evaluation [85/85]
  16. INFO:tensorflow:Finished evaluation at 2018-07-17-07:48:46
  17. miou_1.0[0.721848249]

5. 运行vis.py,查看结果

  1. python vis.py \
  2. --logtostderr \
  3. --vis_split="val" \ # 共85张图片
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --vis_crop_size=513 \
  11. --vis_crop_size=513 \
  12. --checkpoint_dir='./checkpoint' \ # 模型checkpoint所在路径
  13. --vis_logdir='./vis_output' \ # 预测结果保存路径,自己创建
  14. --dataset_dir='./datasets/tfrecord' # 生成的tfrecord数据集所在路径

  成功运行提示信息如下: 

  1. INFO:tensorflow:Visualizing batch 1 / 85
  2. INFO:tensorflow:Visualizing batch 2 / 85
  3. INFO:tensorflow:Visualizing batch 3 / 85
  4. INFO:tensorflow:Visualizing batch 4 / 85
  5. INFO:tensorflow:Visualizing batch 5 / 85
  6. INFO:tensorflow:Visualizing batch 6 / 85
  7. INFO:tensorflow:Visualizing batch 7 / 85
  8. INFO:tensorflow:Visualizing batch 8 / 85
  9. INFO:tensorflow:Visualizing batch 9 / 85
  10. INFO:tensorflow:Visualizing batch 10 / 85
  11. ……………………

  最后,在输出文件夹('./vis_output')中查看模型的预测结果,如下:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/123772
推荐阅读
相关标签
  

闽ICP备14008679号