小熊飛槳練習冊-07PaddleX尋找火箭車車
簡介
小熊飛槳練習冊-07PaddleX尋找火箭車車,是學習目標檢測小專案,本專案開發和測試均在 Ubuntu 20.04 系統下進行。
專案最新程式碼檢視主頁:小熊飛槳練習冊
百度飛槳 AI Studio 主頁:小熊飛槳練習冊-07PaddleX尋找火箭車車
Ubuntu 系統安裝 CUDA 參考:Ubuntu 百度飛槳和 CUDA 的安裝
- FC遊戲火箭車,遊戲演示
檔案說明
檔案 | 說明 |
---|---|
det-train.py | 訓練程式 |
det-prune.py | 裁剪程式 |
det-quant.py | 量化程式 |
onekey.sh | 一鍵獲取資料到 dataset 目錄下 |
onetasks.sh | 一鍵訓練,量化指令碼 |
get-data.sh | 獲取資料到 dataset 目錄下 |
check-data.sh | 檢查 dataset 目錄下的資料是否存在 |
mod/args.py | 命令列引數解析 |
mod/pdxconfig.py | PaddleX 配置 |
mod/config.py | 配置 |
mod/utils.py | 雜項 |
mod/report.py | 結果報表 |
dataset | 資料集目錄 |
doc | 文件目錄 |
output | 訓練引數儲存目錄 |
result | 預測結果儲存目錄 |
環境依賴
資料集
資料集來源於自己收集標註的百度飛槳公共資料集:尋找火箭車車
資料集包含訓練集,驗證集,測試集,相應的 VOC 格式標註檔案。
如何自己標註資料
-
使用標註工具:labelImg
-
中文介面,支援 VOC 格式,COCO 格式
-
開啟影像目錄
-
W 是標註
-
D 是下一張
-
A 是上一張
-
labelImg 演示
一鍵獲取資料
- 執行指令碼,包含以下步驟:獲取資料,生成影像路徑和標籤的文字檔案,檢查資料。
- 詳情檢視 onekey.sh
如果執行在本地計算機,下載完資料,檔案放到 dataset 目錄下,在專案目錄下執行下面指令碼。
如果執行在百度 AI Studio 環境,檢視 data 目錄是否有資料,在專案目錄下執行下面指令碼。
bash onekey.sh
配置模組
可以檢視修改 mod/pdxconfig.py 檔案,有詳細的說明
開始訓練
執行 det-train.py 檔案,檢視命令列引數加 -h
- 示例
python3 det-train.py \
--dataset ./dataset/road_fighter_car \
--epochs 32 \
--batch_size 1 \
--learning_rate 0.01 \
--model PicoDet \
--backbone MobileNetV3 \
--save_interval_epochs 4 \
--pretrain_weights "" \
--save_dir ./output
- 引數
-h, --help show this help message and exit
--cpu 是否使用 cpu 計算,預設使用 CUDA
--num_workers 執行緒數量,預設 auto,為CPU核數的一半
--epochs 訓練幾輪,預設 4 輪
--batch_size 一批次數量,預設 16
--learning_rate 學習率,預設 0.025
--warmup_steps 預設優化器的warmup步數,學習率將在設定的步數內,從warmup_start_lr線性增長至設定的learning_rate
,預設為0。
--warmup_start_lr 預設優化器的warmup起始學習率,預設為0.0。
--lr_decay_epochs 預設優化器的學習率衰減輪數。預設為 30 60 90
--lr_decay_gamma 預設優化器的學習率衰減率。預設為0.1
--save_interval_epochs
模型儲存間隔(單位: 迭代輪數)。預設為1
--save_dir 模型儲存路徑。預設為 ./output/
--dataset 資料集目錄,預設 ./dataset/
--resume_checkpoint 恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
--train_list 訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
--eval_list 評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
--label_list 分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
--pretrain_weights 若指定為'.pdparams'檔案時,從檔案載入模型權重;若為字串’IMAGENET’,則自動下載在ImageNet圖片資料上
預訓練的模型權重;若為字串’COCO’,則自動下載在COCO資料集上預訓練的模型權重;若為None,則不使用預訓練模型。預設為
'IMAGENET'。
--model PaddleX 模型名稱
--model_list 輸出 PaddleX 模型名稱,預設不輸出,選擇後只輸出資訊,不會開啟訓練
--backbone 目標檢測模型的 backbone 網路
檢視支援的模型
- 執行命令
python3 det-train.py --model_list
- 結果
PaddleX 目標檢測模型
['PPYOLOv2', 'PPYOLO', 'PPYOLOTiny', 'PicoDet', 'YOLOv3', 'FasterRCNN']
PPYOLOv2 backbone 網路
['ResNet50_vd_dcn', 'ResNet101_vd_dcn']
PPYOLO backbone 網路
['ResNet50_vd_dcn', 'ResNet18_vd', 'MobileNetV3_large', 'MobileNetV3_small']
PPYOLOTiny backbone 網路
['MobileNetV3']
PicoDet backbone 網路
['ESNet_s', 'ESNet_m', 'ESNet_l', 'LCNet', 'MobileNetV3', 'ResNet18_vd']
YOLOv3 backbone 網路
['MobileNetV1', 'MobileNetV1_ssld', 'MobileNetV3', 'MobileNetV3_ssld', 'DarkNet53', 'ResNet50_vd_dcn', 'ResNet34']
FasterRCNN backbone 網路
['ResNet50', 'ResNet50_vd', 'ResNet50_vd_ssld', 'ResNet34', 'ResNet34_vd', 'ResNet101', 'ResNet101_vd', 'HRNet_W18']
模型裁剪
- 執行 det-prune.py 檔案,檢視命令列引數加 -h。
- 注意:有的模型不支援裁剪,比如 PicoDet。
- 引數 --pretrain_weights 必須為空 "",裁剪後的精度大部分會降低。
- 參考文件:模型裁剪
- 示例
python3 det-prune.py \
--dataset ./dataset/road_fighter_car \
--epochs 32 \
--batch_size 1 --learning_rate 0.001 \
--save_interval_epochs 4 \
--model_dir ./output/best_model \
--save_dir ./output/prune \
--pruned_flops 0.2 \
--pretrain_weights ""
- 引數
-h, --help show this help message and exit
--cpu 是否使用 cpu 計算,預設使用 CUDA
--num_workers 執行緒數量,預設 auto,為CPU核數的一半
--epochs 訓練幾輪,預設 4 輪
--batch_size 一批次數量,預設 16
--learning_rate 學習率,預設 0.025
--warmup_steps 預設優化器的warmup步數,學習率將在設定的步數內,從warmup_start_lr線性增長至設定的learning_rate
,預設為0。
--warmup_start_lr 預設優化器的warmup起始學習率,預設為0.0。
--lr_decay_epochs 預設優化器的學習率衰減輪數。預設為 30 60 90
--lr_decay_gamma 預設優化器的學習率衰減率。預設為0.1
--save_interval_epochs
模型儲存間隔(單位: 迭代輪數)。預設為1
--save_dir 模型儲存路徑。預設為 ./output/
--dataset 資料集目錄,預設 ./dataset/
--resume_checkpoint 恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
--train_list 訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
--eval_list 評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
--label_list 分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
--model_dir 模型讀取路徑。預設為 ./output/best_model
--skip_analyze 是否跳過分析模型各層引數在不同的裁剪比例下的敏感度,預設不跳過
--pruned_flops 根據選擇的FLOPs減小比例對模型進行裁剪。預設為 0.2
模型量化
- 執行 det-quant.py 檔案,檢視命令列引數加 -h
- model_dir 是正常訓練後的模型儲存目錄。
- 參考文件:模型量化
- 示例
python3 det-quant.py \
--dataset ./dataset/road_fighter_car \
--epochs 32 \
--batch_size 1 \
--learning_rate 0.001 \
--save_interval_epochs 4 \
--model_dir ./output/best_model \
--save_dir ./output/quant
- 引數
-h, --help show this help message and exit
--cpu 是否使用 cpu 計算,預設使用 CUDA
--num_workers 執行緒數量,預設 auto,為CPU核數的一半
--epochs 訓練幾輪,預設 4 輪
--batch_size 一批次數量,預設 16
--learning_rate 學習率,預設 0.025
--warmup_steps 預設優化器的warmup步數,學習率將在設定的步數內,從warmup_start_lr線性增長至設定的learning_rate
,預設為0。
--warmup_start_lr 預設優化器的warmup起始學習率,預設為0.0。
--lr_decay_epochs 預設優化器的學習率衰減輪數。預設為 30 60 90
--lr_decay_gamma 預設優化器的學習率衰減率。預設為0.1
--save_interval_epochs
模型儲存間隔(單位: 迭代輪數)。預設為1
--save_dir 模型儲存路徑。預設為 ./output/
--dataset 資料集目錄,預設 ./dataset/
--resume_checkpoint 恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
--train_list 訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
--eval_list 評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
--label_list 分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
--model_dir 模型讀取路徑。預設為 ./output/best_model
預測模型
- 執行 det-infer.py 檔案,檢視命令列引數加 -h
- show_result 本地計算機執行有效
- 示例
python3 det-infer.py --model_dir ./output/best_model \
--predict_image ./dataset/road_fighter_car/JPEGImages/0297.jpg
- 引數
-h, --help show this help message and exit
--model_dir 讀取模型的目錄,預設 './output/best_model'
--predict_image 預測的影像檔案
--threshold score閾值,將Box置信度低於該閾值的框過濾,預設 0.5
--result_list 預測的結果列表檔案,預設 './result/result.txt'
--result_dir 預測結果視覺化的儲存目錄,預設 './result'
--show_result 顯示預測結果的影像
- 結果演示
部署模型匯出
--fixed_input_shape 來指定輸入大小[w,h]或者是[n,c,w,h]
- 參考文件:部署模型匯出
- 示例
paddlex --export_inference --model_dir=./output/best_model/ --save_dir=./output/inference_model --fixed_input_shape=[-1,3,608,608]
VisualDL 視覺化分析工具
- 安裝和使用說明參考:VisualDL
- 如果是 AI Studio 環境訓練的把 output/vdl_log 目錄下載下來,解壓縮後放到本地專案目錄下 output/vdl_log 目錄
- 在專案目錄下執行下面命令
- 然後根據提示的網址,開啟瀏覽器訪問提示的網址即可
visualdl --logdir ./output/vdl_log