ショートカット

可視化

このチュートリアルを読む前に、MMEngine の可視化ドキュメントを読んで、Visualizer の定義と使い方を最初に把握することをお勧めします。

簡単に言うと、Visualizerは、日常の可視化ニーズを満たすために MMEngine で実装されており、3 つの主な機能が含まれています。

  • draw_bboxes (バウンディング ボックスの描画機能)、draw_lines (線の描画機能) など、一般的な描画 API を実装します。

  • ローカル ディスクや、TensorBoardWandb などの一般的な深層学習トレーニング ロギング ツールなど、さまざまなバックエンドへの可視化結果、学習率曲線、損失関数曲線、検証精度曲線の書き込みをサポートします。

  • トレーニングまたはテスト中に、フィーチャ マップや検証結果など、モデルの中間状態を可視化または記録するために、コードの任意の位置で呼び出すことをサポートします。

MMEngine の Visualizer に基づいて、MMDet には、ユーザーが次の構成ファイルを変更するだけで使用できる、さまざまな組み込みの可視化ツールが付属しています。

  • tools/analysis_tools/browse_dataset.py スクリプトは、browse_dataset.py で説明されているように、データ変換後の画像と対応するアノテーションを描画するデータセット可視化機能を提供します。

  • MMEngine は LoggerHook を実装しており、Visualizer を使用して、Visualizer で設定されたバックエンドに学習率、損失、評価結果を書き込みます。したがって、構成ファイルで Visualizer バックエンドを、たとえば TensorBoardVISBackend または WandbVISBackend に変更することで、TensorBoardWandB などの一般的なトレーニング ロギング ツールへのロギングを実装でき、ユーザーがこれらの可視化ツールを使用してトレーニング プロセスを分析および監視することを容易にします。

  • VisualizerHook は MMDet に実装されており、Visualizer を使用して、検証または予測フェーズの予測結果を Visualizer で設定されたバックエンドに可視化または保存します。したがって、構成ファイルで Visualizer バックエンドを、たとえば TensorBoardVISBackend または WandbVISBackend に変更することで、予測された画像を TensorBoard または Wandb に保存することを実装できます。

構成

登録メカニズムを使用しているため、MMDet では、構成ファイルを変更することで、Visualizer の動作を設定できます。通常、configs/_base_/default_runtime.py でビジュアライザーのデフォルト構成を定義します。詳細については、構成チュートリアルを参照してください。

vis_backends = [dict(type='LocalVisBackend')]
visualizer = dict(
    type='DetLocalVisualizer',
    vis_backends=vis_backends,
    name='visualizer')

上記の例に基づいて、Visualizer の構成は、Visualizer のタイプと、使用する可視化バックエンド vis_backends という 2 つの主要な部分で構成されていることがわかります。

  • ユーザーは、DetLocalVisualizer を直接使用して、サポートタスクのラベルまたは予測を可視化できます。

  • MMDet は、可視化バックエンド vis_backend をデフォルトでローカル可視化バックエンド LocalVisBackend に設定し、すべての可視化結果およびその他のトレーニング情報をローカル フォルダーに保存します。

ストレージ

MMDet は、デフォルトでローカル可視化バックエンド LocalVisBackend を使用します。モデルの損失、学習率、モデルの評価精度、可視化 VisualizerHook および LoggerHook に格納されている情報 (損失、学習率、評価精度を含む) は、デフォルトで {work_dir}/{config_name}/{time}/{vis_data} フォルダーに保存されます。さらに、MMDet は TensorboardVisBackendWandbVisBackend など、他の一般的な可視化バックエンドもサポートしており、構成ファイルで vis_backends のタイプを対応する可視化バックエンドに変更するだけで済みます。たとえば、次のコード ブロックを構成ファイルに挿入するだけで、データを TensorBoard および Wandb に保存できます。

# https://mmengine.readthedocs.io/en/latest/api/visualization.html
_base_.visualizer.vis_backends = [
    dict(type='LocalVisBackend'), #
    dict(type='TensorboardVisBackend'),
    dict(type='WandbVisBackend'),]

プロット

予測結果をプロットする

MMDet は主に、DetVisualizationHook を使用して、検証とテストの予測結果をプロットします。デフォルトでは、DetVisualizationHook はオフになっており、デフォルト構成は次のとおりです。

visualization=dict( # user visualization of validation and test results
    type='DetVisualizationHook',
    draw=False,
    interval=1,
    show=False)

次の表に、DetVisualizationHook でサポートされているパラメーターを示します。

パラメーター 説明
描画 DetVisualizationHookは、デフォルト状態であるenableパラメータによってオン/オフが切り替えられます。
間隔 VisualizationHookが有効な場合に、valまたはtestの結果を保存または表示する反復回数を制御します。
表示 valまたはtestの結果を可視化するかどうかを制御します。

トレーニングまたはテスト中にDetVisualizationHook関連の機能と設定を有効にするには、設定を変更するだけで済みます。例としてconfigs/rtmdet/rtmdet_tiny_8xb32-300e_coco.pyを取り上げ、アノテーションと予測を同時に描画して画像を表示する場合、設定は次のように変更できます。

visualization = _base_.default_hooks.visualization
visualization.update(dict(draw=True, show=True))

test.pyの手順は、--showおよび--show-dirパラメータを提供することにより、設定を変更せずにテスト中にアノテーションと予測の結果を可視化するようにさらに簡素化されています。

# Show test results
python tools/test.py configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_tiny_8xb32-300e_coco/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --show

# Specify where to store the prediction results
python tools/test.py configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_tiny_8xb32-300e_coco/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --show-dir imgs/