小熊飛槳練習冊-08PaddleX底特律街景

小熊寶寶啊發表於2022-06-19

小熊飛槳練習冊-08PaddleX底特律街景

簡介

小熊飛槳練習冊-08PaddleX底特律街景,是學習影像分割小專案,本專案開發和測試均在 Ubuntu 20.04 系統下進行。
專案最新程式碼檢視主頁:小熊飛槳練習冊
百度飛槳 AI Studio 主頁:小熊飛槳練習冊-08PaddleX底特律街景
Ubuntu 系統安裝 CUDA 參考:Ubuntu 百度飛槳和 CUDA 的安裝

  • 鋸齒狼牙的預測結果,模型:BiSeNetV2


檔案說明

檔案 說明
train.py 訓練程式
prune.py 裁剪程式
quant.py 量化程式
infer.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 預測結果儲存目錄

環境依賴

資料集

資料集來源於自己收集標註的百度飛槳公共資料集:鋸齒狼牙的底特律街景

資料集包含訓練集,驗證集,測試集,包含 MASK 掩膜 和 COCO 格式資料集,適用影像分割,語義分割,例項分割學習。

如何自己標註資料

  • 使用標註工具:EISeg
  • 中文介面,支援 MASK 掩膜 和 COCO 格式

一鍵獲取資料

  • 執行指令碼,包含以下步驟:獲取資料,生成影像路徑和標籤的文字檔案,檢查資料。
  • 詳情檢視 onekey.sh

如果執行在本地計算機,下載完資料,檔案放到 dataset 目錄下,在專案目錄下執行下面指令碼。

如果執行在百度 AI Studio 環境,檢視 data 目錄是否有資料,在專案目錄下執行下面指令碼。

bash onekey.sh

配置模組

可以檢視修改 mod/pdxconfig.py 檔案,有詳細的說明

開始訓練

執行 train.py 檔案,檢視命令列引數加 -h

  • 示例
python3 run/train.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 32 \
    --batch_size 1 \
    --learning_rate 0.01 \
    --model BiSeNetV2 \
    --pretrain_weights "CITYSCAPES"
  • 引數
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 計算,預設使用 CUDA
  --num_workers         執行緒數量,預設 auto,為CPU核數的一半
  --epochs              訓練幾輪,預設 4 輪
  --batch_size          一批次數量,預設 16
  --learning_rate       學習率,預設 0.025
  --early_stop          是否使用提前終止訓練策略。預設為 False
  --early_stop_patience 
                        當使用提前終止訓練策略時,如果驗證集精度在early_stop_patience 個 epoch
                        內連續下降或持平,則終止訓練。預設為 5
  --save_interval_epochs 
                        模型儲存間隔(單位: 迭代輪數)。預設為 1
  --log_interval_steps 
                        訓練日誌輸出間隔(單位:迭代次數)。預設為 10
  --resume_checkpoint   恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
  --save_dir            模型儲存路徑。預設為 ./output/
  --dataset             資料集目錄,預設 ./dataset/
  --train_list          訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
  --eval_list           評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
  --label_list          分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
  --lr_decay_power      預設優化器學習率衰減指數。預設為 0.9
  --use_mixed_loss      是否使用混合損失函式。如果為True,混合使用CrossEntropyLoss和LovaszSoftmaxLoss,權重分別為0
                        .8和0.2。如果為False,則僅使用CrossEntropyLoss。也可以以列表的形式自定義混合損失函式,列表的每一個元素
                        為(損失函式型別,權重)元組,損失函式型別取值範圍為['CrossEntropyLoss', 'DiceLoss',
                        'LovaszSoftmaxLoss']。預設為False。
  --align_corners       是網路中對特徵圖進行插值時是否將四個角落畫素的中心對齊。若特徵圖尺寸為偶數,建議設為True。若特徵圖尺寸為奇數,建議設為Fal
                        se。預設為False。
  --backbone            影像分割模型 DeepLabV3P 的 backbone 網路,取值範圍為['ResNet50_vd',
                        'ResNet101_vd'],預設為'ResNet50_vd'。
  --hrnet_width         影像分割模型 HRNet 的 width 網路,高解析度分支中特徵層的通道數量。預設為48。可選擇取值為[18, 48]。
  --pretrain_weights    若指定為'.pdparams'檔案時,則從檔案載入模型權重;若為字串'CITYSCAPES',則自動下載在CITYSCAPES
                        圖片資料上預訓練的模型權重;若為字串'PascalVOC',則自動下載在PascalVOC圖片資料上預訓練的模型權重;若為字元
                        串'IMAGENET',則自動下載在ImageNet圖片資料上預訓練的模型權重;若為None,則不使用預訓練模型。預設為'CIT
                        YSCAPES'。
  --model               PaddleX 模型名稱
  --model_list          輸出 PaddleX 模型名稱,預設不輸出,選擇後只輸出資訊,不會開啟訓練

檢視支援的模型

  • 執行命令
python3 run/train.py --model_list
  • 結果
PaddleX 影像分割模型
['DeepLabV3P', 'BiSeNetV2', 'UNet', 'HRNet', 'FastSCNN']
DeepLabV3P backbone 網路
['ResNet50_vd', 'ResNet101_vd']

