原文地址: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
首先下載安裝指令碼並賦予執行許可權
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
目錄下