基於Keras搭建的SSD300目標檢測神經網絡
先看看效果(圖片來源:視覺中國 www.vcg.com,這裏只做演示使用,我也不獲利,請視覺中國不要告我,實在不讓我用就聯繫我刪了吧,感恩)
1. 運行需要的模塊
代碼運行需要部分必須的Python模塊包括:(部分依賴模塊未列出)
- Keras >= 2.0.0
- TensorFlow >= 1.7.0
- Tensorboard >= 1.7.0
- numpy >= 1.9.0
- opencv >= 3.3.1
2. 測試代碼運行情況
下載好的代碼及權值文件(源代碼及權值文件免費下載見文章尾)
最終你的項目文件夾應該是這樣的
將下載好的權值文件放在 SSD300_Train/weights 文件夾中
運行 SSD_test.py 即可得到上圖的效果 ~ ~
如果沒報錯就說明的Python環境配置正確了,恭喜進入下一階段
3. SSD_test.py 講解
項目自帶的權值文件是以VOC數據集訓練的,能夠檢測20種目標。詳細內部實現不作詳細講解,主要介紹下面的主要部分。
4. 訓練自己的數據集
4.1 創建自己的數據集
代碼的數據集使用的VOC的數據格式(不知道的請自行百度一下,這裏不細說),使用ImgLabel軟件標註,軟件下載可以去GitHub搜索imglabel源代碼copy下來,使用方法請自行百度。文章尾部也給出了已經編譯好了的exe版本下載地址(免費),嫌麻煩的也可以直接下載我上傳到CSDN上的版本
重點!!!!!!
- 在進行標計前建議將拍攝的原始圖像進行一定的縮放,保證圖片的大小在200k左右,要不訓練超級慢。
- 標記前請一定先確定好自己數據集存放的位置,一旦確定就不要變了,要不會很麻煩。
具體原因:代碼中圖片的具體讀取是通過 讀取標記文件(.xml)中的圖片路徑來讀取圖片的(如下圖中紅線的部分),如果數據集位置變了但文件中有沒改這裏,就會讀取不到圖片。
使用我上傳到CSDN上的imglabel軟件標註的同學可能會注意到路徑中缺少文件後綴,請不要擔心,繼續往下看。
- 標註時同一類目標的名稱一定要完全一樣(包括大小寫),要不就不是同一類了不是?
- 標註完畢後在數據集文件夾中創建一個name.txt,將數據集中的類別名稱填入文件中,每個類名一行(例如下圖),一定要和數據集中的類名完全一樣。
5. 開始訓練
訓練包括兩部,第一步生成標記數據文件(文件夾中的my_new_data.pkl);第二步配置訓練參數開始訓練。
5.1 生成標記數據文件
注意:每次更改訓練集內的圖片都應該重新生成標記數據文件!!!!
生成標記數據文件主要用到 TransData.py
使用時主要修改main函數
4.1中提到的.xml文件中的圖片路徑中缺少文件後綴同學請執行下一步,如果沒有出現文件後綴丟失,請忽略。
沒有後綴的在這裏添加上後綴(包括後綴中的點), 如果數據集中的圖片後綴不統一的話還是寫個腳本將.xml文件中的後綴添加上,有需要的同學請評論聯繫我。
生成成功後應該會有一個.pkl文件產生(或者更新覆蓋原來的)。
5.2 配置訓練參數開始訓練
主要修改TrainSSD.py文件
修改參數主要包括以下幾個:
-
設置訓練集的比例
此處設置訓練集的個數佔總的數據集的0.8,剩下的0.2爲測試集 -
設置訓練的batch_size
此處設置batch_size爲每個batch 16張 -
設置凍結層
這裏涉及到遷移學習的一點概念思想,感興趣的同學建議自己查查。這裏我們將產生特徵層的網絡部分凍結起來,只訓練類別預測和位置迴歸的部分,這樣即使訓練集很小也可以獲得不錯的訓練效果。當然如果你的訓練集比較大還是重頭訓練的好。
-
設置基礎學習率
訓練時學習率採用指數下降方式,每訓練一個epoch,梯度都會改變,這裏設置的是基礎學習率
-
設置訓練回合數
這裏設置訓練100回合
5.3 開始訓練
按實際情況更改下列變量的值
修改完成後,開始訓練,每訓練一個回合後,權值文件會自動保存,同時代碼中設置了Tensorboard的回調函數,可以調用tensorboard可視化訓練信息。
調用tensorboard
打開cmd cd 到項目文件夾中 輸入 tensorboard --logdir logs
將返回的連接複製到瀏覽器中打開即可
下載源代碼
爲了保障所有人能免費下載到源代碼,同時推廣一下自己建立的公衆號(主要分享一些教程),請掃描下方二維碼關注公衆號回覆相應的關鍵字獲取下載鏈接
-
源代碼及權值下載地址:回覆“SSD訓練”。
-
imglabel標註工具下載地址:回覆“標註工具”
-
有需要rely源碼的直接回復“rely下載”,就不一一發郵箱了。