ホームへ戻る

GitHub Repo

TransformersコミュニティがMask2Formerのパラメータ登録漏れを報告、投影層がモデルとともにGPUへ移動しない可能性

10月17日のTransformersコミュニティからの報告によると、Mask2Formerの一部の投影層は通常のPythonリストに保存されており、オプティマイザーやデバイス移動の処理から漏れる可能性があります。コミュニティから修正案が提出されていますが、正式な修正版と実際のセグメンテーション精度への影響はまだ確認されていません。

Andrew Wippler from Lancaster, USA · CC BY 2.0 · Image source
zh-Hant

Transformersでは10月17日、Mask2Formerに関する問題が報告されました。Transformerデコーダーのinput_projectionsが通常のPythonリストに保存されているため、投影層がPyTorchのサブモジュールとして登録されていないというものです。報告者は、v5.20.0のソースコードにこの実装があると指摘し、最小再現コードを添えました。これらのパラメータはオプティマイザーに含まれず、モデルをCUDAへ移動しても一緒に移動しない可能性があります。問題報告

Mask2Formerは、セマンティック、インスタンス、パノプティックセグメンテーションに対応しています。公式ドキュメントによると、enforce_input_projectionはデフォルトで無効です。有効にすると、入力チャンネル数とデコーダーの隠れ次元が同じ場合でも、1×1畳み込みによる投影が追加されます。今回の再現コードでは両方の次元を64に設定し、このオプションを有効にしています。そのため、すべての事前学習済みモデルでデフォルトの推論フローが失敗すると、ただちに結論づけることはできません。モデルと設定のドキュメント

再現コードでは、投影層の重みとmodule.parameters()を一つずつ比較し、未登録のパラメータが12,480個あると報告しています。この数は今回のテスト設定に固有で、すべてのモデルに共通する欠落数ではありません。また報告では、CUDAで実行すると入力がGPU上にある一方で重みがCPUに残り、型の不一致エラーが発生する可能性も指摘されています。モデルから列挙したパラメータを使ってオプティマイザーを作成した場合、これらの投影重みが更新対象から漏れる可能性があります。再現コード

技術的な要点は、コンテナの登録動作です。PyTorchのドキュメントには、nn.ModuleListはリストのようにインデックスでアクセスできる一方、内部のモジュールは正式に登録され、親モジュールのメソッドから認識されると明記されています。このため、学習フローを検証する際は、前向き計算が成功するかだけでなく、学習可能な重みがパラメータ一覧や状態保存に含まれているか、また正しいデバイス上にあるかも確認する必要があります。PyTorchドキュメント

スレッドでは、コントリビューターがコンテナをnn.ModuleList()に変更し、パラメータ登録テストを追加するPR #49703を提出したと述べています。確認時点で問題はまだオープンで、正式な修正版は確定しておらず、下流の精度測定もありません。投影設定を独自に変更しているチームは、まずパラメータ一覧とデバイスを確認し、修正案のレビュー状況と既存チェックポイントの読み込み結果を追跡できます。修正提案の説明

出典

  1. Mask2Former input_projections 未註冊問題與修補討論
  2. Mask2Former 模型與設定文件
  3. torch.nn.ModuleList API 文件