|
# 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 \ |
|
--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="513,513" \ |
|
--train_batch_size=1 \ |
|
--dataset="pascal_voc_seg" \ |
|
--tf_initial_checkpoint=${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. In order to reproduce our results, one needs to use large batch size (> 12), |
|
and set fine_tune_batch_norm = True. Here, we simply use small batch size |
|
during training for the purpose of demonstration. If the users have limited |
|
GPU memory at hand, please fine-tune from our provided checkpoints whose |
|
batch norm parameters have been trained, and use smaller learning rate with |
|
fine_tune_batch_norm = False. |
|
|
|
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,513" \ |
|
--dataset="pascal_voc_seg" \ |
|
--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,513" \ |
|
--dataset="pascal_voc_seg" \ |
|
--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 |
|
``` |
|
|