TT Lab
ブログ

한국어 English 日本語

はじめる
ブログ

ブログ

デジタルツインとAI卓球審判:実際のバウンドで物理を合わせ、正解を知る試験場で審判を試す

ステータス:ドラフト(2026-10-18)、実測。試験場の精度はシミュレータ内の相対比較値です。 計算はすべてMac 1台(Apple M1 Max 10コア、Python 3.9.6、numpy 2.0.2)のCPUで行い、GPUやクラスターは使用していません。新しいパッケージ・画像・データのダウンロードは行っていません。調整と試験場はシードを固定した決定論的実行であるため各1回実行し(同一コマンドで同一結果)、処理時間のみ5回実行の中央値です。処理時間はMacで他のプロセスが動作し負荷平均が47〜76の状態で測定した値です。実際の映像は公開データセットOpenTTGames(120 fps、人物が捉えたボール座標とバウンドマーカー)およびその拡張ラベルを使用し、両方ともCC BY-NC-SA 4.0です。このデータで調整した物理パラメータおよびその値で描画したグラフ(反発係数グラフ)も同一条件に従います。元データ(調整結果、試験場判定24,300行ずつ、実際の基準表結果)は作業ディレクトリ measure/tt-twin/ にあります。

目次

1. 直感:正解を知る練習試合場

カメラ型スコアボードの審判機能を向上させるには、「誤った判定」を大量に収集する必要があります。実際の競技映像には正解ラベルが少なく、エッジボールやオブストラクションのような稀なシーンはほとんどありません。シミュレータ内であれば、物理エンジンがボールの接触位置を把握しているため、必要なシーンを必要なだけ生成して審判に提示できます。これが 正解を知る試験場です。

ただし、試験場のボールの挙動が実際のボールと異なる場合、試験は的外れな弱点を検出してしまいます。そのため、手順を3つに分けました。

  1. 実物合わせ(real2sim): 実際のバウンドを用いてシミュレータの物理パラメータを調整します。
  2. 試験場: 調整した物理パラメータでシーンを生成し、運用判定コードに入力して弱点を検出します。
  3. 改善サイクル: 最大の弱点を1つ修正し、シミュレータと実際の映像の 両方で改善が見られた場合のみ採用します。

2. 実物合わせ:実バウンド1,777片

2.1 方法

最初は「バウンド後50 msのみを観測して次のバウンドを予測する」誤差を最小化する方式で調整したが、測定ノイズが大きく反発係数が実測とかけ離れた値(e0 1.09)になった。そのためこの方式を破棄し、抗力・マグナス倍率をグリッドサーチで選択した上で、バウンドごとに測定した反発係数を直接回帰する手順に変更した。失敗した方法も記録として残す。

2.2 結果

項目 運用デフォルト値 調整値
反発係数 e0, e1 0.98, 0.02 0.982, 0.045
摩擦 μ 0.25 0.160
抗力倍率 ×1 ×0.8(0.8〜1.2間の差が0.02 px未満のため弱くしか制約されない)
マグナス倍率 ×1 ×1.5(オフにすると調整残差が倍増。1以上では回転の大きさとトレードオフになり識別困難)
30 cm落下最高点(空気抵抗なしで計算) 26.0 cm(e 0.931) 22.9 cm(e 0.873)
실제 바운드에서 잰 반발 계수는 운영 값보다 낮았다 공개 경기 영상 120 fps 표식 바운드. 칸마다 중앙값과 사분위 범위. 0.7 0.8 0.9 1.0 1 2 3 4 5 내려오는 속도 |v_z| (m/s) 기본값 0.98 + 0.02·v_z 맞춘 값 0.982 + 0.045·v_z 실측 학습 5경기 실측 시험 7경기 30 cm 낙하 꼭대기(공기저항 없이 계산) 기본값 26.0 cm, 맞춘 값 22.9 cm ITTF 규정은 약 23 cm
グラフ:実際のバウンドで測定した反発係数とデフォルト値・調整値
下降速度 実測 e 中央値、訓練5試合(四分位数) 実測 e、テスト7試合 デフォルト値 調整値
1.5–2.5 m/s 0.894 (0.781–0.991), n 692 0.911, n 93 0.939 0.889
2.5–3.5 m/s 0.831 (0.746–0.892), n 507 0.854, n 93 0.921 0.849
3.5–5.0 m/s 0.838 (0.753–0.880), n 176 0.830, n 30 0.902 0.807

実測の反発係数は、運用合成装置の値よりも0.04〜0.07低かった。ITTF規則(2.1.3)では、30 cmの高さから落としたボールは約23 cm弾まなければならないと規定されており、映像から調整した値はその基準(22.9 cm)の方向に移動した。第2部で見たMuJoCoのDeepMind卓球台の値(26.4 cm)および運用のデフォルト値(26.0 cm)がいずれも規定よりも弾力性高めであったのと同方向である。

