Note:这一步的操作基本都是在deeplab\datasets\文件夹下,文件目录如下:
只会用到build_voc2012_data.py
这一文件
因为windows不能运行download_and_convert_voc2012.sh
自动下载voc2012,因此我们需要首先自己去官网下载voc2012数据。
voc2012下载解压后的文件结构如下图(选中的深颜色的才是语义分割需要的文件,剩下两个未选定的为目标检测时才需要的,可删除):
按照官方文档将数据文件放置为如下图的目录结构(没有某个文件夹就新建一个):
deeplab/datasets/pascal_voc_seg
├── exp
│ └── train_on_train_set
│ ├── eval
│ │ └── events.out.tfevents....
│ ├── export
│ │ └── frozen_inference_graph.pb
│ ├── train
│ │ ├── checkpoint
│ │ ├── events.out.tfevents....
│ │ ├── graph.pbtxt
│ │ ├── model.ckpt-0.data-00000-of-00001
│ │ ├── model.ckpt-0.index
│ │ ├── model.ckpt-0.meta
│ │ └── ...
│ └── vis
│ ├── graph.pbtxt
│ ├── raw_segmentation_results
│ └── segmentation_results
├── init_models
│ └── deeplabv3_pascal_train_aug
│ ├── frozen_inference_graph.pb
│ ├── model.ckpt.data-00000-of-00001
│ └── model.ckpt.index
├── tfrecord
│ ├── ....tfrecord
│ └── ...
└── VOCdevkit
└── VOC2012
├── Annotations
├── ImageSets
│ ├── Action
│ ├── Layout
│ ├── Main
│ └── Segmentation
├── JPEGImages
├── SegmentationClass
├── SegmentationClassRaw
└── SegmentationObject
其中:
JPEGImages
: 存放原图SegmentationClass
: 存放mask图,即labelsImageSets\Segmentation
: 存放列表数据(.txt)tfrecord
: 为稍后将数据转为tensorflow所需要的tfrecord格式的文件夹,需手动创建train
: 模型保存的文件路径,存放模型文件,需手动创建eval
: 评估时event事件文件夹,需手动创建vis
: 可视化文件夹,需手动创建# From deeplab/datasets/
python remove_gt_colormap.py --original_gt_folder=./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClass --output_dir=./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClassRaw
上述命令和参数意义如下:
original_gt_folder
: 原带有colormap的单通道maks所在文件夹output_dir
:去除colormap后的mask存放文件夹(之后需要将这个文件夹的图片作为label,并转换成tfrecord格式数据)运行在datasets下的build_voc2012_data.py
,在命令行中修改参数:
python build_voc2012_data.py --image_folder=./pascal_voc_seg/VOCdevkit/VOC2012/JPEGImages --semantic_segmentation_folder=./pascal_voc_seg/VOCdevkit/VOC2012/SegmentationClass --list_folder='./pascal_voc_seg/VOCdevkit/VOC2012/ImageSets/Segmentation' --image_format="jpg" --output_dir='./pascal_voc_seg/tfrecord'
各参数意义如下:
image_folder
:保存images的路径semantic_segmentation_folder
:保存labels的路径list_folder
:保存train\val.txt文件的路径image_format
:image的格式output_dir
:生成tfrecord格式的数据所要保存的位置运行成功后,会提示如下信息:
>> Converting image 366/1464 shard 0 # 1464为train.txt中图片名个数
>> Converting image 732/1464 shard 1
>> Converting image 1098/1464 shard 2
>> Converting image 1464/1464 shard 3
>> Converting image 22/85 shard 0 # 85为val.txt中图片名数量,源文件中为1449
>> Converting image 44/85 shard 1
>> Converting image 66/85 shard 2
>> Converting image 85/85 shard 3
先从官方github上下载预训练模型(官方github地址),本人下载的是xception65_coco_voc_trainaug
,因此以此为例。下载后解压在deeplab/weights文件夹(需手动新建)中,如图所示:
接来来就是训练,在命令行中输入如下命令(假设环境已经ok且管理员方式打开命令提示符窗口,若严格按照上述推荐的步骤,则直接复制下述命令在命令提示符窗口不会有问题):
python train.py --logtostderr --training_number_of_steps=100 --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=513 --train_crop_size=513 --train_batch_size=1 --fine_tune_batch_norm=False --dataset="pascal_voc_seg" --tf_initial_checkpoint=./weights/deeplabv3_pascal_train_aug/model.ckpt --train_logdir=./datasets/pascal_voc_seg/exp/train_on_train_set/train --dataset_dir=./datasets/pascal_voc_seg/tfrecord
其中,部分参数意义如下:
tf_initial_checkpoint
:# 加载权重,第一次应为在官方github下载的预训练模型权重
train_logdir
: 保存训练的中间结果的路径
dataset_dir
: 第三步生成的tfrecord文件的路径,注意是文件路径,不是tfrecord文件
运行成功信息如下:
INFO:tensorflow:global step 1: loss = 0.3148 (15.549 sec/step)
INFO:tensorflow:global step 2: loss = 0.1740 (8.497 sec/step)
INFO:tensorflow:global step 3: loss = 0.5984 (6.847 sec/step)
INFO:tensorflow:global step 4: loss = 0.1599 (6.683 sec/step)
INFO:tensorflow:global step 5: loss = 0.3978 (6.617 sec/step)
INFO:tensorflow:global step 6: loss = 0.4886 (5.881 sec/step)
………………
INFO:tensorflow:global step 97: loss = 0.7356 (6.090 sec/step)
INFO:tensorflow:global step 98: loss = 0.5818 (6.163 sec/step)
INFO:tensorflow:global_step/sec: 0.163526
INFO:tensorflow:Recording summary at step 98.
INFO:tensorflow:global step 99: loss = 0.2523 (8.893 sec/step)
INFO:tensorflow:global step 100: loss = 0.2783 (6.421 sec/step)
INFO:tensorflow:Stopping Training.
INFO:tensorflow:Finished training! Saving model to disk.
eval.py
,输出为MIOU值在deeplab下执行以下命令:
python 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=./datasets/pascal_voc_seg/exp/train_on_train_set/train --eval_logdir=./pascal_voc_seg/exp/train_on_train_set/eval --dataset_dir=./datasets/pascal_voc_seg/tfrecord
其中部分文件路径参数意义如下:
checkpoint_dir
:模型checkpoint所在路径
eval_logdir
:结果输出路径,该文件夹需手动创建
dataset_dir
:验证集tfrecord文件所在路径,同训练步骤,此处为tfrecord文件路径
Note:
(1) 如果在step2没有将label数据通过’remove_gt_colormap.py’转换为单通道数据,这里会报错提示:[‘predictions’ out of bound];
(2) 若采用官方github中issues上的解决方式,此处会运行成功,但会出现miou极低的情况,本次测试过,得到的miou为0.04.
vis.py
,可视化训练结果在deeplab下执行以下命令:
python 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=./datasets/pascal_voc_seg/exp/train_on_train_set/train --vis_logdir=./datasets/pascal_voc_seg/exp/train_on_train_set/vis --dataset_dir=./datasets/pascal_voc_seg/tfrecord
各参数意义:
checkpoint_dir
: 模型checkpoint所在路径
vis_logdir
: 预测结果保存路径,自己创建
dataset_dir
: 生成的tfrecord数据集所在路径
成功运行提示信息如下:
INFO:tensorflow:Visualizing batch 1 / 85
INFO:tensorflow:Visualizing batch 2 / 85
INFO:tensorflow:Visualizing batch 3 / 85
INFO:tensorflow:Visualizing batch 4 / 85
INFO:tensorflow:Visualizing batch 5 / 85
INFO:tensorflow:Visualizing batch 6 / 85
INFO:tensorflow:Visualizing batch 7 / 85
INFO:tensorflow:Visualizing batch 8 / 85
INFO:tensorflow:Visualizing batch 9 / 85
INFO:tensorflow:Visualizing batch 10 / 85
……………………
最后,就可以在输出文件夹(’./datasets/pascal_voc_seg/exp/train_on_train_set/vis/vis_output’)中查看模型的预测结果了。
https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/pascal.md
https://www.aiuai.cn/aifarm257.html#1.TrainonPASCALVOC2012
https://blog.csdn.net/lijiancheng0614/article/details/80490309
https://blog.csdn.net/weixin_41713230/article/details/81081120
https://blog.csdn.net/Kelvin_XX/article/details/81946091
https://blog.csdn.net/X_Cosmic/article/details/80932542