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}]
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 測試模型的魯棒性
專欄所有文章請點擊下列文章列表查看:
知乎專欄:小哲AI專欄文章分類索引跳轉查看
AI研習社專欄:小哲AI專欄文章分類索引