2.3 しかし予測はほとんど改善しなかった

サーブの最初のバウンド前の断片とバウンド後150 msを観測して残りの飛行を予測し、相手側のバウンド(B2)と比較した。

試合 物理 サーブ数 B2位置誤差 中央値 (p90) 奥行き方向 B2時刻誤差 中央値 (p90) 時刻の偏り
訓練 5試合 デフォルト値 207 22.7 (47.4) cm 18.8 cm 24.6 (68.3) ms +9.7 ms
訓練 5試合 調整値 207 22.9 (45.5) cm 16.2 cm 24.1 (68.6) ms +3.1 ms
テスト 7試合 デフォルト値 23 21.3 (37.4) cm 20.3 cm 22.5 (52.8) ms +5.7 ms
テスト 7試合 調整値 23 17.4 (31.4) cm 9.9 cm 13.1 (45.7) ms -0.6 ms

(予測がネットに当たりB2を生成できなかったサーブは誤差計算から除外される。訓練55〜59件、テスト7〜8件である。)

2.4 誤差の大部分は単眼カメラの深さから生じる

正解が既知の再サンプリングにより単眼カメラの限界を測定した。実際のバウンド調整600件を正解とし、調整された物理モデルで再描画してカメラに投影し、ノイズを付加した上で同じ方法で復元した(物理モデルが正確であると仮定した場合の下限)。

カメラ 前後フレーム 入射速度誤差中央値、水平/奥行き方向 接触点誤差中央値、水平/奥行き トップスピン誤差中央値
実際の競技カメラ 120 fps、人物マーカー 8 / 12 0.06 / 0.33 m/s 0.3 / 0.5 cm 51 rad/s
スコアボード基準カメラ 512×288、60 fps 6 / 6 0.09 / 0.67 m/s 1.1 / 1.7 cm 60 rad/s
スコアボード基準カメラ 512×288、30 fps 3 / 3 0.12 / 1.11 m/s 3.1 / 3.8 cm 116 rad/s

現在は奥行き誤差が物理パラメータの差を覆い隠している。マグナス倍率と奥行きを同時に決定するには、2台目のカメラか、ボールの模様が視認できるハイスピード映像が必要である。

3. 正解を知る審判試験場:24,300判定

3.1 作成した理由

レンダリングを行わず投影座標を使用した理由。 判定エンジンの入力はボールの画面上の座標であり、目的はエンジンの弱点を発見することである。座標レベルであれば、条件だけを変更して同じシーンを何万回も実行できる。代償として 見た目の違いが失われるということです。ボールが背景・衣類・照明に埋もれること、ラケットや手をボールと誤認すること、実際のブレの痕跡の形状は、検出器のエラーの確率モデルでのみ模倣しました。 実際にテスト環境の基準ラリー(実条件)の精度82%は、同じ運用パイプラインで測定した実際のテスト7試合のクリアな映像における93%(54/58)よりも低いです。そのため 以下の表は、シーンと条件間の相対的な比較としてのみ読み取る必要があります。 絶対値を実際の精度として読み取ってはいけません。

정답을 아는 심판 시험장: 랠리 승자를 맞힌 비율(%) 시뮬레이터 안 상대 비교. 칸은 장면 × 열화 조건, 진할수록 낮음. 이상 실제 30 120 잡음 번짐 가림 놓침 폰 전체 엣지 59 54 46 54 59 51 59 63 34 53 바로 안(3 cm) 96 88 81 83 75 81 59 68 53 76 바로 밖(10 cm) 99 89 91 85 76 88 69 79 58 81 네트 맞고 넘어감 100 94 97 90 83 94 78 81 71 87 서브 렛 78 71 80 54 50 67 41 53 44 60 투 바운드 99 91 89 88 80 90 70 82 60 83 스매시 100 92 80 85 79 93 69 79 56 81 로브(들어감) 69 62 58 64 57 63 55 59 52 60 오브스트럭션 12 13 13 14 17 13 20 22 24 16 발리(넘어간 공) 99 92 97 92 81 95 69 75 69 86 기준 랠리 100 82 85 86 77 86 63 79 62 80 전체 89 80 80 77 70 80 62 70 56 74 이상 = 잡음 없음. 실제 = 실측 검출 잡음. 30·120 = fps. 폰 = 30 fps + 잡음 2배 + 번짐 + 가림. 120 fps(77%)가 60 fps 실제(80%)보다 낮았습니다. 장면마다 조건당 n 이 다릅니다.
図:シーンおよび劣化条件別のラリー勝者的中率

