將dataset convert to tfrecords時遇到的問題:
1. 在SSD的工程下面創建一個shell腳本tf_convert_data.sh,調用tf_convert_data.py將test set轉化成tfrecords:這裏直接運行會碰到無法讀取圖片,UTF-8無法decode的Erro,解決辦法是打開SSD工程—>datasets—>pascalvoc_to_tfrecords.py,然後更改文件的83行(具體行數因人而異)讀取方式爲’rb’
filename = directory + DIRECTORY_IMAGES + name + '.jpg'
image_data = tf.gfile.FastGFile(filename, 'rb').read()
2. 腳本tf_convert_data.sh中outdir的文件夾(voc2007_tfrecords)需要事先建立,否則報錯:
tensorflow.python.framework.errors_impl.NotFoundError: /data2/dingmengyuan/voc2007_tfrecords/voc_2007_tfrecords_000.tfrecord; No such file or directory
3. 運行腳本時又報錯:
eval_net_network.sh: line 9: --dataset_name=pascalvoc_2007: command not found
eval_net_network.sh: line 10: --dataset_split_name=test: command not found
eval_net_network.sh: line 11: --model_name=ssd_300_vgg: command not found
原因:我用的是 windows 系統,然後將代碼上傳到服務器的 ubuntu 系統上執行。
windows 的默認換行是\n\r,而 linux 的換行是\n。linux 命令的續行符號\後面是不允許添加除換行以外符號的,空格都不允許。
所以上面的報錯主要原因是換行符號。解決方法如下:
sed -i 's/\r$//g' [腳本文件名稱]
使用 sed 流編輯命令,將 change.sh 每個行末的\r替換成爲空。
參考網址:http://www.cnblogs.com/blog4ljy/p/9320487.html
評估模型 運行eval_ssd_network.sh時
1. 報錯:TypeError: Can not convert a tuple into a Tensor or Operation.
解決方案:
參考網址: https://blog.csdn.net/w5688414/article/details/78529884
https://github.com/balancap/SSD-Tensorflow/issues/154
2. 利用tensorboard將評估結果可視化時,由於我是在服務器上運行,出來的網址粘貼到win下chrome瀏覽器中打不開
查了很久,說需要將服務器上的6006映射到本地(本人也是小白,照做了發現行不通),所以最簡單的方法便是直接在cmd上運行
參考鏈接:https://stackoverflow.com/questions/41523005/how-to-use-tensorboard-in-a-docker-container-on-windows