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
/ディレクトリの下
まずslimパスを追加し、terminalを開くたびにパスをロードします.
tensorflowプロジェクトリンクhttps://github.com/tensorflow/models.git
ダウンロードした後に解凍して、必要な工事は
models
/
research
/
deeplab
/ディレクトリの下
1.ローカル環境のテスト
まずslimパスを追加し、terminalを開くたびにパスをロードします.
-
# From tensorflow/models/research/
-
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
-
python build_voc2012_data.py \
-
--image_folder=" images " \
-
--semantic_segmentation_folder=" labels " \
-
--list_folder=" train.txt " \
-
--image_format="jpeg(image )" \
-
--output_dir=" tfrecord "
3.トレーニング
/models/research/deeplab/dataset segmentation_dataset.py
-
PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
-
splits_to_sizes={
-
'train':
1464,
-
'trainval':
2913,
-
'val':
1449,
-
},
-
num_classes=
21,
-
ignore_label=
255,
-
)
Pascal_voc , label ,num_classes
/models/research/deeplab/ train.py
-
# Set to False if one does not want to re-use the trained classifier weights.
-
flags.DEFINE_boolean(
'initialize_last_layer',
True,
-
'Initialize the last layer.')
True False , 。
:
-
python train.py \
-
--logtostderr \
-
--train_split="trainval" \ train/val/trainval
-
--model_variant="xception_65" \
-
--atrous_rates=6 \
-
--atrous_rates=12 \
-
--atrous_rates=18 \
-
--output_stride=16 \
-
--decoder_output_stride=4 \
-
--train_crop_size=512 \
-
--train_crop_size=512 \
-
--train_batch_size=12 \
-
--training_number_of_steps=30000 \
-
--fine_tune_batch_norm=True \
-
--tf_initial_checkpoint=" /model.ckpt" \
-
--train_logdir=" " \
-
--dataset_dir=" tfrecord "
:
1.
-
# When fine_tune_batch_norm=True, use at least batch size larger than 12
-
# (batch size more than 16 is better). Otherwise, one could use smaller batch
-
# size and set fine_tune_batch_norm=False.
2.
-
# For `xception_65`, use atrous_rates = [12, 24, 36] if output_stride = 8, or
-
# rates = [6, 12, 18] if output_stride = 16. Note one could use different
-
# atrous_rates/output_stride during training/evaluation.
4. eval
-
python "${WORK_DIR}"/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=512 \
-
--eval_crop_size=512 \
-
--checkpoint_dir="${TRAIN_LOGDIR}" \
-
--eval_logdir="${EVAL_LOGDIR}" \
-
--dataset_dir="${DATASET}"
mean iou
5. の
-
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=513 \
-
--vis_crop_size=513 \
-
--checkpoint_dir="${TRAIN_LOGDIR}" \
-
--vis_logdir="${VIS_LOGDIR}" \
-
--dataset_dir="${DATASET}"
vis_logdir
: , model.ckpt, , ( ), ** **, , ( initialize_last_layer False)