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++即可