[deeplabv3+]训练自己的数据集

一、环境

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即可)

五、训练--train

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文件

六、评估--eval

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,这里不是很懂。

七、可视化--vis

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/

文章是在参考以上博客的情况下,根据新出现的错误情况进行的记录。

你可能感兴趣的:(深度学习)