原文地址:DeepLab 使用 Cityscapes 数据集训练模型

0x00 操作环境

OS: Ubuntu 16.04 LTS

CPU: Intel® Core™ i7-4790K

GPU: GeForce GTX 1080/PCIe/SSE2

Nvidia Driver Version: 384.130

RAM: 32 GB

Anaconda: 4.6.11

CUDA: 9.0

cuDNN: 7.3.1

python: 3.6.8

tensorflow-gpu: 1.13.1

本文操作路径基于 /home/ai,使用 ~/ 代替

0x01 环境配置

安装 Anaconda

清华大学 TUNA 镜像站 - Anaconda

Anaconda 4.6.11

首先下载安装脚本并赋予执行权限

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.03-Linux-x86_64.sh
chmod +x Anaconda3-2019.03-Linux-x86_64.sh

运行安装脚本

./Anaconda3-2019.03-Linux-x86_64.sh

按照提示输入安装信息,建议安装在 /usr/local/anaconda3 目录下,方便管理

安装 python 3.6

最新版的 Anaconda 默认在 base 环境安装 python 3.7,导致很多框架不支持,这里换成 3.6

conda install python=3.6

安装 tensorflow-gpu

conda install tensorflow-gpu=1.13.0

安装 CUDA

conda install cudatoolkit=9.0

0x02 配置 DeepLab v3

clone 源码

git clone https://github.com/tensorflow/models.git

下载数据集

使用 Cityscapes 官方数据集

百度云链接

提取码: 7jgc

在 research/deeplab/datasets/dataset 目录下新建 dataset 文件夹,并将下载的数据集解压至 model-master/research/deeplab/datasets/dataset

mkdir model-master/research/deeplab/datasets/dataset
unzip cityscapes.zip -d model-master/research/deeplab/datasets/dataset

解压 gtFine 文件

cd model-master/research/deeplab/datasets/dataset/cityscapes && \
unzip gtFine.zip

下载 Cityscapes 数据集相关脚本

clone 源码并移动至 model-master/research/deeplab/datasets/dataset/cityscapes

git clone https://github.com/mcordts/cityscapesScripts
mv cityscapesScripts model-master/research/deeplab/datasets/dataset/cityscapes

下载预训练模型

创建用于存放模型的文件夹

mkdir ~/models-master/research/deeplab/model

下载模型并解压至 model 文件夹

wget http://download.tensorflow.org/models/deeplabv3_mnv2_cityscapes_train_2018_02_05.tar.gz
tar zxvf deeplabv3_mnv2_cityscapes_train_2018_02_05.tar.gz ~/models-master/research/deeplab/model

0x03 转换数据集格式

将 Cityscapes 的 JSON 数据转换成 tfrecord

创建用于输出 tfrecord 数据的文件夹

mkdir ~/models-master/research/deeplab/datasets/dataset/cityscapes/tfrecord

修改 models-master/research/deeplab/datasets/convert_cityscapes.sh 中的路径设置

以下直接给出脚本全文

注意:根据实际情况修改路径

# Exit immediately if a command exits with a non-zero status.
set -e CURRENT_DIR=$(pwd)
WORK_DIR="~/models-master/research/deeplab/datasets" # Root path for Cityscapes dataset.
CITYSCAPES_ROOT="${WORK_DIR}/dataset/cityscapes" # Create training labels.
python "${CITYSCAPES_ROOT}/cityscapesscripts/preparation/createTrainIdLabelImgs.py" # Build TFRecords of the dataset.
# First, create output directory for storing TFRecords.
OUTPUT_DIR="${CITYSCAPES_ROOT}/tfrecord"
mkdir -p "${OUTPUT_DIR}" BUILD_SCRIPT="${WORK_DIR}/build_cityscapes_data.py" echo "Converting Cityscapes dataset..."
python "${BUILD_SCRIPT}" \
--cityscapes_root="${CITYSCAPES_ROOT}" \
--output_dir="${OUTPUT_DIR}" \

赋予脚本执行权限

chmod +x models-master/research/deeplab/datasets/convert_cityscapes.sh

为方便文件管理,以上创建的文件结构与项目默认的结构不同,会导致一些脚本找不到 cityscapesScripts 相关模块,需要在 python 脚本中添加路径

~/models-master/research/deeplab/datasets/dataset/cityscapes/cityscapesscripts/preparation/createTrainIdLabelImgs.py

在 from cityscapesscripts 之前添加

sys.path.append('/home/ai/models-master_train-cityscapes/research/deeplab/datasets/dataset/cityscapes')

修改 build_cityscapes_data.py 脚本中的路径设置

~/models-master/research/deeplab/datasets/build_cityscapes_data.py
# Cityscapes 目录
tf.app.flags.DEFINE_string('cityscapes_root',
'./dataset/cityscapes',
'Cityscapes dataset root folder.') # 输出目录
tf.app.flags.DEFINE_string('output_dir',
'./dataset/cityscapes/tfrecord',
'Path to save converted SSTable of TensorFlow examples.')

执行格式转换脚本

~/models-master/research/deeplab/datasets/convert_cityscapes.sh

0x04 训练

创建用于保存训练权重的目录

mkdir ~/models-master/research/deeplab/train

