組員: louis52099, julian135707, wiwi61666166
Only for AI CUP group and private notes
applications
: 包括test.py, train.py, convert.py
等應用,提供給main.py
調用;checkpoints
: 訓練好的模型文件保存目錄;criterions
: 自定義損失函數;data
: 訓練/測試/驗證/預測等數據集存放的路徑;dataloader
: 數據加載、數據增強、數據預處理(默認採用ImageNet方式);demos
: 模型使用的demo,目前classifier.py
顯示如何調用jit
格式模型進行預測;logs
: 訓練過程中TensorBoard日誌存放的文件;models
: 自定義的模型結構;optim
: 一些前沿的優化器,PyTorch官方還未實現;pretrained
: 預訓練模型文件;utils
: 工具腳本:混淆矩陣、圖片數據校驗、模型結構打印、日誌等;config.py
: 配置文件;main.py
: 主運行檔案;requirements.txt
: 環境依賴包列表;
checkpoints
&pretrained
: 目錄內Readme.md
附有載點雲端;
在文件夾data
下放數據,分成三個文件夾: train/test/val
,對應 訓練/測試/驗證 數據文件夾;
每個子文件夾下,依據分類類別每個類別建立一個對應的文件夾,放置該類別的圖片。
數據準備完畢後,使用utils/check_images.py
腳本,檢查圖像數據的有效性,防止在訓練過程中遇到無效圖片中止訓練。
最終大概結構為:
- data
- train
- class_0
- 0.jpg
- 1.jpg
- ...
- class_1
- ...
- ..
- test
- ...
- val
- ...
- dataloader
- ...
針對config.py
裡的部分重要參數說明如下:
--data
: 數據集根目錄,下面包含train
,test
,val
三個目錄的數據集,默認當前文件夾下data/
目錄;--image_size
: 輸入應該為兩個整數值,預訓練模型的輸入時正方形的,也就是[224, 224]之類的; 實際可以根據自己需要更改,數據預處理時,會將圖像 等比例resize然後再padding(默認用0 padding)到 指定的輸入尺寸。--num_classes
: 分類模型的預測類別數;-b
: 設置batch size大小,默認為256,可根據GPU顯存設置;-j
: 設置數據加載的進程數,默認為8,可根據CPU使用量設置;--criterion
: 損失函數,一種使用PyTorch自帶的softmax損失函數,一種使用我自定義的sigmoid損失函數; sigmoid損失函數則是將多分類問題轉化為多標籤二分類問題,同時我增加了幾個如GHM自定義的sigmoid損失函數, 可通過--weighted_loss --ghm_loss --threshold_loss --ohm_loss
指定是否啟動;--lr
: 初始學習率,main.py
裡我默認使用Adam優化器;目前學習率的scheduler我使用的是LambdaLR
接口,自定義函數規則如下, 詳細可參考main.py
的adjust_learning_rate(epoch, args)
函數:
~ warmup: 0.1
~ warmup + int([1.5 * (epochs - warmup)]/4.0): 1,
~ warmup + int([2.5 * (epochs - warmup)]/4.0): 0.1
~ warmup + int([3.5 * (epochs - warmup)]/4.0) 0.01
~ epochs: 0.001
--warmup
: warmup的迭代次數,訓練前warmup個epoch會將 初始學習率*0.1 作為warmup期間的學習率;--epochs
: 訓練的總迭代次數;--aug
: 是否使用數據增強,目前默認使用的是自定義的數據增強方式:dataloader/my_augment.py
;--mixup
: 數據增強mixup,默認 False;--multi_scale
: 多尺度訓練,默認 False;--resume
: 權重文件路徑,模型文件將被加載以進行模型初始化,--jit
和--evaluation
時需要指定;--jit
: 將模型轉為JIT格式,利於部署;--evaluation
: 在測試集上進行模型評估;--knowledge
: 指定數據集,使用教師模型(配合resume選型指定)對該數據集進行預測,獲取概率文件(知識), 生成的概率文件路徑為data/distill.txt
,同時生成原始概率data/label.txt
;--distill
: 模型蒸餾(需要教師模型輸出的概率文件),默認 False, 使用該模式訓練前,需要先啟用--knowledge train --resume teacher.pth
對訓練集進行測試,生成概率文件作為教師模型的概率; 概率文件形式為data
路徑下distill*.txt
模式的文件,有多個文件會都使用,取均值作為教師模型的概率輸出指導接下來訓練的學生模型;--visual_data
: 對指定數據集運行測試,並進行可視化;--visual_method
: 可視化方法,包含cam
,grad-cam
,grad-camm++
三種;--make_curriculum
: 製作課程學習的課程文件;--curriculum_thresholds
: 不同課程中樣本的閾值;--curriculum_weights
: 不同課程中樣本的損失函數權重;--curriculum_learning
: 進行課程學習,從data/curriculum.txt
中讀取樣本權重數據,訓練時給對應樣本的損失函數加權;
參數的詳細說明可查看config.py
文件。
- 資料夾
data
由上述引導放置資料 config.py
由上述引導設定 (重點data、arch、num_classes、train、epochs、warmup、evaluate、resume...)- 運行
main.py
開始訓練
Method1:
- 若
config.py --evaluate
設定為True
則會在訓練完畢後自動檢測 Test 資料夾內圖片 - 生成log檔也可重複觀看結果資料以及準確度
- 生成之
ConfusionMatrix.png
也可以確認測試資料之準確度
Method2:
可以使用 demos
目錄下的 main.py
測試圖片 (未測試)
- 將三者模型測試出的結果
.log
檔運行write_csv.py
將log檔轉換成讀取用的csv- 將各模型分兩類,圖片分類檔 & 純置信度檔 (共六個csv)
- 運行
read_csv.py
讀取csv檔生成最後結果
-
#失敗例子# (efficiennet_b6_10) 資料為訓練資料分割5%
ilaydaDuratnir/python_image_enhancement
zheng-yuwei/PyTorch-Image-Classification
lukemelas/EfficientNet-PyTorch
If you have any question, feel free to contact wiwi61666166@gmail.com