目錄
基于Ubuntu22.04系統PaddleX和PaddleClas訓練推理MMAFEDB人臉表情識別數據集(詳細教程)
超實用的Paddle圖像分類訓練推理教程,助力深度學習研究!
1、環境準備(重要???)
構建虛擬環境
安裝PaddlePaddle
安裝PaddleX
安裝PaddleClas插件
2、數據準備(重要???)
2.1 數據下載及制作
2.2 數據校驗
3、開始訓練(重要???)
訓練啟動參數詳細說明
4、開始評估(重要???)
5、開始推理(重要???)
6、參考資源鏈接
7、交流學習
基于Ubuntu22.04系統PaddleX和PaddleClas訓練推理MMAFEDB人臉表情識別數據集(詳細教程)
超實用的Paddle圖像分類訓練推理教程,助力深度學習研究!
測試環境:
Ubuntu?22.04.4?LTS
cuda_11.8
Tesla?P4顯卡
磁盤空間500G
項目源碼最終目錄結構預覽
1、環境準備(重要???)
構建虛擬環境
#?創建環境
conda?create?-n?paddleclas?python=3.10
#?激活環境進入
conda?activate?paddleclas
安裝PaddlePaddle
參考地址:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html
#?安裝指令
python?-m?pip?install?paddlepaddle-gpu==3.1.1?-i?https://www.paddlepaddle.org.cn/packages/stable/cu118/
#?驗證paddlepaddle是否可用GPU
python?-c?"import?paddle;print(paddle.utils.run_check());print(paddle.__version__)"
#?輸出如下信息,則安裝成功,paddlepaddle-gpu可使用
'''
Running?verify?PaddlePaddle?program?...?
I0821?11:21:45.437101??7032?pir_interpreter.cc:1524]?New?Executor?is?Running?...
W0821?11:21:45.437536??7032?gpu_resources.cc:114]?Please?NOTE:?device:?0,?GPU?Compute?Capability:?6.1,?Driver?API?Version:?12.4,?Runtime?API?Version:?11.8
I0821?11:21:45.686959??7032?pir_interpreter.cc:1547]?pir?interpreter?is?running?by?multi-thread?mode?...
PaddlePaddle?works?well?on?1?GPU.
PaddlePaddle?is?installed?successfully!?Let's?start?deep?learning?with?PaddlePaddle?now.
None
'''
安裝PaddleX
參考地址:https://paddlepaddle.github.io/PaddleX/latest/installation/installation.html
pip?install?paddlex==3.1.1?-i?https://pypi.tuna.tsinghua.edu.cn/simple
#?額外依賴包
pip?install?pypdfium2?-i?https://pypi.tuna.tsinghua.edu.cn/simple
安裝PaddleClas插件
參考地址:https://paddlepaddle.github.io/PaddleX/latest/installation/installation.html
#?獲取源碼倉庫(訓練使用,與上述的推理庫不沖突)
git?clone?-b?release/3.1?https://github.com/PaddlePaddle/PaddleX.git?
cd?PaddleX
#?源碼編譯
pip?install?-e?.
#?安裝插件
paddlex?--install?PaddleClas
#?輸出如下信息,則安裝成功,paddleclas可使用
'''
......
Successfully?built?paddleclas
Installing?collected?packages:?paddleclas
Successfully?installed?paddleclas-2.6.0
All?packages?are?installed.
'''
2、數據準備(重要???)
2.1 數據下載及制作
官方kaggle數據下載
可參考:https://www.kaggle.com/datasets/mahmoudima/mma-facial-expression
#?可參考下載方式
curl?-L?-o?./mma-facial-expression.zip\https://www.kaggle.com/api/v1/datasets/download/mahmoudima/mma-facial-expression
制作paddle格式數據(放于PaddleX源碼目錄下)
目錄結構
為:
datasets/
└──?mmafedb/├──?images/├──?label.txt├──?train.txt└──?val.txt
label.txt文件
內容如下(7個類別)
0?angry
1?disgust
2?fear
3?happy
4?neutral
5?sad
6?surprise
train.txt文件
內容如下(92968條數據)
images/train_angry_10012Exp0fighting_people_350.jpg?0
images/train_angry_10018Exp0fighting_people_429.jpg?0
images/train_angry_10025Exp0fighting_people_5.jpg?0
images/train_angry_10037Exp0fighting_people_573.jpg?0
......
val.txt文件
內容如下(17356條數據)
......
images/val_surprise_Surprise.32265.jpg?6
images/val_surprise_Surprise.32266.jpg?6
images/val_surprise_Surprise.32283.jpg?6
images/val_surprise_Surprise.32284.jpg?6
images/目錄
中存放所有的圖片,統計如下
JPG圖像總數:?110324去重后的分辨率統計:
分辨率?(寬×高)??出現次數
---------------------------
48×48???????????110324共有?1?種不同的分辨率
PS: test.txt暫時不使用
文末回復對應關鍵詞,可獲取制作好的paddle格式訓練數據集
2.2 數據校驗
在源碼PaddleX目錄下操作
新建shell執行腳本check_data.sh
,內容如下
python?main.py?-c?paddlex/configs/modules/image_classification/PP-LCNet_x1_0.yaml?\-o?Global.mode=check_dataset?\-o?Global.dataset_dir=./datasets/mmafedb
執行校驗腳本,輸出成功信息
#?命令行運行
bash?check_data.sh
#?輸出如下信息,則校驗成功,結果內容可見./output目錄
'''
Connecting?to?https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/fonts/PingFang-SC-Regular.ttf?...
Downloading?PingFang-SC-Regular.ttf?...
[==================================================]?100.00%
Check?dataset?passed?!
'''
數據分布直方圖,見histogram.png
3、開始訓練(重要???)
在源碼PaddleX目錄下操作
新建shell執行腳本run_train.sh
,內容如下
python?main.py?-c?paddlex/configs/modules/image_classification/PP-LCNet_x1_0.yaml??\-o?Global.mode=train?\-o?Global.dataset_dir=./datasets/mmafedb?\-o?Global.device=gpu:0?\-o?Train.num_classes=7?\-o?Train.epochs_iters=300?\-o?Train.batch_size=128?\-o?Train.pretrain_weight_path=./pretrain_weight/PP-LCNet_x1_0_pretrained.pdparams?\-o?Train.log_interval=20?\-o?Train.eval_interval=100?\-o?Train.save_interval=100
訓練啟動參數詳細說明
參數名 | 數據類型 | 描述 | 示例值 |
---|---|---|---|
mode | str | 指定模式check_dataset/train/evaluate/export/predict | train |
dataset_dir | str | 數據集路徑 | ./datasets/mmafedb |
device | str | 指定使用的設備 | gpu:0 |
num_classes | int | 數據集中的類別數 | 7 |
epochs_iters | int | 模型對訓練數據的重復學習次數 | 300 |
batch_size | int | 訓練批大小 | 128 |
pretrain_weight_path | str | 預訓練權重路徑 | ./pretrain_weight/PP-LCNet_x1_0_pretrained.pdparams |
log_interval | int | 訓練日志打印間隔 | yaml文件中指定的訓練日志打印間隔 |
eval_interval | int | 模型評估間隔 | yaml文件中指定的模型評估間隔 |
save_interval | int | 模型保存間隔 | yaml文件中指定的模型保存間隔 |
執行訓練腳本,結果存儲于./output目錄
#?命令行運行
bash?run_train.sh
訓練結束后進入./output目錄下操作
可視化指標輸出,使用visualdl指令
#?命令行運行
visualdl?--logdir?./?--port?8080
###?然后本地瀏覽器輸入地址:http://localhost:8080/,即可訪問
樣例圖如下,見指標趨勢圖.png
4、開始評估(重要???)
在源碼PaddleX目錄下操作
新建shell執行腳本run_eval.sh
,內容如下
python?main.py?-c?paddlex/configs/modules/image_classification/PP-LCNet_x1_0.yaml??\-o?Global.mode=evaluate?\-o?Global.dataset_dir=./datasets/mmafedb?\-o?Evaluate.weight_path=./output/best_model/best_model.pdparams?\-o?Evaluate.log_interval=10
PS:在模型評估時,需要指定模型權重文件路徑。
在完成模型評估后,(./output目錄
)會產出evaluate_result.json,其記錄了
評估的結果,具體來說,記錄了評估任務是否正常完成,以及模型的評估指標,包含 val.top1、val.top5,如下內容
{"done_flag":?true,"metrics":?{"val.top1":?0.57093,"val.top5":?0.927}
}
5、開始推理(重要???)
在源碼PaddleX目錄下操作
新建shell執行腳本run_predict.sh
,內容如下
python?main.py?-c?paddlex/configs/modules/image_classification/PP-LCNet_x1_0.yaml?\-o?Global.mode=predict?\-o?Predict.model_dir="./output/best_model/inference"?\-o?Predict.input="./test_imgs/test_001.png"
PS:在模型推理時,需要指定模型權重文件夾路徑,包含推理模式下的模型*.pdiparams。
在完成推理預測后,(./output目錄
)會產出test_001_res.json,其記錄了
預測的結果,具體來說,記錄了預測任務是否正常完成,以及類別得分等,識別結果圖如下所示
(額外)模型集成推理
新建代碼文件fast_predict.py
,內容如下
from?paddlex?import?create_modelmodel_dir?=?"./output/best_model/inference"model?=?create_model(model_name="PP-LCNet_x1_0",?model_dir=model_dir)output?=?model.predict("./test_imgs",?batch_size=1)
for?res?in?output:res.print(json_format=False)res.save_to_img("./fast_preict_output/")res.save_to_json("./fast_preict_output/res.json")
結果圖像保存至./fast_preict_output目錄
中
6、參考資源鏈接
- ? https://paddlepaddle.github.io/PaddleX/latest/module_usage/tutorials/cv_modules/image_classification.html
- ? https://paddlepaddle.github.io/PaddleX/latest/module_usage/instructions/config_parameters_common.html
7、交流學習
進一步交流學習,促進你我共同進步,可在下方回復聯系!祝您前程似錦!
公眾號:深瞳智檢