背景
項目上需要做一個圖像分類的工程。本人希望這么一個工程可以幫助學習ai的新同學快速把代碼跑起來,快速將自己的數據集投入到實戰中!
代碼倉庫地址:imageClassifier: 圖片分類器
代碼切到master分支,master分支是本地訓練圖像分類的一鍵式解決方案,不需要寫任何代碼就可以實現任意圖像多類別分類。?
數據處理
?自己準備的分類圖像,按照文件夾分類,放在dataset目錄下。
運行一下data_partitioning的方法,會自動按照比例將數據劃分為訓練集和測試集。存放在data目錄下。
執行完之后可以看到data文件夾下出現了train文件夾和test文件夾,這兩個文件夾下按照分類也做了數據劃分。
模型訓練
在train_model.py里面首先是超參數設置。這里面的數值都有默認值,根據數據集不同,經常修改的值通常是批次大小和輪數。
舉例:如果需要將訓練輪次設置為50輪,批次大小設置為64的話,只需要按照下圖所示,在ide的運行配置里加上即可。注意,不同的配置字段之間用空格隔開。
關于輪次大小和批次大小的設置,這里建議:
- 第一次訓練時可以將輪次調整為一個較大的值,數據量越大建議輪數越高。由于代碼里存在早停機制,所以即使輪數大到過于夸張,在訓練后期由于準確率提升不明顯,訓練流程會自動停止。
- 第一次訓練可以將批次大小調整為一個較小的值。由于訓練期間同一批次的數據會一起放入顯存中,所以批次過大容易出現爆顯存的現象。當訓練期間發現顯存沒有被占滿時,可以提高批次大小,提升訓練速度。
執行以上方法就可以開始訓練了。圖像分類的類別通過文件夾數量獲取即可,不需要人為設置。
訓練后參數文件會保存在dict文件夾下面。
模型測試
?在訓練完成后,到model_test.py文件里運行代碼即可,會把在測試集中的數據完整驗證一遍,計算出準確率,并打印出每條數據的預測值與真實值。
模型推理
推理過程我們要做的是,導入一張圖片,經過模型運算得出其分類類型。在model_inference.py里面,我們需要指定一張用來推理的圖片。圖片的路徑放在inference目錄下,圖片名稱可以改成真實的圖片名稱。
運行model_inference.py的方法,即加載模型->加載圖片->模型推理->得出預測值。?
示例
在master分支上是一個貓狗分類的項目。其中dog文件夾里有4999張狗的圖片,cat文件夾里有4990張貓的圖片。
下圖為訓練100輪次的loss變化與準確率變化。由于訓練階段中也會切分訓練-驗證數據集,所以通常是通過val-acc來觀察實際的準確率,可以看到最后準確率約達到90%。
運行模型測試代碼,得出準確率為93.8%。?
?在inference文件夾里放入一個貓/狗圖片,注意這張圖片不要來自于訓練數據。
運行推理程序,得出分類類型為cat。?