mmdetection2.6 有用的工具

在tools文件夾下, 除了訓練與測試的script,也提供了很多的其他的有用工具。

1. 日誌分析

tools/analyze_logs.py 利用給定的訓練日誌文件,可以列印出loss函數與map的曲線,運行pip install serborn來安裝對應的依賴。

python tools/analyze_logs.py plot_curve [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}]

loss curve

Examples:

  • 列印分類損失

    python tools/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls
    
  • 列印分類與回歸的損失,並保存為一個pdf文件

    python tools/analyze_logs.py plot_curve log.json --keys loss_cls loss_bbox --out losses.pdf
    
  • 在同一個圖中對比兩個runs的map

    python tools/analyze_logs.py plot_curve log1.json log2.json --keys bbox_mAP --legend run1 run2
    
  • 計算平均訓練速度

    python tools/analyze_logs.py cal_train_time log.json [--include-outliers]
    

訓練速度的計算結果輸出如下所示:.

-----Analyze train time of work_dirs/some_exp/20190611_192040.log.json-----
slowest epoch 11, average time is 1.2024
fastest epoch 1, average time is 1.1909
time std over epochs is 0.0028
average iter time: 1.1959 s/iter

2. 可視化

2.1 可視化數據集

tools/browse_dataset.py這個腳本程式,用來幫助使用者來瀏覽目標檢測的數據集,包括圖片與bbox,或者保存圖片到指定的目錄。

python tools/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}]

2.2 可視化模型

首先按照這裡的描述轉換模型為ONNX,現在僅僅RetainNet支援這種操作,其他的模型將在後來的版本中逐步支援,然後使用Netron工具來實現可視化。

2.3 可視化預測結果

如果需要輕量化的GUI來可視化檢測結果,可以參考DetVisGUI project

3. 誤差分析

tools/coco_error_analysis.py 利用不同的標準分析了每一類的結果,也可以繪圖來提供有用的資訊。

python tools/coco_error_analysis.py ${RESULT} ${OUT_DIR} [-h] [--ann ${ANN}] [--types ${TYPES[TYPES...]}]

4. 模型複雜度

tools/get_flops.py是一個利用 flops-counter.pytorch 來計算FLOPS與參數的方法。

python tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]

得到的最終結果如下圖所示:

==============================
Input shape: (3, 1280, 800)
Flops: 239.32 GFLOPs
Params: 37.74 M
==============================

**注意:**這個工具依然在實驗階段,並且不能夠保證結果完全正確。可以使用這個結果進行簡單的比較,但是在論文或者技術報告中,使用這個結果時必須要好好檢查一下。

  • FLOPS與輸入影像的代銷相關,然而模型參數沒有關係,默認的輸入尺寸是(1, 3, 1280, 800)
  • 一些自定義的操作例如GN等沒有算在FLOPS中。更多資訊參考mmcv.cnn.get_model_complexity_info()
  • 兩步法的FLOPS依賴於proposal的數目。

5. 模型轉換

5.1 mmdetection模型轉換為ONNX(實驗階段)

mmdetection提供了一個腳本將模型轉換為ONNX

python tools/pytorch2onnx.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --output_file ${ONNX_FILE} [--shape ${INPUT_SHAPE} --verify]

現在這個工具依然在實驗階段,好多自定義的操作不支援。

5.2 mmdetection1.x版本的模型轉換為mmdetection2.x

tools/upgrade_model_version.py更新先前版本的checkpoint權重為新的版本。不保證全部實現。

python tools/upgrade_model_version.py ${IN_FILE} ${OUT_FILE} [-h] [--num-classes NUM_CLASSES]

5.3 RegNet模型轉換為mmdetection

tools/regnet2mmdet.py將pycls預訓練的regnet模型轉換為mmdetection風格的模型。

python tools/regnet2mmdet.py ${SRC} ${DST} [-h]

5.4 Detectron resnet轉換為Pytorch

tools/detectron2pytorch.py將原始detectron框架的resnet預訓練模型轉換為pytorch風格的模型。

python tools/detectron2pytorch.py ${SRC} ${DST} ${DEPTH} [-h]

5.5 準備一個待發布的模型

tools/publish_model.py幫助使用者準備自己的待發布的模型。

在你講模型傳到AWS之前,你可能想要:

  • 將模型的權重轉換為cpu tensor
  • 刪除優化器的狀態
  • 計算checkpoint文件的的哈希值,並且將hash id加到文件名後邊
python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME}

例子:

python tools/publish_model.py work_dirs/faster_rcnn/latest.pth faster_rcnn_r50_fpn_1x_20190801.pth

最終的輸出名字為faster_rcnn_r50_fpn_1x_20190801-{hash id}.pth

6. 數據集轉換

tools/convert_datasets/提供了工具來轉換Cityscapes數據集與Pascal VOC數據集為COCO格式的數據集。

python tools/convert_datasets/cityscapes.py ${CITYSCAPES_PATH} [-h] [--img-dir ${IMG_DIR}] [--gt-dir ${GT_DIR}] [-o ${OUT_DIR}] [--nproc ${NPROC}]
python tools/convert_datasets/pascal_voc.py ${DEVKIT_PATH} [-h] [-o ${OUT_DIR}]

7. 其他

7.1 評估標準

tools/eval_metric.py按照config文件評估某個結果pickle文件。

python tools/eval_metric.py ${CONFIG} ${PKL_RESULTS} [-h] [--format-only] [--eval ${EVAL[EVAL ...]}]
                      [--cfg-options ${CFG_OPTIONS [CFG_OPTIONS ...]}]
                      [--eval-options ${EVAL_OPTIONS [EVAL_OPTIONS ...]}]

7.2 列印整個config文件

tools/print_config.py列印整個config文件,包括import的內容

python tools/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}]

7.3 測試模型的魯棒性

參考robustness_benchmarking.md.

專欄所有文章請點擊下列文章列表查看:

知乎專欄:小哲AI專欄文章分類索引跳轉查看

AI研習社專欄:小哲AI專欄文章分類索引