目录
SSD tensorflow版本
step 1/4 测试代码
1. 预训练的模型
unzip ssd_300_vgg.ckpt.zip
2.执行检测
我是通过转成python脚本来运行的。官方教程如下:
jupyter notebook notebooks/ssd_notebook.ipynb
step 2/4 训练
1.voc转tfrecords数据类型
# mkdir tfrecords
DATASET_DIR=./VOC2007/
OUTPUT_DIR=./tfrecords
python tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=./VOC2007/ \
--output_name=voc_2007_train \
--output_dir=./tfrecords
wiodow下
python tf_convert_data.py --dataset_name=pascalvoc --dataset_dir=./VOC2007/ --output_name=voc_2007_train --output_dir=./tfrecords
问题解决
Q: 需要更改:读取方式utf-8编码coding出错。
A:
image_data = tf.gfile.FastGFile(filename, 'r').read()
image_data = tf.gfile.FastGFile(filename, 'rb').read()
2.训练
ssdvgg300微调
# batch_size set <16
# gpu_memory_fraction set <=0.5
```bash
DATASET_DIR=./tfrecords
TRAIN_DIR=./logs/
CHECKPOINT_PATH=./checkpoints/ssd_300_vgg.ckpt
python train_ssd_network.py \
--train_dir=${TRAIN_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=pascalvoc_2012 \
--dataset_split_name=train \
--model_name=ssd_300_vgg \
--checkpoint_path=${CHECKPOINT_PATH} \
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--batch_size=32
```
window下_ssdvgg300微调
```window
python train_ssd_network.py --train_dir=./logs/ --dataset_dir=./tfrecords --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=./checkpoints/ssd_300_vgg.ckpt --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=16
```
vgg微调
DATASET_DIR=./tfrecords
TRAIN_DIR=./log/
CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt
python train_ssd_network.py \
--train_dir=${TRAIN_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=pascalvoc_2007 \
--dataset_split_name=train \
--model_name=ssd_300_vgg \
--checkpoint_path=${CHECKPOINT_PATH} \
--checkpoint_model_scope=vgg_16 \
--checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
--trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--learning_rate_decay_factor=0.94 \
--batch_size=32
window下_vgg微调
python train_ssd_network.py --train_dir=./log/ --dataset_dir=./tfrecords --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=./checkpoints/vgg_16.ckpt --checkpoint_model_scope=vgg_16 --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --learning_rate_decay_factor=0.94 --batch_size=32
问题解决
Q: 无法运行训练
A:
# batch_size set <16
# gpu_memory_fraction set <=0.5
step 3/4 验证
1.测试数据转换
同理 voc转tfrecords数据类型.
# mkdir tfrecords
DATASET_DIR=./VOC2007/
OUTPUT_DIR=./test_tfrecords
python tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=./VOC2007/ \
--output_name=voc_2007_test \
--output_dir=./test_tfrecords
2. 验证
EVAL_DIR=${TRAIN_DIR}/eval
python eval_ssd_network.py \
--eval_dir=${EVAL_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=pascalvoc_2007 \
--dataset_split_name=test \
--model_name=ssd_300_vgg \
--checkpoint_path=${TRAIN_DIR} \
--wait_for_checkpoints=True \
--batch_size=1 \
--max_num_batches=500
```window
python eval_ssd_network.py --eval_dir=./logs/eval --dataset_dir=./test_tfrecords --dataset_name=pascalvoc_2007 --dataset_split_name=test --model_name=ssd_300_vgg --checkpoint_path=./logs/ --wait_for_checkpoints=True --batch_size=1 --max_num_batches=500
```
问题解决
Q:TypeError: _variable_v2_call() got an unexpected keyword argument 'collections'
A:It should be work if you change the code in ./tf_extended/metrics.py Line 51.
"return variables.Variable" =>> "return variables.VariableV1"
step 4/4 监测
tensorboard logdir=.
参考
ssd tensorflow版本实现
https://github.com/balancap/SSD-Tensorflow
https://github.com/DJdongbudong/SSD-Tensorflow
中文教程:http://www.studyai.com/article/3e454b9e#goto-page-logo