模型裁剪

  • 執行 prune.py 檔案,檢視命令列引數加 -h。
  • 注意:有的模型不支援裁剪。
  • 裁剪後的精度大部分會降低。
  • 參考文件:模型裁剪
  • 示例
python3 run/prune.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 16 \
    --batch_size 1 \
    --learning_rate 0.001 \
    --model_dir ./output/best_model \
    --save_dir ./output/prune \
    --pruned_flops 0.2
  • 引數
  -h, --help            show this help message and exit
  --cpu                 是否使用 cpu 計算,預設使用 CUDA
  --num_workers         執行緒數量,預設 auto,為CPU核數的一半
  --epochs              訓練幾輪,預設 4 輪
  --batch_size          一批次數量,預設 16
  --learning_rate       學習率,預設 0.025
  --early_stop          是否使用提前終止訓練策略。預設為 False
  --early_stop_patience 
                        當使用提前終止訓練策略時,如果驗證集精度在early_stop_patience 個 epoch 內連續下降或持平,則終止訓練。預設為 5
  --save_interval_epochs 
                        模型儲存間隔(單位: 迭代輪數)。預設為 1
  --log_interval_steps 
                        訓練日誌輸出間隔(單位:迭代次數)。預設為 10
  --resume_checkpoint   恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
  --save_dir            模型儲存路徑。預設為 ./output/
  --dataset             資料集目錄,預設 ./dataset/
  --train_list          訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
  --eval_list           評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
  --label_list          分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
  --lr_decay_power      預設優化器學習率衰減指數。預設為 0.9
  --model_dir           模型讀取路徑。預設為 ./output/best_model
  --skip_analyze        是否跳過分析模型各層引數在不同的裁剪比例下的敏感度,預設不跳過
  --pruned_flops        根據選擇的 FLOPS 減小比例對模型進行裁剪。預設為 0.2

模型量化

  • 執行 quant.py 檔案,檢視命令列引數加 -h
  • model_dir 是正常訓練後的模型儲存目錄。
  • 參考文件:模型量化
  • 示例
python3 run/quant.py \
    --dataset ./dataset/detroit_streetscape \
    --epochs 16 \
    --batch_size 1 \
    --learning_rate 0.001 \
    --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
  --early_stop          是否使用提前終止訓練策略。預設為 False
  --early_stop_patience 
                        當使用提前終止訓練策略時,如果驗證集精度在early_stop_patience 個 epoch 內連續下降或持平,則終止訓練。預設為 5
  --save_interval_epochs 
                        模型儲存間隔(單位: 迭代輪數)。預設為 1
  --log_interval_steps 
                        訓練日誌輸出間隔(單位:迭代次數)。預設為 10
  --resume_checkpoint   恢復訓練時指定上次訓練儲存的模型路徑, 預設不會恢復訓練
  --save_dir            模型儲存路徑。預設為 ./output/
  --dataset             資料集目錄,預設 ./dataset/
  --train_list          訓練集列表,預設 '--dataset' 引數目錄下的 train_list.txt
  --eval_list           評估集列表,預設 '--dataset' 引數目錄下的 val_list.txt
  --label_list          分類標籤列表,預設 '--dataset' 引數目錄下的 labels.txt
  --lr_decay_power      預設優化器學習率衰減指數。預設為 0.9
  --model_dir           模型讀取路徑。預設為 ./output/best_model

預測模型

  • 執行 infer.py 檔案,檢視命令列引數加 -h
  • 示例
python3 run/infer.py --model_dir ./output/best_model \
    --predict_image ./dataset/detroit_streetscape/0183.jpg
  • 引數
  -h, --help            show this help message and exit
  --model_dir           讀取模型的目錄,預設 './output/best_model'
  --predict_image       預測的影像檔案
  --predict_image_dir   預測的影像目錄
  --weight              mask視覺化結果與原圖權重因子,weight表示原圖的權重,預設 0.6
  --result_dir          預測結果視覺化的儲存目錄,預設 './result'

關於影像寬高

  • 由於原始影像是 1920x1080 在訓練前填充為 1920 的正方形影像,然後調整為 1024x1024,參見 seg-train.py
T.Padding(target_size=1920, pad_mode=0, im_padding_value=[0, 0, 0]),
T.Resize(target_size=1024),

關於預測視覺化的結果顏色

  • EISeg 顏色通道順序為 RGB,paddlex.seg.visualize 顏色通道順序為 BGR

部署模型匯出

  • 影像分割的 --fixed_input_shape 引數無效
  • 參考文件:部署模型匯出
  • 示例
paddlex --export_inference --model_dir=./output/best_model/ --save_dir=./output/inference_model

VisualDL 視覺化分析工具

  • 安裝和使用說明參考:VisualDL
  • 如果是 AI Studio 環境訓練的把 output/vdl_log 目錄下載下來,解壓縮後放到本地專案目錄下 output/vdl_log 目錄
  • 在專案目錄下執行下面命令
  • 然後根據提示的網址,開啟瀏覽器訪問提示的網址即可
visualdl --logdir ./output/vdl_log

相關文章