小熊飛槳練習冊-07PaddleX尋找火箭車車

小熊寶寶啊發表於2022-05-27

小熊飛槳練習冊-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

相關文章