ubuntu16.04+GTX1080TI+tensorflow1.12+cuda9.0+python3.6.5
直接上github下载即可。点这个地址
下载xception_cityscape模型。点这个地址
1.目录制作
deeplab
+datasets
+ice_data
+image (这个里面放所有的原始图像-RGB的jpg)
+index
+train.txt (训练文件名)
+val.txt (验证、测试的文件名)
+mask (这个里面放所有标记图像-8位的png)
+tfrecord (这个用于存放等下产生的TF)
2.TF数据生成
python datasets/build_voc2012_data.py \
--image_folder="/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/image" \
--semantic_segmentation_folder="/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/mask" \
--list_folder="/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/index" \
--image_format="jpg" \
--output_dir="/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/tfrecord"
image_folder:这个是所有原始图片的路径
semantic_sefmentation_folder:这个是所有标记图片的路径
list_folder:这个是存放train.txt val.txt的路径
image_format:原始图片的格式
output_dir:最后存放生成的tfrecord的地址
(注:以上都需要根据自己的电脑路径和数据集情况进行更改)
1.修改segmentation_dataset.py,在110行左右添加,这个是根据我的数据集加的
_ICE_DATA = DatasetDescriptor(
splits_to_sizes={
'train': 360, # num of samples in images/training
'val': 100,
},
num_classes=4, #加上background
ignore_label=255,
)
并在下面添加自己的数据集
_DATASETS_INFORMATION = {
'cityscapes': _CITYSCAPES_INFORMATION,
'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
'ade20k': _ADE20K_INFORMATION,
'ice_data': _ICE_DATA
}
2.修改data_generator.py(同上),在97行左右添加
_ICE_DATA = DatasetDescriptor(
splits_to_sizes={
'train': 360, # num of samples in images/training
'val': 100,
},
num_classes=4, #加上background
ignore_label=255,
)
并在下面添加
_DATASETS_INFORMATION = {
'cityscapes': _CITYSCAPES_INFORMATION,
'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
'ade20k': _ADE20K_INFORMATION,
'ice_data': _ICE_DATA
}
3.修改train_utils.py,在160行左右,改成如下形式
# Variables that will not be restored.
#exclude_list = ['global_step']
exclude_list = ['global_step','logits']
4.修改train.py 135行左右改成如下形式,这是为了加载模型时,最后一层重头训练,因为我们的分类和其deeplab的不同。
# Set to False if one does not want to re-use the trained classifier weights.
flags.DEFINE_boolean('initialize_last_layer', False,
'Initialize the last layer.')
flags.DEFINE_boolean('last_layers_contain_logits_only', True,
'Only consider logits as last layers or not.')
5.添加路径,避免“no module deeplab”,这个在train.py vis.py eval.py的开头均加上如下代码
import sys
sys.path.append("/home/initbin/init_bin/tf_code/models-master/research")
#注意:这个路径修改成自己的,而且这段语句最好添加在文件顶部位置。
6.修改feature_extractor.py文件,避免no module named 'nets' ,这个在24行修改成一下形式
#from nets.mobilenet import mobilenet_v2
from slim.nets.mobilenet import mobilenet_v2
(注:如果还出现no module named 'nets' ,那么找到对应的文件,添加slim即可)
python deeplab/train.py \
--logtostderr \
--training_number_of_steps=9000 \
--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=4 \
--dataset="ice_data" \
--tf_initial_checkpoint='/home/initbin/init_bin/tf_code/models-master/research/deeplab/pretrained_model/model.ckpt' \
--train_logdir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/model' \
--dataset_dir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/tfrecord'
dataset:设置为在segmentation_dataset.py文件设置的数据集名
tf_initial_checkpoint:预训练的权重,我使用CityScapes的预训练权重
train_logdir:训练产生的文件存放位置
dataset_dir:数据集的TFRecord文件
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=673 \
--eval_crop_size=600 \
--dataset="ice_data" \
--checkpoint_dir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/model' \
--eval_logdir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/output/eval' \
--dataset_dir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/tfrecord'
eval_split:设置为测试集
crop_size:这个似乎只能设置为验证图片的大小 我的是673*600的--注意
dataset:设置为在segmentation_dataset.py文件设置的数据集名
dataset_dir:设置为我们创建的数据集的TFRecord文件
checkpoint_dir:保存模型的位置
这个执行后一直等待,可以将其关闭,然后通过tensorboard看到miou,这里不是很懂。
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=673 \
--vis_crop_size=600 \
--dataset="ice_data" \
--colormap_type="pascal" \
--checkpoint_dir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/model' \
--vis_logdir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/output/vis' \
--dataset_dir='/home/initbin/init_bin/tf_code/models-master/research/deeplab/datasets/ice_data/tfrecord'
vis_split:设置为测试集
crop_size:这个似乎只能设置为验证图片的大小 我的是673*600的--注意
dataset:设置为在segmentation_dataset.py文件设置的数据集名
dataset_dir:设置为我们创建的数据集的TFRecord文件
checkpoint_dir:保存模型的位置
vis_logdir:这个是可视化的结果保存的位置
八、参考链接
https://blog.csdn.net/jairana/article/details/83900226#23__158
https://blog.csdn.net/weixin_38385446/article/details/82781109
https://blog.csdn.net/weixin_42401666/article/details/84854123
http://www.pianshen.com/article/349671650/
文章是在参考以上博客的情况下,根据新出现的错误情况进行的记录。