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
(1) 直接在終端逐行命令輸入。
(2) 寫一個指令碼檔案tf_convert_data.sh,bash執行。
(3) 直接將變數帶入tf_convert_data.py,終端執行Python3 tf_convert_data.py。
此時遇到過的報錯有:
l 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
l AttributeError:dataset_dir(dataset_dir引數沒傳對~很有可能是路徑名稱有錯—注意ubuntu上的一些隱藏路徑,注意檢查每一個字母!)
3. 訓練模型:只說從頭到尾訓練的方式
(1) 要注意儲存日誌和模型的時間間隔。之前由於考慮到自己的資料量很少(一百八十張),我就把引數save_summaries_secs和save_interval_secs改得很小,導致後面迭代到兩萬多次、模型就有七十幾G……還是用別人部落格裡面的60s和600s
(2) 訓練完之後,在TRAIN_DIR路徑下會產生四種檔案,導致後面做模型測試的時候不知是哪個作為CHECKPOINT_PATH,每個嘗試,就報各種奇怪的錯誤。其實應該是將訓練得到的整個資料夾作為自己訓練得到的模型作為CHECKPOINT_PATH輸入。