PyTorchからONNXへ
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
PyTorchからONNXへ
この章では、PyTorchモデルをONNXモデルに変換してエクスポートする方法について説明します。
準備
環境構成
トレーニングのステップと同様に、モデルエクスポートの段階では仮想環境で作業することを推奨します。sscma
仮想環境内で、インストール - 前提条件 - 追加依存関係のインストールのステップが完了していることを確認してください。
仮想環境を構成済みでまだ有効化していない場合は、以下のコマンドで有効化できます。
conda activate sscma
モデルと重み
モデルをエクスポートする前に、PyTorchモデルとその重みを準備する必要があります。モデルについては、Configセクションで事前に設定されています。重みについては、以下の手順を参考にしてモデルの重みを取得してください。
トレーニングセクションを参照し、モデルを選択してトレーニングを行い、モデルの重みを取得します。
または、SSCMA公式の事前トレーニング済みの重みをGitHub Releases - Model Zooからダウンロードします。
モデルのエクスポート
モデルの変換とエクスポートに関するコマンドといくつかの一般的なパラメータを以下に示します。
python3 tools/export.py \
"<CONFIG_FILE_PATH>" \
"<CHECKPOINT_FILE_PATH>" \
--target onnx
ONNXエクスポート例
以下に、参考となるモデル変換の例を示します。
- FOMOモデル変換
- PFLDモデル変換
- SWIFTモデル変換
python3 tools/export.py \
configs/fomo/fomo_mobnetv2_0.35_x8_abl_coco.py \
"$(cat work_dirs/fomo_mobnetv2_0.35_x8_abl_coco/last_checkpoint)" \
--target onnx \
--cfg-options \
data_root='datasets/mask'
python3 tools/export.py \
configs/pfld/pfld_mbv2n_112.py \
"$(cat work_dirs/pfld_mbv2n_112/last_checkpoint)" \
--target onnx \
--cfg-options \
data_root='datasets/meter'
python3 tools/export.py \
configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \
"$(cat work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint)" \
--target onnx \
--cfg-options \
data_root='datasets/digital_meter'
モデルの検証
モデルのエクスポートプロセス中に、SSCMAはモデルの最適化をいくつかのツール(モデルの剪定、蒸留など)を使用して行います。トレーニングプロセス中にモデルの重みをテストおよび評価していますが、エクスポートされたモデルを再度検証することを推奨します。
python3 tools/inference.py \
"<CONFIG_FILE_PATH>" \
"<CHECKPOINT_FILE_PATH>" \
--show \
--cfg-options "<CFG_OPTIONS>"
サポートされているその他のパラメータについては、ソースコードtools/inference.py
を参照するか、python3 tools/inference.py --help
を実行してください。
モデル検証例
- FOMOモデル検証
- PFLDモデル検証
- SWIFT-YOLOモデル検証
python3 tools/inference.py \
configs/fomo/fomo_mobnetv2_0.35_x8_abl_coco.py \
"$(cat work_dirs/fomo_mobnetv2_0.35_x8_abl_coco/last_checkpoint | sed -e 's/.pth/.onnx/g')" \
--show \
--cfg-options \
data_root='datasets/mask'
python3 tools/inference.py \
configs/pfld/pfld_mbv2n_112.py \
"$(cat work_dirs/pfld_mbv2n_112/last_checkpoint | sed -e 's/.pth/.onnx/g')" \
--show \
--cfg-options \
data_root='datasets/meter'
python3 tools/inference.py \
configs/swift_yolo/swift_yolo_tiny_1xb16_300e_coco.py \
"$(cat work_dirs/swift_yolo_tiny_1xb16_300e_coco/last_checkpoint | sed -e 's/.pth/.onnx/g')" \
--show \
--cfg-options \
data_root='datasets/digital_meter'