url:http://www.studyai.com/article/3e454b9e
Github:https://github.com/balancap/SSD-Tensorflow
下载SSD工程压缩包
然后打开notebooks文件夹下的ssd_notebook.ipynb。。。。注释掉cell3
将cell6的ckpt_filename改为绝对路径,cell10的path也改为绝对路径
运行notebook,每个cell依次运行,最后会显示一张demo文件下的检测结果,这就是SSD的simple demo
测试-evaluation
测试就是用voc2007的test set来测试已经训练好的checkpoint的mAP,github上提供了三个已经训练好的model的checkpoint
需要做的准备有:
1. 下载voc2007的数据集,然后将test set转化成tfrecord(在转化时,源码只使用了annotations和jpegimages两个文件夹的内容来制作tfrecords)
2. 下载checkpoint,如voc2007和voc2012训练集训练的checkpoint(这个要到github上SSD的主页去下载,但是好像被墙了,不下载其实也没关系,因为前面自带的有一个checkpoint是可以用的)
下载好的voc2007文件test set 结构是这样的:
然后在SSD的工程下面创建一个shell脚本,调用tf_convert_data.py将test set转化成tfrecoeds:(注意:这里直接运行会碰到无法读取图片,UTF-8无法decode的Erro,解决办法是打开SSD工程—>datasets—>pascalvoc_to_tfrecords.py 。。。然后更改文件的83行读取方式为’rb’)
#!/bin/bash#This is a shell script to convert Pascal VOC datasets(2007 and 2012) into TF-Records only.-
#Directory where the original dataset is storedDATASET_DIR=/home/wu/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/-
#Output directory where to store TFRecords filesOUTPUT_DIR=/home/wu/voc2007_test_tfrecords-
python3 ./tf_convert_data.py \--dataset_name=pascalvoc \--dataset_dir=${DATASET_DIR} \--output_name=voc_2007_test \--output_dir=${OUTPUT_DIR}
DATASET_DIR是下载的voc2007测试集的路径,OUTPUT_DIR是自己设置的保存tfrecords的路径,其他选项保持默认如截图
生成测试集的tfrecords后,继续在SSD工程下面创建一个shell脚本,调用eval_ssd_network.py使用刚刚生成好的tfrecords来测试checkpoint的准确率
#!/bin/bash# This is the eval script.-
DATASET_DIR=/home/wu/voc2007_test_tfrecords/EVAL_DIR=/home/wu/ssd_eval_log/ # Directory where the results are saved toCHECKPOINT_PATH=/home/wu/Downloads/SSD-Tensorflow-master/checkpoints/VGG_VOC0712_SSD_300x300_iter_120000.ckpt-
-
python3 ./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=${CHECKPOINT_PATH} \--batch_size=1
DATASET_DIR是刚刚保存tfrecords的路径,EVAL_DIR是自己设置用来保存测试结果的路径(生成结果后,在该路径下运行tensorboard可以查看可视化的结果),CHECKPOINT_PATH是下载的checkpoint的路径(如果未下载可以使用SSD工程本来自带的checkpoint),其他选项保持默认如图,最后运行脚本
windows下不用创建脚本,也可以在相应的路径下打开终端,直接使用命令调用相应得.py文件
训练-training
同上,先将训练集转化成tfrecords,然后打开train_ssd_network.py修改第154行的最大训练步数,将None改为比如50000。(第一次训练时,没发现,用voc2007训练集挂了十几个小时还在训练;查找原因tf.contrib.slim.learning.training函数中max-step为None时训练会无限进行。)
#!/bin/bashDATASET_DIR=./tfrecords ###训练集转化成tfrecords存储的路径TRAIN_DIR=./logs/ ###存储训练结果的路径,包括checkpoint和event,自行指定CHECKPOINT_PATH=./checkpoints/ssd_300_vgg.ckptpython train_ssd_network.py \--train_dir=${TRAIN_DIR} \--dataset_dir=${DATASET_DIR} \--dataset_name=pascalvoc_2012 \ ###具体指定,可选项pascalvoc2007--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 ###GTX1070设置32,python会崩溃,改成16问题不大