# Running DeepLab on PASCAL VOC 2012 Semantic Segmentation Dataset This page walks through the steps required to run DeepLab on PASCAL VOC 2012 on a local machine. ## Download dataset and convert to TFRecord We have prepared the script (under the folder `datasets`) to download and convert PASCAL VOC 2012 semantic segmentation dataset to TFRecord. ```bash # From the tensorflow/models/research/deeplab/datasets directory. sh download_and_convert_voc2012.sh ``` The converted dataset will be saved at ./deeplab/datasets/pascal_voc_seg/tfrecord ## Recommended Directory Structure for Training and Evaluation ``` + datasets + pascal_voc_seg + VOCdevkit + VOC2012 + JPEGImages + SegmentationClass + tfrecord + exp + train_on_train_set + train + eval + vis ``` where the folder `train_on_train_set` stores the train/eval/vis events and results (when training DeepLab on the PASCAL VOC 2012 train set). ## Running the train/eval/vis jobs A local training job using `xception_65` can be run with the following command: ```bash # From tensorflow/models/research/ python deeplab/train.py \ --logtostderr \ --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=1 \ --tf_initial_checkpoints=${PATH_TO_INITIAL_CHECKPOINT} \ --train_logdir=${PATH_TO_TRAIN_DIR} \ --dataset_dir=${PATH_TO_DATASET} ``` where ${PATH_TO_INITIAL_CHECKPOINT} is the path to the initial checkpoint (usually an ImageNet pretrained checkpoint), ${PATH_TO_TRAIN_DIR} is the directory in which training checkpoints and events will be written to, and ${PATH_TO_DATASET} is the directory in which the PASCAL VOC 2012 dataset resides. Note that for {train,eval,vis}.py: 1. We use small batch size during training. The users could change it based on the available GPU memory and also set `fine_tune_batch_norm` to be False or True depending on the use case. 2. The users should change atrous_rates from [6, 12, 18] to [12, 24, 36] if setting output_stride=8. 3. The users could skip the flag, `decoder_output_stride`, if you do not want to use the decoder structure. A local evaluation job using `xception_65` can be run with the following command: ```bash # From tensorflow/models/research/ 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=513 \ --eval_crop_size=513 \ --checkpoint_dir=${PATH_TO_CHECKPOINT} \ --eval_logdir=${PATH_TO_EVAL_DIR} \ --dataset_dir=${PATH_TO_DATASET} ``` where ${PATH_TO_CHECKPOINT} is the path to the trained checkpoint (i.e., the path to train_logdir), ${PATH_TO_EVAL_DIR} is the directory in which evaluation events will be written to, and ${PATH_TO_DATASET} is the directory in which the PASCAL VOC 2012 dataset resides. A local visualization job using `xception_65` can be run with the following command: ```bash # From tensorflow/models/research/ 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=513 \ --vis_crop_size=513 \ --checkpoint_dir=${PATH_TO_CHECKPOINT} \ --vis_logdir=${PATH_TO_VIS_DIR} \ --dataset_dir=${PATH_TO_DATASET} ``` where ${PATH_TO_CHECKPOINT} is the path to the trained checkpoint (i.e., the path to train_logdir), ${PATH_TO_VIS_DIR} is the directory in which evaluation events will be written to, and ${PATH_TO_DATASET} is the directory in which the PASCAL VOC 2012 dataset resides. Note that if the users would like to save the segmentation results for evaluation server, set also_save_raw_predictions = True. ## Running Tensorboard Progress for training and evaluation jobs can be inspected using Tensorboard. If using the recommended directory structure, Tensorboard can be run using the following command: ```bash tensorboard --logdir=${PATH_TO_LOG_DIRECTORY} ``` where `${PATH_TO_LOG_DIRECTORY}` points to the directory that contains the train, eval, and vis directories (e.g., the folder `train_on_train_set` in the above example). Please note it may take Tensorboard a couple minutes to populate with data. ## Example We provide a script to run the {train,eval,vis,export_model}.py on the PASCAL VOC 2012 dataset as an example. See the code in local_test.sh for details. ```bash # From tensorflow/models/research/deeplab sh local_test.sh ```