Google公式に実装されたDeeplavV 3+上で自分のデータセットを訓練する方法

40449 ワード

環境:ubuntu 16.04+TensorFlow 1.8.1+cuda 9.0+cudnn 7.0+python 2.7 
tensorflowプロジェクトリンクhttps://github.com/tensorflow/models.git
ダウンロードした後に解凍して、必要な工事は
models
/
research
/
deeplab
/ディレクトリの下

1.ローカル環境のテスト


まずslimパスを追加し、terminalを開くたびにパスをロードします.

      
      
      
      
  1. # From tensorflow/models/research/
  2. export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Quick test by running model_test.py:

# From tensorflow/models/research/
python deeplab/model_test.py

Quick running the whole code on the PASCAL VOC 2012 dataset:

# From tensorflow/models/research/deeplab
sh local_test.sh
, , 。

2.データの

images labels ,image [n*m*3],jpeg ,label [n*m*1],png 。
train.txt , 。
/models/research/deeplab/dataset build_voc2012_data.py

     
     
     
     
  1. python build_voc2012_data.py \
  2. --image_folder=" images " \
  3. --semantic_segmentation_folder=" labels " \
  4. --list_folder=" train.txt " \
  5. --image_format="jpeg(image )" \
  6. --output_dir=" tfrecord "

3.トレーニング

/models/research/deeplab/dataset segmentation_dataset.py

      
      
      
      
  1. PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
  2. splits_to_sizes={
  3. 'train': 1464,
  4. 'trainval': 2913,
  5. 'val': 1449,
  6. },
  7. num_classes= 21,
  8. ignore_label= 255,
  9. )
Pascal_voc , label ,num_classes
/models/research/deeplab/ train.py

      
      
      
      
  1. # Set to False if one does not want to re-use the trained classifier weights.
  2. flags.DEFINE_boolean( 'initialize_last_layer', True,
  3. 'Initialize the last layer.')
True False , 。


     
     
     
     
  1. python train.py \
  2. --logtostderr \
  3. --train_split="trainval" \ train/val/trainval
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --train_crop_size=512 \
  11. --train_crop_size=512 \
  12. --train_batch_size=12 \
  13. --training_number_of_steps=30000 \
  14. --fine_tune_batch_norm=True \
  15. --tf_initial_checkpoint=" /model.ckpt" \
  16. --train_logdir=" " \
  17. --dataset_dir=" tfrecord "
1.

     
     
     
     
  1. # When fine_tune_batch_norm=True, use at least batch size larger than 12
  2. # (batch size more than 16 is better). Otherwise, one could use smaller batch
  3. # size and set fine_tune_batch_norm=False.
2.

     
     
     
     
  1. # For `xception_65`, use atrous_rates = [12, 24, 36] if output_stride = 8, or
  2. # rates = [6, 12, 18] if output_stride = 16. Note one could use different
  3. # atrous_rates/output_stride during training/evaluation.

4. eval


     
     
     
     
  1. python "${WORK_DIR}"/eval.py \
  2. --logtostderr \
  3. --eval_split="val" \
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --eval_crop_size=512 \
  11. --eval_crop_size=512 \
  12. --checkpoint_dir="${TRAIN_LOGDIR}" \
  13. --eval_logdir="${EVAL_LOGDIR}" \
  14. --dataset_dir="${DATASET}"
mean iou 

5. の


     
     
     
     
  1. python vis.py \
  2. --logtostderr \
  3. --vis_split="val" \
  4. --model_variant="xception_65" \
  5. --atrous_rates=6 \
  6. --atrous_rates=12 \
  7. --atrous_rates=18 \
  8. --output_stride=16 \
  9. --decoder_output_stride=4 \
  10. --vis_crop_size=513 \
  11. --vis_crop_size=513 \
  12. --checkpoint_dir="${TRAIN_LOGDIR}" \
  13. --vis_logdir="${VIS_LOGDIR}" \
  14. --dataset_dir="${DATASET}"
vis_logdir




: , model.ckpt, , ( ), ** **, , ( initialize_last_layer False)