1. 程式人生 > >SSD-Tensorflow測試及訓練自己的資料錯誤錦集

SSD-Tensorflow測試及訓練自己的資料錯誤錦集

深度學習小白一枚~入門初級,開始跑些實驗,一路遇到很多很多問題,在此僅記錄其中一部分,謝謝~

環境:

Ubuntu16.04+CUDA8.0+Cudnn8.0v6.0+python3.5+tensorflow1.4

一、    SSD測試

1.  下載SSD-Tensorflow原始碼,下載模型ssd_300_vgg,存放在SSD-Tensorflow-master/checkpoints/目錄下;

2.  在主目錄SSD-Tensorflow-master 開啟終端,執行jupyter notebooknotebooks/ssd_notebook.ipynb,報錯:

[C10:29:04.586 NotebookApp] Running as root is not recommended. Use --allow-rootto bypass.

解決方法:由於是根使用者,需加--allow-root,即執行:jupyter notebooknotebooks/ssd_notebook.ipynb --allow-root

3.    進入伺服器開啟ssd_notebook.ipynb.ipynb檔案後,配置一些路徑:第4個cell中from notebooks importvisualization改成import notebooks。

4.  使用自己的圖片,改變path = '../demo/'成自己的圖片所在路徑。最後從頭到尾執行所有cell

5.  一般執行到第六個cell報錯,錯誤型別如果是沒找到ssd_300_vgg.ckpt檔案,是因為之前下載的ssd_300_vgg模型沒有解壓,就去相應資料夾將壓縮包解壓即可。若是報錯沒有matplotlib

等依賴包,則終端命令安裝即可。

6.  然後,如果是用網上部落格教程中的.py檔案進行測試,執行python ssd_Python.py可能會報錯類:NameError:name 'true'/'null' is not define。原因是python裡面沒有true/false/null,其對應的是True/False/None。用vi開啟ssd_Python.py後逐一修改,儲存退出,再執行即可。

二、    用自己的資料訓練SSD模型

1.  按照自己的資料和目標類別修改原始碼

2.  將自己的資料轉換為tfrecord格式,轉換之前要先到datasets—>pascalvoc_to_tfrecords.py修改第82行的原始資料格式(ubuntu要區分.jpg還是.JPG——因為我的資料字尾是.JPG,而之前用在faster rcnn的時候caffe沒有區分大小寫,所以一直沒注意這個問題,然後這個就坑了我好幾天……)——不然會報錯說tensorflow.python.framework.errors_impl.NotFoundError

,找不到你JPEGImages裡的資料;修改第83行的“.r”為“.rb”——不然報錯:UnicodeDecodeError: 'utf-8' codec can't decodebyte 0xff in position 0: invalid start byte。然後格式轉換有三種方式:

(1)  直接在終端逐行命令輸入。

(2)  寫一個指令碼檔案tf_convert_data.sh,bash執行。

(3)  直接將變數帶入tf_convert_data.py,終端執行Python3 tf_convert_data.py。

此時遇到過的報錯有:

ImportError:libcublas.so.9.0: cannot open shared object file: No such file or directory

Failedto load the native TensorFlow runtime.

如果出現這個問題,就說明之前安裝的tensorflow-gpu版本是預設的1.5或1.6版本,1.5版本要求cuda9.0,而我安裝的cuda是8.0. 解決方法是回滾:pip3 install tensorflow-gpu==1.4

AttributeError:dataset_dir(dataset_dir引數沒傳對~很有可能是路徑名稱有錯—注意ubuntu上的一些隱藏路徑,注意檢查每一個字母!)

3.  訓練模型:只說從頭到尾訓練的方式

(1)   要注意儲存日誌和模型的時間間隔。之前由於考慮到自己的資料量很少(一百八十張),我就把引數save_summaries_secs和save_interval_secs改得很小,導致後面迭代到兩萬多次、模型就有七十幾G……還是用別人部落格裡面的60s和600s

(2)   訓練完之後,在TRAIN_DIR路徑下會產生四種檔案,導致後面做模型測試的時候不知是哪個作為CHECKPOINT_PATH,每個嘗試,就報各種奇怪的錯誤。其實應該是將訓練得到的整個資料夾作為自己訓練得到的模型作為CHECKPOINT_PATH輸入。