SSD讲堂二(整体流程)_balancap-ssd-tensorflow_ubuntu环境_手把手教学操作全流程

重要参考 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++即可

猜你喜欢

转载自blog.csdn.net/zjc910997316/article/details/82801564