图像语义分割 DeepLab v3+ 训练自己的数据集

21 篇文章 0 订阅
13 篇文章 0 订阅

环境:ubuntu 16.04 + TensorFlow 1.6.1 + cuda 9.0 + cudnn 7.0 +python2.7 

tensorflow 项目链接 https://github.com/tensorflow/models.git
下载后解压,所需要的工程在 models / research / deeplab / 目录下

1. 测试本地环境

首先添加slim路径,每次打开terminal都要加载路径
# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Quick test by running model_test.py:

# From tensorflow/models/research/
python deeplab/model_test.py

Quick running the whole code on the PASCAL VOC 2012 dataset:

# From tensorflow/models/research/deeplab
sh local_test.sh
如果都运行成功,说明本地环境已经可以了,接下来训练自己的数据集。

2. 准备数据

数据包括两部分 images 和labels ,image 为[n*m*3],jpeg 格式,label为[n*m*1],png格式。
还需要一个train.txt文件,其中是所有训练数据的文件名。

接下来运行 /models/research/deeplab/dataset 下的build_voc2012_data.py
python build_voc2012_data.py \
  --image_folder="保存images的路径" \
  --semantic_segmentation_folder="保存labels的路径" \
  --list_folder="保存train.txt文件的路径" \
  --image_format="jpeg(image格式)" \
  --output_dir="生成tfrecord格式的数据所要保存的位置"

3. 开始训练

修改 /models/research/deeplab/dataset 下 segmentation_dataset.py
PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
    splits_to_sizes={
        'train': 1464,
        'trainval': 2913,
        'val': 1449,
    },
    num_classes=21,
    ignore_label=255,
)
我是在Pascal_voc上修改的,改成自己的数据集大小以及输出label的类别数,num_classes已经包含了背景

修改 /models/research/deeplab/下train.py
# Set to False if one does not want to re-use the trained classifier weights.
flags.DEFINE_boolean('initialize_last_layer', True,
                     'Initialize the last layer.')
把 True 改成 False ,重新训练最后一层。
开始训练:
python train.py \
  --logtostderr \
  --train_split="trainval" \  可以选择train/val/trainval 不同的数据集 
  --model_variant="xception_65" \
  --atrous_rates=6 \
  --atrous_rates=12 \
  --atrous_rates=18 \
  --output_stride=16 \
  --decoder_output_stride=4 \
  --train_crop_size=512 \
  --train_crop_size=512 \
  --train_batch_size=12 \
  --training_number_of_steps=30000 \
  --fine_tune_batch_norm=True \
  --tf_initial_checkpoint="加载与训练模型/model.ckpt" \
  --train_logdir="保存训练的中间结果" \
  --dataset_dir="生成的tfrecord的路径"

参数设置注意事项:
1.
# When fine_tune_batch_norm=True, use at least batch size larger than 12
# (batch size more than 16 is better). Otherwise, one could use smaller batch
# size and set fine_tune_batch_norm=False.
2.
# For `xception_65`, use atrous_rates = [12, 24, 36] if output_stride = 8, or
# rates = [6, 12, 18] if output_stride = 16. Note one could use different
# atrous_rates/output_stride during training/evaluation.

4. eval

python "${WORK_DIR}"/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=512 \
  --eval_crop_size=512 \
  --checkpoint_dir="${TRAIN_LOGDIR}" \
  --eval_logdir="${EVAL_LOGDIR}" \
  --dataset_dir="${DATASET}" 

输出mean iou 

5. 输出预测结果

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 \
  --checkpoint_dir="${TRAIN_LOGDIR}" \
  --vis_logdir="${VIS_LOGDIR}" \
  --dataset_dir="${DATASET}"
输出图片的预测结果到 vis_logdir




  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 216
    评论
在Win10系统下,使用DeepLab V3进行语义分割训练自己的数据集可以通过以下步骤实现: 1. 准备数据集:首先,需要进行数据集的准备工作。收集大量的图像数据,并为每张图像标注像素级别的语义标签。确保训练图像和标签数据是一一对应的。 2. 安装依赖环境:在Win10系统下,首先需要安装Python和TensorFlow等深度学习框架,并配置好相应的环境变量。确保能够成功导入相关的库和模块。 3. 下载DeepLab V3:从GitHub上下载DeepLab V3的源代码,并解压到本地目录。在命令行中切换到DeepLab V3的根目录。 4. 数据预处理:使用脚本文件对数据集进行预处理,将图像和标签数据转换成模型可接受的格式。这可以通过运行预处理脚本来完成。 5. 配置参数:在配置文件中设置相关的训练参数,如训练图像的路径、标签的路径、模型的参数等。可以根据实际需要进行调整。 6. 运行训练:在命令行中运行训练脚本,该脚本会调用DeepLab V3模型进行训练。根据配置文件中的设置,模型将使用训练数据进行迭代训练,以优化模型的性能。 7. 评估模型:训练完成后,可以运行评估脚本对训练得到的模型进行评估。该脚本将使用测试数据进行预测,并计算出预测结果的准确性。 8. 使用模型:训练完成后,可以使用已训练好的模型对新的图像进行语义分割。通过在命令行中运行预测脚本,将输入图像作为参数进行预测,即可得到相应的语义分割结果。 以上是在Win10系统下使用DeepLab V3进行语义分割训练自己的数据集的基本步骤。根据具体情况和需求,可能还需要进行一些额外的调整和改进。
评论 216
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值