Loading... ## 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](https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ "清华大学 TUNA 镜像站 - Anaconda") [Anaconda 4.6.11](https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.03-Linux-x86_64.sh "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](https://www.cityscapes-dataset.com/ "Cityscapes") 官方数据集 [百度云链接](https://pan.baidu.com/s/1A1wx-in6-IkbBq2Xy_MNeQ "百度云 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 - 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=50000 \ --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=769 \ --train_crop_size=769 \ --train_batch_size=1 \ --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 补充 ### [TensorFlow DeepLab Model Zoo](https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md "TensorFlow DeepLab Model Zoo") 最后修改:2022 年 01 月 03 日 © 允许规范转载