重要参考 https://blog.csdn.net/yexiaogu1104/article/details/77415990
第一部分
一、利用jupyter Notebook可以轻松的运行SSD的一个测试用例
你要做的就是:
1. 下载模型ssd_300_vgg,存放在SSD-Tensorflow-master/checkpoints/这个目录下,解压
2. 打开终端,在主目录下,进入SSD-Tensorflow-master目录,进入 notebooks目录,运行 jupyter-notebook进入http://localhost:8892/tree服务器,打开 ssd_notebook.ipynb.ipynb文件
3. (此步骤其他教程有说,我没有做,用的默认的可以运行)
配置一些路径:第4个cell中from notebooks import visualization改成import notebooks,不改的话目录结构不对,会报错
4.运行到第4个cell报错说找不到 nets 模块,解决办法是在第三个cell里面添加路径,一定是到nets文件夹的上一级目录
/home/hp/zjc/Tensorflow/Deeplearning/SSD-Tensorflow-master/
否则会报错
5.使用自己的图片,改变path = '../demo/'成自己的图片所在路径
6. 从头到尾运行所有cell即可。
第二部分
二、制作数据集
1.VOC2007为例,结构如下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
+VOCtrainval_06-Nov-2007
+VOCdevkit
+VOC2007
+Annotations
+ImageSets
+JPEGImages
+SegmentationClass
+SegmentationObject
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+VOCtest_06-Nov-2007
+VOCdevkit
+VOC2007
+Annotations
+ImageSets
+JPEGImages
+SegmentationClass
+SegmentationObject
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.voc2007的文件要如此放置3个压缩包分别放在三个文件夹(文件夹按要求命名),解压出来
3.为了避免每次在终端敲那么多字母,建议新建一个.sh文件,把以下脚本粘贴进去.
起名为 tf_convert_data.sh
只要在这里更改DATASET_DIR与OUTPUT_DIR路径就可以了
最后在文件所在目录打开终端并输入bash tf_convert_data.sh:
(本教程所建立的所有shell脚本都存放在
/home/.../Tensorflow/Deeplearning/shell这个文件夹下)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#以下是格式说明文件
#filename = tf_convert_data.sh
#!/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 stored
DATASET_DIR=/home/hp/zjc/Tensorflow/Deeplearning/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007/
#Output directory where to store TFRecords files
OUTPUT_DIR=/home/hp/zjc/Tensorflow/Deeplearning/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007_tfrecord/ #一定注意这里的VOC2007_tfrecord文件夹是自己新建的,用于输出tfrecord文件
python ../tf_convert_data.py \ #此处找到tf_convert_data.py 路径即可eg: python /home/hp/zjc/Tensorflow/Deeplearning/SSD-Tensorflow-master/tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=${DATASET_DIR} \
--output_name=voc_2007_train \
--output_dir=${OUTPUT_DIR}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#下面是我自己的.sh文件可以稍微改下路径复制直接用
#filename = tf_convert_data.sh
#!/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 stored
DATASET_DIR=/home/hp/zjc/Tensorflow/Deeplearning/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007/
#Output directory where to store TFRecords files
OUTPUT_DIR=/home/hp/zjc/Tensorflow/Deeplearning/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007_tfrecord/
python /home/hp/zjc/Tensorflow/Deeplearning/SSD-Tensorflow-master/tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=${DATASET_DIR} \
--output_name=voc_2007_train \
--output_dir=${OUTPUT_DIR}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如图
4.运行指令,终端里面bash tf_convert_data.sh即可
(VOC2007_tfrecord文件夹是自己新建的,用于输出tfrecord文件运行结果如下)
运行结果如下:
(有的博主说官方的小DEMO有问题,原话如下:demo中的sess = tf.Session()这条语句连续第二次运行的时候,一切又回复正常,wtf!!!
我:同样遇到,但是一会又好了,而且检测同样一张图片随缘成功)
第三部分
三、验证
1.下载好三个checkpoint:SSD-300 VGG-based, SSD-300 VGG-based, SSD-512 VGG-based,(需要翻,否则点了也加载不出来,具体请私信我,教你修改HOSTS)
为了 reproduce evaluation metrics on the recall-precision curve && compute mAP metrics following the Pascal VOC 2007 and 2012 guidelines. 跟制作数据集的shell 脚本一样,可以在tf_convert_data.sh脚本所在目录”/shell”,新建脚本并将如下代码粘贴进去,运行bash eval_ssd_network.sh
执行:
2.直接执行会报错
TypeError: Can not convert a tuple into a Tensor or Operation.
解决办法如下:参照此网址
https://www.cnblogs.com/xlqtlhx/p/7866791.html
第一部分粘贴进去
第二,三部分看好位置调用flatten函数
一部分
def flatten(x):
result = []
for el in x:
if isinstance(el, tuple):
result.extend(flatten(el))
else:
result.append(el)
return result
二,三部分
# Waiting loop.
slim.evaluation.evaluation_loop(
master=FLAGS.master,
checkpoint_dir=checkpoint_path,
logdir=FLAGS.eval_dir,
num_evals=num_batches,
eval_op=flatten(list(names_to_updates.values())), #这里调用flatten
variables_to_restore=variables_to_restore,
eval_interval_secs=60,
max_number_of_evaluations=np.inf,
session_config=config,
timeout=None)
# Standard evaluation loop.
start = time.time()
slim.evaluation.evaluate_once(
master=FLAGS.master,
checkpoint_path=checkpoint_path,
logdir=FLAGS.eval_dir,
num_evals=num_batches,
eval_op=flatten(list(names_to_updates.values())), #这里也调用flatten
variables_to_restore=variables_to_restore,
session_config=config)
(
报错:
tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
解决方法:
此链接https://blog.csdn.net/pursuit_zhangyu/article/details/80582544
gnome-system-monitor
gnome-system-monitor关掉要关的
)
不过我是直接重启,暴力解决
3.tensorboard显示
(需要在google chrome浏览器登录,下载安装方法参考https://blog.csdn.net/zjc910997316/article/details/82844908)
在../log_files/log_eval/
下生成三个文件:
events.out.tfevents.1498225326.doctorimagePC
,
events.out.tfevents.1498225563.doctorimagePC
,
training_config.txt
下图是别人跑出来的结果
在目录 /.../SSD-Tensorflow-master/log_files
下运行tensorboard --logdir=log_eval
在chrome浏览器中输入++http://localhost:6006++即可