环境:
Ubuntu16.04+CUDA8.0+Cudnn8.0v6.0+python3.5+tensorflow1.4
测试官方的模型:
1. 下载SSD-Tensorflow源码,下载模型ssd_300_vgg,(其实源码里有带的)存放在SSD-Tensorflow-master/checkpoints/目录下,并解压。
2. 在目录 ../SSD-Tensorflow-master/notebooks/ 下打开终端,运行jupyter notebook , 然后会进入服务器,打开ssd_notebook.ipynb,修改第6个cell的ckpt_filename = '../checkpoints/ssd_300_vgg.ckpt'--此处写自己想测试的模型路径及名字;修改第8个cell,path = '../demo/'--此处改成自己测试图片的文件夹路径,下面的[ ]中写测试的那张图片在文件夹中下标。点上面的 run 运行每一个小cell,到第8个就能看到结果了。如下图(1 2 3)
图(1)
图(2)
图(3)
有可能的错误:有可能报错缺少 matplotlib 等依赖包,sudo pip install matplotlib安装即可。运行到第四个cell有可能报错,把from notebooks import visualization 改成 importnotebooks 就好。
3. 数据集格式转换:
自己做成 voc 数据集格式。

转换tfrecords格式数据集时好像只用到标注信息 Annotations 和图片 imageSets,并不需要其它的东西,test中同样也只有这两个文件,生成测试数据集时用。
voc 格式的数据集做好以后,需要把数据集转换成tfrecords格式的能被 tensorflow 识别的类型,然后就需要修改一下源码,datasets \ pascalvoc_common.py,把它原有的20类修改成自
己数据集里的类别就好啦。如下图所示:

然后还需要修改 datasets \ pascalvoc_to_tfrecords.py 中的
image_data = tf.gfile.FastGFile(filename, 'r').read() ‘r’ 改成 ‘rb’ 不然会报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
image_data = tf.gfile.FastGFile(filename, 'r').read() ‘r’ 改成 ‘rb’ 不然会报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
然后在../SSD-Tensorflow-master目录下运行
DATASET_DIR=./VOC2007/
OUTPUT_DIR=./tfrecords/
python tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=${DATASET_DIR} \
--output_name=voc_2007_train \
--output_dir=${OUTPUT_DIR}
提前建文件夹
/tfrecords ,转换成的
训练数据就生成在里面了。
DATASET_DIR=./VOC2007/test/
OUTPUT_DIR=./tfrecords/
python tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=${DATASET_DIR} \
--output_name=voc_2007_test \
--output_dir=${OUTPUT_DIR}
生成
测试数据,注意这两个命令的两处不同哦。。。(第一行和倒数第二行)
4.
训练自己的数据集:
训练中不收敛,等有好的结果再过来写吧。。。
