〇、寫在前面
本應用基於開源UI框架PyDracula進行開發,除去最基本的UI框架外,所有功能的前後端實現都由我個人開發完成,但也有部分UI(如開關控制元件和進度條)是參考其他大佬的分享。
這個應用是我的本科畢業設計,但因為個人能力不足,姑且只能使用Python+PySide6開發。
開發這個應用的啟發是,曾經我作為深度學習的萌新,在初出訓練模型時費了不少力氣去學習,一個人摸索了很長時間,直到現在我可以熟練掌握模型的訓練。回過頭來看我曾經踩過的坑,我把自己在模型訓練過程中經常使用的影像處理指令碼工具整合在了這個應用中,並實現了一站式的模型選擇視覺化訓練。
但我也知道,真正訓練一個好模型遠比這複雜的多,因此本應用可以當作新手朋友們的入門體驗。
希望本應用能對大家有所幫助。
一、應用簡介
本應用主要分為三大功能:
1. 單張圖片預處理
本部分功能主要實現僅對一張圖片的處理,該功能分為預處理工具和影像增強兩部分。
1.1 預處理工具
(1) 更改字尾
在這部分功能中實現了對圖片字尾的修改,可以支援jpg、jpeg、png和bmp四種常見資料集影像格式圖片的字尾更改,使用者透過點選相應的按鈕,執行對應的功能。
-
修改為.jpg字尾功能:
將圖片統一轉為 *.jpg 字尾。支援轉換 *.JPG、*.png、*.PNG、*.jpeg、*.JPEG、*.bmp、*.BMP字尾格式。
-
修改為.jpeg字尾功能:
將圖片轉為 *.jpeg 字尾。支援轉換 *.jpg、*.JPG、*.png、*.PNG、*.JPEG、*.bmp、*.BMP字尾格式。
-
修改為.png字尾功能:
將圖片轉為 *.png 字尾。支援轉換 *.jpg、*.JPG、*.PNG、*.jpeg、*.JPEG、*.bmp、*.BMP字尾格式。
-
修改為.bmp字尾功能:
將圖片轉為 *.bmp 字尾。支援轉換 *.jpg、*.JPG、*.png、*.PNG、*.jpeg、*.JPEG、*.BMP字尾格式。
(2) 更改大小
該部分功能實現了直接將圖片畫素大小進行修改。插值方式說明如下:
插值方式 | 說明 |
---|---|
INTER_LINEAR | 雙線性插值。 |
INTER_NEAREAST | 最鄰近插值。 |
INTER_CUBIC | 三次樣條插值。 |
INTER_AREA | 區域插值。(使用畫素面積關係進行重取樣) |
INTER_LANCZOS4 | 一種Lanczos插值方法(超過8×放大時效果最好)。 |
INTER_LINEAR_EXACT | 位精確雙線性插值。 |
(3) 圖片方形化
該部分功能實現了將不規則矩形圖片統一為方形圖片。
該功能模組所支援的邊框拓充方式有:
- BORDER_CONSTANT:用純色背景(常數)填充,需指定拓充的RGB顏色。
- BORDER_REFLECT:用邊界元素的鏡面反射拓充。
- BORDER_REPLICATE:使用最邊界的畫素值代替。
- BORDER_WRAP:進行上下邊緣調換的外包複製操作。
1.2 影像增強
注意:本部分所有功能可以按順序同時疊加使用。
(1) 影像旋轉
該功能可使影像進行任意角度旋轉,並同時縮放處理。
(2) 水平翻轉
(3) 垂直翻轉
(4) 模糊
該功能可對影像進行模糊處理,支援四種濾波方式:
- 均值濾波
- 方框濾波
- 高斯濾波:濾波核必須為奇數。
- 中值濾波:濾波核必須為大於1的奇數。
(5) 噪聲
該功能可對影像增加噪聲,支援兩種噪聲方式:
- 高斯噪聲
- 椒鹽噪聲
這兩種方式可以單獨使用,也可以同時使用。
(6) 亮度
(7) 對比度
(8) 所有功能同時啟用演示
2. 資料集預處理
本部分功能主要實現對整個資料集圖片的處理,該功能分為預處理工具和影像增強兩部分。
2.1 預處理工具
(1) 統一字尾
該功能和單張圖片預處理的更改字尾功能類似,故不再過多贅述。
(2) 統一命名
在該模組下,使用者可以對資料集進行統一命名,支援的統一命名格式為:
- 分類_i
- 分類i
- 分類-i
(3) 統一大小
該功能和單張圖片預處理的更改大小功能類似,故不再過多贅述。
(4) 圖片方形化
該功能和單張圖片預處理的圖片方形化功能類似,故不再過多贅述。
(5) 資料集分割
該功能用於將整個資料集按照比例分割成訓練集(Train)、驗證集(Val)、測試集(Test)。
2.2 影像增強
該模組的影像增強功能實現了影像旋轉、水平翻轉、垂直翻轉、模糊、噪聲、亮度和對比度的功能,功能的實現同單張影像預處理模組的影像增強功能相似,故不再重複說明。
不同之處在於,由於該模組下的影像增強功能是對整個資料集進行處理,因此該功能引入了機率隨機處理,以及引數在一個區間內隨機取值。
同樣:本部分所有功能可以按順序同時疊加使用。
3. 視覺化訓練器
在該模組中,可以使用預整合在應用內的36神經網路模型進行訓練,包含如下模型:
- AlexNet
- VGG11
- VGG13
- VGG16
- VGG19
- GoogLeNet
- ResNet18
- ResNet34
- RsNet50
- ResNet101
- ResNet152
- ResNeXt50(32×4d)
- ResNeXt101(32×8d)
- MobileNetV2
- MobileNetV3(large)
- MobileNetV3(small)
- ShuffleNetV2(×0.5)
- ShuffleNetV2(×1.0)
- ShuffleNetV2(×1.5)
- ShuffleNetV2(×2.0)
- EfficientNet(B0)
- EfficientNet(B1)
- EfficientNet(B2)
- EfficientNet(B3)
- EfficientNet(B4)
- EfficientNet(B5)
- EfficientNet(B6)
- EfficientNet(B7)
- EfficientNetV2(S)
- EfficientNetV2(M)
- EfficientNetV2(L)
- VisionTransformer(b16)
- VisionTransformer(b32)
- SwinTransformer(t)
- SwinTransformer(s)
- SwinTransformer(b)
可以直接使用以上模型進行訓練,如果不開啟遷移學習則是重新從頭開始訓練自己的資料集,如果需要使用遷移學習,則需要自行下載官方的.pth權重檔案,具體操作事項在後續的說明中陳述。
本功能除了實現訓練過程視覺化,還可以在訓練完成後檢視混淆矩陣,以及log輸出。
注意:本功能暫未實現繼續訓練的功能,因此建議使用者在無法確定何時停止訓練的情況下,將Epoch數值設定到一個較大的值,在透過視覺化確認差不多收斂時點選終止按鈕停止訓練。
3.1 訓練過程視覺化
3.2 混淆矩陣
3.3 log輸出
二、環境要求
本程式在使用時需要安裝以下Python環境:
- pyside6
- pyqt5
- matplotlib
- opencv
- pytorch
三、使用說明
-
本應用的影像處理功能由OpenCV實現,相關引數請參考OpenCV的引數說明。
-
資料集預處理功能中,傳入的資料集資料夾格式必須嚴格按照如下方式:root資料夾/分類1..n資料夾/圖片1..n
-
視覺化訓練器部分中,模型的訓練是基於PyTorch深度學習框架實現的,因此最終訓練後儲存的權重檔案是以.pth字尾結尾的形式,如果需要其它形式,可以自行進行權重檔案格式的轉換。
-
如果需要使用遷移學習,請自行下載官方權重檔案放在 algorithms/trainer/imagenet 目錄下,並將下載後的權重檔案重新命名為“xxx.pth”,且命名必須為如下命名之一:
alexnet.pth、efficientnet_b0.pth、efficientnet_b1.pth、efficientnet_b2.pth、efficientnet_b3.pth、efficientnet_b4.pth、efficientnet_b5.pth、efficientnet_b6.pth、efficientnet_b7.pth、efficientnet_v2_l.pth、efficientnet_v2_m.pth、efficientnet_v2_s.pth、googlenet.pth、mobilenet_v2.pth、mobilenet_v3_large.pth、mobilenet_v3_small.pth、resnet101.pth、resnet152.pth、resnet18.pth、resnet34.pth、resnet50.pth、resnext101_32x8d.pth、resnext50_32x4d.pth、shufflenetv2_x0_5.pth、shufflenetv2_x1_0.pth、shufflenetv2_x1_5.pth、shufflenetv2_x2_0.pth、swin_b.pth、swin_s.pth、swin_t.pth、vgg11.pth、vgg13.pth、vgg16.pth、vgg19.pth、vit_b_16.pth、vit_b_32.pth
四、程式碼獲取
完整應用程式已免費開源在我的GitHub中:https://github.com/CorianderSaint/TrainerGUI。
請需要者在GitHub中點一顆免費的Star⭐,十分感謝!