MMDetection 2.x の互換性¶
MMDetection 2.25.0¶
インスタンスセグメンテーション用の Mask2Former をサポートするために、panpotic セグメンテーション用の Mask2Former の元の設定ファイルをリネームする必要があります PR #7571.
v2.25.0 より前 | v2.25.0 以降 |
'mask2former_xxx_coco.py' represents config files for **panoptic segmentation**.
|
'mask2former_xxx_coco.py' represents config files for **instance segmentation**.
'mask2former_xxx_coco-panoptic.py' represents config files for **panoptic segmentation**.
|
---|
MMDetection 2.21.0¶
CPU トレーニングをサポートするために、バッチ照合における scatter のロジックが変更されました。MMCV v1.4.4 以上を使用することをお勧めします。詳細については、MMCV PR #1621 を参照してください。
MMDetection 2.18.1¶
MMCV の互換性¶
BaseTransformerLayer での誤った重み参照バグを修正するために、MultiheadAttention のバッチファーストモードのロジックが変更されました。MMCV v1.3.17 以上を使用することをお勧めします。詳細については、MMCV PR #1418 を参照してください。
MMDetection 2.14.0¶
MMCV バージョン¶
EvalHook の優先度が低すぎる問題を修正するために、すべてのフックの優先度が 1.3.8 で再調整されました。そのため、MMDetection 2.14.0 は最新の MMCV 1.3.8 バージョンに依存する必要があります。関連情報については #1120 を参照し、関連する問題については #5343 を参照してください。
SSD の互換性¶
v2.14.0 では、SSD をより柔軟に使用できるように、PR5291 でバックボーン、ネック、ヘッドがリファクタリングされました。ユーザーは、スクリプト tools/model_converters/upgrade_ssd_version.py
を使用して、モデルを変換できます。
python tools/model_converters/upgrade_ssd_version.py ${OLD_MODEL_PATH} ${NEW_MODEL_PATH}
OLD_MODEL_PATH: 古いバージョンの SSD モデルをロードするパス。
NEW_MODEL_PATH: 変換されたモデルの重みを保存するパス。
MMDetection 2.12.0¶
MMDetection は、v2.12.0 から v2.18.0 (おそらくそれより長い期間) のリリース中に、より一般的で便利な使用のために大規模なリファクタリングが行われています。v2.12.0 では、MMDetection は、MMCV の依存関係、モデルの初期化、モデルのレジストリ、マスク AP の評価など、必然的にいくつかの BC 破壊をもたらします。
MMCV バージョン¶
MMDetection v2.12.0 は、統合されたパラメータ初期化のための BaseModule
、モデルレジストリ、および Deformable DETR のための CUDA オペレータ MultiScaleDeformableAttn
など、MMCV 1.3.3 の最新機能に依存しています。MMCV 1.3.2 は既に MMDet で使用されるすべての機能を含んでいますが、既知の問題があることに注意してください。したがって、ユーザーは MMCV v1.3.2 をスキップして v1.3.2 を使用することをお勧めしますが、v1.3.2 はほとんどの場合で動作する可能性があります。
統一されたモデル初期化¶
OpenMMLab プロジェクトでのパラメータ初期化を統一するために、MMCV は、モジュールのパラメータを柔軟で統一された方法で初期化できるように init_cfg
を受け入れる BaseModule
をサポートしています。現在、ユーザーは、トレーニングスクリプトで model.init_weights()
を明示的に呼び出してモデルを初期化する必要があります (ここ のように、以前はこれが検出器によって処理されていました)。ダウンストリームプロジェクトは、MMDetection v2.12.0 を使用するために、モデルの初期化を適切に更新する必要があります。詳細については、PR #4750 を参照してください。
統一されたモデルレジストリ¶
他の OpenMMLab プロジェクトで実装されたバックボーンを簡単に使用するために、MMDetection v2.12.0 は MMCV で作成されたモデルレジストリ (#760) を継承します。このようにして、バックボーンが OpenMMLab プロジェクトでサポートされていて、そのプロジェクトも MMCV でレジストリを使用している限り、ユーザーは MMDetection にバックボーンのコードをコピーすることなく、設定を変更するだけで MMDetection でそのバックボーンを使用できます。詳細については、PR #5059 を参照してください。
マスク AP の評価¶
PR 4898 および V2.12.0 より前では、小さい、中、大きいインスタンスのマスク AP は、実際のマスク領域ではなく、バウンディングボックス領域に基づいて計算されていました。これにより、APs
と APm
が高くなりますが、APl
は低くなりますが、全体的なマスク AP には影響しません。PR 4898 は、マスク AP 計算で bbox
を削除して、マスク領域を使用するように変更します。新しい計算は、全体的なマスク AP 評価には影響せず、Detectron2 と一致しています。
MMDetection 1.x との互換性¶
MMDetection 2.0 は、大規模なリファクタリングが行われ、多くのレガシーの問題に対処しました。1.x バージョンとは互換性がありません。つまり、これら 2 つのバージョンで同じモデルの重みを使用して推論を実行すると、異なる結果が生成されます。したがって、MMDetection 2.0 はすべてのモデルを再ベンチマークし、モデル動物園でリンクとログを提供します。
主な違いは、座標系、コードベースの規則、トレーニングハイパーパラメータ、モジュラー設計の 4 つの点です。
座標系¶
新しい座標系は、Detectron2と一貫性があり、最も左上のピクセルの中心を(0, 0)として扱い、そのピクセルの左上隅を(0,0)とはみなしません。したがって、このシステムは、COCOのバウンディングボックスとセグメンテーションのアノテーションにおける座標を、[0, width]
または[0, height]
の範囲の座標として解釈します。この変更は、バウンディングボックスとピクセル選択に関連するすべての計算に影響を与え、より自然で正確になります。
新しい座標系における、角が(x1, y1)と(x2, y2)であるボックスの高さと幅は、
width = x2 - x1
およびheight = y2 - y1
として計算されます。MMDetection 1.xおよび以前のバージョンでは、高さと幅の両方に「+ 1」が追加されていました。この変更は、以下の3つの点で影響があります。回帰におけるボックスの変換とエンコード/デコード。
IoUの計算。これは、ground truthとバウンディングボックス間のマッチングプロセス、およびNMSプロセスに影響を与えます。ただし、互換性への影響はごくわずかです。
バウンディングボックスの角はfloat型であり、もはや量子化されません。これにより、より正確なバウンディングボックスの結果が得られるはずです。また、これにより、バウンディングボックスとRoIは最小サイズを1にする必要がなくなり、その影響は小さいですが、改善が見込めます。
アンカーは、特徴グリッドポイントに対して中心に揃えられ、float型です。MMDetection 1.xおよび以前のバージョンでは、アンカーは
int
型であり、中心に揃えられていませんでした。これは、RPNおよびすべてのアンカーベースの方法におけるアンカーの生成に影響を与えます。ROIAlignは、画像座標系とより良く一致しています。新しい実装は、Detectron2から採用されています。RoIは、MMDetection 1.xと比較して、RoI特徴をクロップするために使用される際に、デフォルトでピクセルの半分だけシフトされます。古い動作は、
aligned=True
の代わりにaligned=False
を設定することで引き続き使用できます。マスクのクロップとペーストがより正確になります。
新しいRoIAlignを使用して、マスクターゲットをクロップします。MMDetection 1.xでは、バウンディングボックスはマスクターゲットのクロップに使用される前に量子化され、クロッププロセスはnumpyによって実装されていました。新しい実装では、クロップ用のバウンディングボックスは量子化されず、RoIAlignに送信されます。この実装により、トレーニング速度が大幅に向上し(1回のイテレーションあたり〜0.1秒、1xスケジュールでMask R50をトレーニングする場合〜2時間)、より正確になるはずです。
MMDetection 2.0では、「
paste_mask()
」関数が異なり、以前のバージョンよりも正確であるはずです。この変更は、Detectron2の変更に従っており、COCOでのマスクAPを約0.5%絶対的に向上させることができます。
コードベースの規則¶
MMDetection 2.0は、回帰とマスクブランチで未使用のパラメーターをより自然に削減するために(+1と-1なし)、クラスラベルの順序を変更します。これにより、モデルのすべての分類レイヤーで、クラスラベルの順序が異なります。回帰ブランチとマスクヘッドの最終レイヤーは、K個のカテゴリに対してK + 1チャネルを保持しなくなり、それらのクラス順序は分類ブランチと一致します。
MMDetection 2.0では、ラベル「K」は背景を意味し、ラベル[0, K-1]はK = num_categoriesのオブジェクトカテゴリに対応します。
MMDetection 1.xおよび以前のバージョンでは、ラベル「0」は背景を意味し、ラベル[1, K]はK個のカテゴリに対応します。
注:softmax RPNのクラス順序は、バージョン<=2.4.0では1.xと同じですが、sigmoid RPNは影響を受けません。すべてのヘッドのクラス順序は、MMDetection v2.5.0以降で統一されています。
R-CNNでの低品質マッチングは使用されません。MMDetection 1.xおよび以前のバージョンでは、
max_iou_assigner
は、RPNとR-CNNトレーニングの両方で、各ground truthボックスに対して低品質のボックスをマッチングします。これにより、一部のバウンディングボックスに最も完璧なGTボックスが割り当てられないことがあるため、MMDetection 2.0では、新しいシステムでのR-CNNトレーニングで、デフォルトで低品質マッチングを許可しません。これにより、ボックスAPがわずかに(〜0.1%絶対)向上することがあります。幅と高さに別々のスケールファクター。MMDetection 1.xおよび以前のバージョンでは、スケールファクターは
keep_ratio=True
モードで単一のfloatでした。幅と高さのスケールファクターにわずかな違いがあるため、これはわずかに不正確です。MMDetection 2.0では、幅と高さに別々のスケールファクターを採用しており、APの改善は〜0.1%絶対です。設定ファイルの名前規則が変更されました。MMDetection V2.0は、以下のように徐々に拡大するモデルzooを維持するために、新しい名前規則を採用しています。
[model]_(model setting)_[backbone]_[neck]_(norm setting)_(misc)_(gpu x batch)_[schedule]_[dataset].py,
ここで、(
misc
)にはDCNやGCBlockなどが含まれます。詳細については、configのドキュメントで説明されています。MMDetection V2.0は、事前トレーニング済みモデルをロードする際の警告を減らすために、新しいResNet Caffeバックボーンを使用します。ほとんどの新しいバックボーンの重みは以前のものと同じですが、異なる
img_norm_cfg
を使用することを除いて、conv.bias
がありません。したがって、新しいバックボーンは、予期しないキーの警告を引き起こしません。
トレーニングハイパーパラメータ¶
トレーニングハイパーパラメータの変更は、モデルレベルの互換性には影響しませんが、パフォーマンスをわずかに向上させます。主なものは次のとおりです。
nms後のプロポーザルの数が、
nms_post=1000
およびmax_num=1000
を設定することにより、2000から1000に変更されました。これにより、マスクAPとボックスAPの両方が〜0.2%絶対的にわずかに向上します。Mask R-CNN、Faster R-CNN、およびRetinaNetのデフォルトのボックス回帰損失は、Smooth L1 LossからL1 Lossに変更されました。これにより、ボックスAP全体が改善されます(〜0.6%絶対)。ただし、Cascade R-CNNやHTCなどの他のメソッドにL1損失を使用してもパフォーマンスが向上しないため、これらのメソッドの元の設定を維持します。
RoIAlignレイヤーのサンプル数は、簡略化のために0に設定されています。これにより、マスクAPがわずかに向上します(〜0.2%絶対)。
トレーニング速度を向上させるため、デフォルト設定ではトレーニング中に勾配クリッピングは使用されなくなりました。これにより、ほとんどのモデルのパフォーマンスが低下することはありません。RepPointsなどの一部のモデルについては、トレーニングプロセスを安定させ、より良いパフォーマンスを得るために、引き続き勾配クリッピングを使用します。
勾配クリッピングが通常使用されないため、よりスムーズなウォーミングアッププロセスのために、デフォルトのウォーミングアップ率は1/3から0.001に変更されました。ただし、再ベンチマーク中には、効果はごくわずかであることがわかりました。
1.xから2.0へのモデルのアップグレード¶
MMDetection V1.xでトレーニングされたモデルをMMDetection V2.0に変換するには、スクリプトtools/model_converters/upgrade_model_version.py
を使用してモデルを変換できます。変換されたモデルは、MMDetection V2.0で実行できますが、パフォーマンスがわずかに低下します(1%AP絶対未満)。詳細については、configs/legacy
をご覧ください。
pycocotoolsの互換性¶
mmpycocotools
は、OpenMMlabの公式pycocotools
のフォークであり、MMDetectionとDetectron2の両方で機能します。PR 4939より前は、pycocotools
とmmpycocotool
のパッケージ名が同じであるため、ユーザーがすでにpycocotools
をインストールしている場合(同じ環境でDetectron2を最初にインストール)、MMDetectionの設定ではmmpycocotool
のインストールがスキップされます。したがって、MMDetectionはmmpycocotools
がないために失敗します。MMDetectionがDetectron2より前にインストールされている場合、同じ環境下で動作する可能性があります。PR 4939は、公式のpycocotoolsを優先してmmpycocotoolsを非推奨にしています。ユーザーは、PR 4939の後、インストール順序に関係なく、同じ環境でMMDetectionとDetectron2をインストールできます。