3.2 3つの弱点

  1. オブストラクション 16%(すべての条件で12–24%)。エンジンには「相手のボールをこちらのコートに弾ませる前に競技面上から打った」という概念がなく、大部分をツーバウンドと読み取って対戦相手にポイントを与えます。 同じエンジンがエンドラインを超えたボールを打ったボレーを86%的中させますが、ルールを理解しているからではなく偶然です。
  2. エッジボール 53%、確認なしでの誤判定 21%。 エッジに当たったボールは、画面上でV字型のバウンドを描きません。エンジンはバウンドを確認できず、アウトとして処理します。間違っていながらも人間の確認に回さない割合が最も高く、最も危険な項目です。
  3. サーブレット 60%(オクルージョン 41%、スマホ 44%)。ネットにかすったサーブの速度低下を検知できない、ネットで方向が変わったボールをバウンドと読み取る、またはレシーバー側のバウンドを見逃します。

その次は高いロブ(イン)60%でした。ボールが画面の外に出たり1.5秒以上飛行したりすることで、「ラリー終了」が先に発生します。シーンを問わない失敗原因の第1位は ボール検出が空き位置でのバウンドを見逃すことでした。

120 fpsは60 fpsよりも悪くなりました(77%対80%)。フレーム数が多い方が良くなりそうですが、エンジンの画素の閾値やバウンド拒否ルールが60・30 fpsに合わせて調整されているためだと考えられます。原因を個別に切り分けて再測定はしていません(未計測)。 実際の120 fps映像の推論で確認することが次の作業です。

4. 改善サイクルの1周:軌道の補間

4.1 変更点

テスト環境での失敗原因の第1位である「ボール検出が4サンプル(60 fpsで約0.07秒)を超えて空き位置のバウンドを見逃すこと」を選択しました。実際の試合でも見逃されたバウンドの多くがこのパターンであったという事前の記録があります。

空き位置の前後の軌跡の断片に 曲率を重力で固定した放物線をフィッティングします(曲率 = その位置の画面スケール × 9.81、傾きと切片のみ調整)。以下のすべてを満たす場合にのみ、前後の曲線で空き位置を補間します。

補間された点は信頼度を両側の半分とし、そのバウンドは人間の確認側に回ります。閾値は物理法則から事前に決定し、テスト結果を見て選定したものではありません。

탄도 메우기: 공이 사라진 구간을 중력 포물선으로 원리를 보이려고 만든 합성 궤적(60 fps, 중력만, 반발은 맞춘 값). 6배 느리게. ▶ 누르면 재생 탁구대 윗면 검출이 빈 8표본 되찾은 바운드 검출된 공 직선 메우기: 바운드가 사라짐 곡률을 중력으로 고정한 앞뒤 포물선이 탁구대 위에서 만남
図:ボールが消えた区間を重力放物線で補間する原理

(図は原理を示すために作成した合成軌跡です。実際の判定結果ではありません。)

4.2 シミュレータ上での結果

条件 的中基準 → 変更後(/2,700) 改善 / 悪化 マクネマー検定 p値
異常 2,392 → 2,391 +0 / −1 1
実際 2,159 → 2,209 +57 / −7 7.6e−11
120 fps 2,075 → 2,163 +98 / −10 2.7e−19
オクルージョン 1,671 → 1,826 +223 / −68 2e−20
スマートフォン 1,512 → 1,548 +63 / −27 0.00019
全体(24,300) 17,900 → 18,483(73.7 → 76.1%) +778 / −195 5.3e−83

確認なしで間違った判定は1,215件から996件に減少しました。ただし、 エッジ(53.1 → 49.9%)とオブストラクション(16.3 → 14.6%)は低下しました。 これは今回の変更の目標ではなく、次回のサイクルの課題です。

4.3 実際の映像における結果(採用の有無を決定した表)

シミュレータでのみ改善されたものは採用しません。テスト環境は現実の見た目が省略された近似であるため、そこで改善された変更が実際の映像では悪化する可能性があるためです。 そのため、運用時のリアルタイムパイプラインのまま、実際の映像の固定基準表を再度実行しました。

基準表 ラリー 的中基準 → 変更後 改善 / 悪化
テスト7試合×12条件(クリア、暗い、30 fps、低解像度、ブレ、障害物、手ブレ、オクルージョン、スマホ画質3種) 638 536 → 543 +8 / −1、マクネマー検定 p = 0.039
開発用(学習試合クリア・30 fps・座標オクルージョン15%、検証試合8条件) 1,394 1,217 → 1,238 +36 / −15、p = 0.005

判定:採用。 ただし、運用時には スイッチをオフにした状態 で導入します。オフの場合は従来と同じ計算となるため判定は変わりません。 有効化する前に、カメラのスコアボードのE2Eログ(テスト7試合を仮想カメラ30 fpsで記録して再現)により「運用時より悪化していないこと」をリアルタイムパイプラインで再度確認し、上記の「カメラの前に落ちてきたボール」のグループを合わせて確認します。

5. AI審判の拡張:重力定規とルール別判定表

5.1 重力定規

サーブトスは手を離れた後16 cm以上上がる必要があります(ITTF 2.6.2)。しかし、カメラ1台ではボールまでの距離が分からないため、画面上の画素をセンチメートルに変換するスケールがありません。 ここで重力が定規の役割を果たします。手を離れたボールの画面上の高さを、時間に関する放物線 y = a·t² + b·t + c にフィッティングすると a = g·s/2 となり、s はそのボールの奥行きにおいて1 mが何画素であるかを示します。 これにより、高さ = 画素差 ÷ s として測定でき、奥行き(焦点距離 ÷ s)からボールの3次元位置も算出されます。

중력 자: 공의 낙하 곡률로 화면의 축척을 잰다 합성 토스 30 cm, 60 fps. 축척은 실제 토스 80개의 중앙값 330 px/m 로 그렸습니다. ▶ 누르면 재생 0 20 40 60 80 100 화소 시간(0–0.49 s) 올라간 화소 y = a·t² + b·t + c 를 맞추면 a = g·s/2 = 1619 px/s² → 축척 s = 2a/g = 330 px/m → 높이 = 99 px ÷ s = 30 cm 실제 영상: 토스 80개에서 잰 축척 중앙값 330 px/m, 카메라 기하로 구한 네트 자리 축척은 네 경기에서 303–335 px/m.
図:ボールの落下曲率で画面スケールを測定する重力定規

5.2 ルール別判定表

シグナルごとに信頼度を設定し、シグナルが食い違う場合や確信度が低い場合は人間の確認に回すという原則です。「測定済み」は今回の実測、「未測定」は未計測を表します。

ルール(ITTF) 必要なシグナル 測定済み 未測定 一次判定 / 人間の確認
トス16 cm以上(2.6.2) ボール(重力定規)、手が離れる瞬間 手持ち上げを組み込んだ合成で0.70–0.86、境界±4 cm以内0.59–0.66。実際の映像で測定可能なサーブ 29% 手の関節による離れた瞬間の検出、実際の正解の高さ 人間の確認。明らかに低いトスのみ通知の候補とする。
トスの位置:エンドラインの後方、競技面の高さより上方(2.6.4) ボール(重力定規による奥行きまで) 合成 0.89–0.97、ラインから10 cm以上離れた場合 0.97–1.00 実際の映像の正解 10 cmより外側は一次判定、内側は人間の確認
手の平を開いてボールを上げる(2.6.1) 手の関節 なし 手の関節モデル 人間の確認
サーブを遮らないこと(2.6.4–2.6.5) レシーバー視点でのボールの視認 なし 横から撮影するスマートフォン1台では原理上判定不能 人間の確認
サーブレット(2.9.1.1) ボール(ネットでの速度低下)、ネットの音 テスト環境 60% 実際のスマートフォンの音声 人間の確認(レットのため確認コストが低い)
エッジ(2.1.2) ボール(V字のない急激な方向転換)、エッジの音 テスト環境 53%、確認なしでの誤判定 21% 実際のエッジ映像、側面(サイド)の生成0件 人間の確認が必須
ツーバウンド ボール テスト環境 83%、軌道補間後 87.5% 実サンプル数が少ない 一次判定
オブストラクション(2.5.8) ボール(バウンド前の進行方向が反転した位置が卓球台の上か)、身体・ラケット テスト環境 16% 実際のラベル 人間の確認。「バウンドなしでの方向転換 + その位置が卓球台の上」というルールをテスト環境で検証するのが次のステップ

6. 制限事項

7. 次のサイクル

  1. 軌道補間スイッチをオンにする前のE2E確認。
  2. エッジ候補 → 人間の確認。 エンドラインの帯の内部で「V字なしで方向が急激に変化すること」をエッジ候補として表示します。テスト環境において確認なしでの誤判定が減少し、通常のアウト判定が悪化しないかを事前に測定します。
  3. オブストラクションルール。 横から見れば長さ方向はよく確認できるため(セクション2.4)、方向が反転した位置の長さ方向の座標で判定します。
  4. テスト環境の忠実度。 実際の検出器のエラーを速度・位置ごとに再測定してノイズモデルを調整し、120 fpsが60 fpsよりも悪くなった結果を実際の120 fps推論で確認します。

一言まとめ。 正解が分かっている練習環境で審判を2万4千回テストしました。そこで見つかった弱点を修正し、実際の試合映像でも改善された場合のみ採用しました。練習環境だけで優秀な審判は役に立ちませんからね!

参考資料

すべてのリンクは2026年10月18日にアクセス可能であることを確認しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます