ホームへ戻る

GitHub Repo

TransformersコミュニティがGrounding DINOの位置エンコーディングのずれを報告、句点の扱いが検出結果を変える可能性

11月7日、Transformersコミュニティは、v5系列で句末の区切り記号の位置番号がゼロに設定され、旧版やオリジナル実装の出力と異なると報告しました。CPUでの再現手順と修正案が示されていますが、関連する修正はまだなく、完全なデータセットでの精度への影響も未検証です。

Marcus Qwertyus · Public domain · Image source
zh-Hant

TransformersにおけるGrounding DINOの統合で、新たな数値互換性に関する報告がありました。コミュニティメンバーは11月7日にissueを提出し、v5.0以降のテキスト位置番号のベクトル化実装では、句を終えるピリオドや疑問符がゼロに設定され、v4およびオリジナルモデルの規則と異なると指摘しました。報告者はTransformers 5.18.0のCPU環境で再現し、確認したメインブランチにも同じコードが残っているとしています。issue報告

この細部は、モデルの一般的な使い方に直接関わります。Grounding DINOはテキスト記述で検出対象を指定します。公式ドキュメントでは、a cat. a dog.のようにピリオドでクラスを区切り、検出しきい値とテキストしきい値を適用して出力を処理する方法を推奨しています。また、SAMと組み合わせて、テキストで指定したセグメンテーションマスクを生成することもできます。そのため、区切り記号の位置の扱いは、アップグレード時の検証項目に含める必要があります。公式ドキュメント

報告によると、ベクトル化されたコードが「直前の特殊トークン」を探す際に現在の位置も含めてしまうため、区切り記号の位置がまずマイナス1になり、その後ゼロに切り詰められます。たとえばa cat.では、ピリオドの位置は本来2ですが、0になります。これらの位置はBERTの位置埋め込みとテキストの正弦波埋め込みの両方に使われるため、後続のテキスト特徴と検出スコアがともに変化する可能性があります。再現手順と根本原因の分析

報告者は、累積位置の結果を右に1つシフトし、現在のトークンより前にある区切り記号だけを対象にする修正を提案しています。ベクトル化計算は維持されます。報告では、この変更に先行する埋め込み型の修正とPILによる画像前処理を組み合わせることで、指定した統合テストが再び通過したとしています。また、2,000組のランダムバッチで、マスクと位置番号が旧版のループ実装と一致しました。これらは報告者による限定的な検証であり、検出精度全体への影響を推定する根拠にはなりません。テスト結果

確認時点でissueは未解決で、関連PRも記載されていません。エンジニアリングチームは、アップグレード前後で複数クラスのプロンプトに対する出力を比較し、重み、画像前処理、しきい値を固定して、異なる要因による数値差が混在しないようにするとよいでしょう。その後は、メンテナーによる確認、回帰テスト、正式リリースへの反映状況を追う必要があります。

出典

  1. Grounding DINO: phrase delimiters get text position id 0 since v5.0
  2. Grounding DINO — Transformers documentation