参数

  • training_number_of_steps

    • 迭代次数
  • train_crop_size
    • 图片裁剪大小,默认 513,最小 321
  • fine_tune_batch_norm=False
    • 是否使用 batch_norm,官方建议,如果训练的 batch_size 小于12的话,须将该参数设置为False
  • tf_initial_checkpoint
    • 预训练的初始 checkpoint,即预训练模型中的 model.ckpt
  • train_logdir
    • 保存训练权重的目录
  • dataset_dir
    • 使用转换后的 tfrecord 数据集目录
python train.py \
--logtostderr \
--training_number_of_steps=30000 \
--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=321 \
--train_crop_size=321 \
--train_batch_size=4 \
--fine_tune_batch_norm=False \
--dataset="cityscapes" \
--tf_initial_checkpoint="~/models-master/research/deeplab/model/train_fine/model.ckpt" \
--train_logdir="~/models-master/research/deeplab/train" \
--dataset_dir="~/models-master/research/deeplab/datasets/dataset/cityscapes/tfrecord"

0x05 测试

创建用于保存输出的目录

mkdir ~/models-master/research/deeplab/vis

参数

  • vis_crop_size

    • 图片裁剪大小
  • checkpoint_dir
    • 训练权重的目录
  • vis_logdir
    • 输出分割结果的目录
  • dataset_dir
    • 使用转换后的 tfrecord 数据集目录

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=1025

--vis_crop_size=2049

--dataset="cityscapes"

--colormap_type="cityscapes"

--checkpoint_dir="/home/ai/models-master_train-cityscapes/research/deeplab/train"

--vis_logdir="/home/ai/models-master_train-cityscapes/research/deeplab/vis"

--dataset_dir="/home/ai/models-master_train-cityscapes/research/deeplab/datasets/dataset/cityscapes/tfrecord"

测试后生成的原图和分割图存在 vis_logdir/segmentation_results 目录下

0x06 补充

TensorFlow DeepLab Model Zoo

DeepLab 使用 Cityscapes 数据集训练模型的更多相关文章

  1. tensorflow语义分割api使用(deeplab训练cityscapes)

    安装教程:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/installation.md citysca ...

  2. TensorFlow下利用MNIST训练模型并识别自己手写的数字

    最近一直在学习李宏毅老师的机器学习视频教程,学到和神经网络那一块知识的时候,我觉得单纯的学习理论知识过于枯燥,就想着自己动手实现一些简单的Demo,毕竟实践是检验真理的唯一标准!!!但是网上很多的与t ...

  3. MMDetection 快速开始,训练自定义数据集

    本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...

  4. 语义分割丨PSPNet源码解析「训练阶段」

    引言 之前一段时间在参与语义分割的项目,最近有时间了,正好把这段时间的所学总结一下. 在代码上,语义分割的框架会比目标检测简单很多,但其中也涉及了很多细节.在这篇文章中,我以PSPNet为例,解读一下 ...

  5. 多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!

    图像标注速度提升10倍! 这是多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果. Curve-GCN是一种高效交互式图像标注方法,其性能优于Polygon-RNN++.在自动模式 ...

  6. Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 原始文档 https://www.yuque.com/lart/papers/onk4sn 在本文中,我们通 ...

  7. 语义分割之Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 在本文中,我们通过 基于自我约束机制捕获丰富的上下文依赖关系来解决场景分割任务.       与之前通过多尺 ...

  8. [转]综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. _论文地址:htt ...

  9. 综述论文翻译:A Review on Deep Learning Techniques Applied to Semantic Segmentation

    近期主要在学习语义分割相关方法,计划将arXiv上的这篇综述好好翻译下,目前已完成了一部分,但仅仅是尊重原文的直译,后续将继续完成剩余的部分,并对文中提及的多个方法给出自己的理解. 论文地址:http ...

随机推荐

  1. 114. Flatten Binary Tree to Linked List 把二叉树变成链表

    [抄题]: Given a binary tree, flatten it to a linked list in-place. For example, given the following tr ...

  2. 创建的vue项目出错的时候,提示This dependency was not found错误的处理方法

    错误如图所示: 解决方法:npm install stylus-loader css-loader style-loader --save-dev

  3. ES之五:ElasticSearch聚合

    前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...

  4. 一句话shell【php】

    1.mysql执行语句拿shell Create TABLE a (cmd text NOT NULL); Insert INTO a (cmd) VALUES('<?php @eval($_P ...

  5. Android 简单布局、控件

    布局 线性布局 LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  6. 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)

    传送门 题意:给一个串,每个位置有一个权值,当S[s...s+len−1]=S[t...t+len−1]&&S[s...s+len]̸=S[t..t+len]S[s...s+len-1 ...

  7. python调用 sshpass

    [root@qinhan ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...

  8. 移动设备输入Touch类及相关API

    Touch:[结构体]存储移动端手指触摸屏幕的信息.根据触摸信息,可以在移动端实现各种功能. Input.multiTouchEnabled:是否开启触控.true:表示多点触控:false:表示单点 ...

  9. 第四章 javascript的语句、对象笔记摘要

    表达式语句 greeting ="Hello"+name;//赋值语句 i*=3; count++; delete o.x; //删除 alert(greeting); //函数 ...

  10. [ 9.26 ]CF每日一题系列—— 771B递推问题

    Description: 给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - ...