TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

卓球データセットを自分で数えてみる:OpenTTGames、Extended、T3Set、TT Sounds、RacketVision、LATTE-MV

ステータス:ドラフト(2026-10-13)、実測値を反映。 表の数値は2026-10-13にダウンロードしたデータセットのコピーを、読み取り専用の一時ポッド(CPU、GPUなし)でffprobeとPythonの標準ライブラリを使用して実際に数えた値です。圧縮ファイルは解凍せず、内部のファイル一覧とラベルファイルのみを読み取りました。論文や公式ページの数値は「公式」として個別に記載しています。スクリプトと元の出力はリポジトリ docs/experiments/2026-10-13-tt-dataset-stats/ にあります。 作成ルール:実測データを基本とし、計測できなかったものは「未計測」と表示します。

目次

1. なぜ自分で数えるのか

論文のデータセット表は一度使われると再び確認されることはありません。しかし、モデルの数値はそのデータの性質をそのまま引き継ぎます。「ボールがない」と表示されたフレームにボールが映っていれば精度が誤って低下し、fpsが混在していれば「フレームあたりの移動量」といった基準がクリップごとに異なる意味を持ってしまいます。そのため、使用する前に自分で数えます。数えているうちにラベルの罠が明らかになります。

2. ひと目でわかる一覧

データセット 内容 規模(実測) 解像度・fps ボールラベル 音声 ライセンス
OpenTTGames 一つの体育館、サイドの固定カメラでの試合 動画12本、644,199フレーム、89.5分 1920×1080 · 120 イベント周辺のフレームのみ なし CC BY-NC-SA 4.0
Extended OpenTTGames 上記12本に打球・ラリー終了原因を追加 ラリー終了 281、打球 1,456 (同一動画) オリジナルそのまま なし CC BY-NC-SA 4.0
T3Set アマチュア多球練習、動画+ラケットセンサー+コーチの音声 選手32、ラウンドフォルダ387、動画734個(26.9GB) 1080p・60(公式) なし(センサーの打球時刻) あり CC BY-NC-SA 4.0
TT Sounds ラケット・テーブル・床の衝突音 15msサンプルwav 6,037、ラベル 5,702、元録音 149 音声のみ — 音声のみ CC BY-NC 4.0
RacketVision(卓球のみ) 国際中継におけるボール・ラケット5点 クリップ 780、50試合、170,027フレーム 1920×1080・25/30/50/59.94/60混在 あり(まばら) — コード MIT、元中継の権利不明
LATTE-MV 国際中継ラリークリップ+自動追跡結果 812試合、クリップ 23,781 640×360・30または29 自動追跡(人間のラベルではない) なし コード Apache-2.0、元中継の権利不明
BlurBall学習データ(公開分) オンライン試合動画のぼやけラベル 動画 463、マーカー 66,595行 大半が 1280×720・大半が 25 ぼやけの中心+角度・長さ 一部 表記なし

3. OpenTTGames:評価の基盤

TTNet論文(arXiv 2004.09927)と共に公開されたデータセットであり、TT Scoreの精度に関する数値はほぼすべてこのデータセットに基づいています。

動画

区分 本 フレーム 長さ
学習(game_1–5) 5 542,079 4,517秒(75.3分)
テスト(test_1–7) 7 102,120 851秒(14.2分)

すべて H.264、1920×1080、120fpsであり、 音声トラックはありません(ffprobeで12本すべて映像ストリームが1つ)。学習用動画は1本あたり3.9~10.8GBです。スマホでのリアルタイム処理は60fpsが上限であるため、私たちは偶数フレームのみを使用して60fpsに削減して評価します。

ラベル

試合ごとに1つのzipに3つの要素が含まれています。

試合 ボールマーカーフレーム ボールあり ボールなし bounce net empty_event
game_1 6,799 6,721 78 227 182 195
game_2 17,444 17,275 169 591 430 536
game_3 7,275 7,161 114 240 187 173
game_4 7,073 6,971 102 231 187 176
game_5 7,406 7,056 350 248 184 19
test_1 887 880 7 31 24 1
test_2 779 773 6 28 21 1
test_3 805 798 7 31 18 6
test_4 1,319 1,305 14 46 29 29
test_5 1,018 1,008 10 34 26 5
test_6 1,308 1,300 8 41 38 1
test_7 874 770 104 29 24 2
合計 52,987 52,018 969 1,777 1,350 1,144

イベントの合計4,271は公式ページの「イベント4,271件」と完全に一致します。数え方が正しいことの確認となります。

罠

  1. マーカーのないフレームは「ボールなし」ではなく「不明」である。 ボールマーカーはイベントの4フレーム前から12フレーム後までにしか存在しません(公式)。全644,199フレームのうち52,987フレーム、 8.2% です。マーカーのないフレームを「ボールなし」として数えると、モデルが検出した本物のボールがすべて不正解となり、精度が誤って大きく低下します。私たちのローダー(ttscore/data/openttgames.py)は両者を分けて格納します。
  2. test_7の「ボールなし」は信頼できない。 他のテスト試合の「ボールなし」は6~14個ですが、test_7だけ104個あります。そのうち41箇所では実際にボールが映っています(6箇所を目視で確認)。このためBlurBallのtest_7の精度が0.882となり、41箇所を除外すると0.9937になります(パート2)。
  3. 「net」の大部分はネットに当たったものではない。 名前とは異なり、ボールがネットの上を通過する瞬間に付けられたマーカーがほとんどです。その前後の水平速度の比が0.75~1.01であり、ボールはほとんど減速していません(パート5)。ネットに「引っかかった」ボールを見つけるには、Extendedのnet終了ラベルを使用する必要があります。
  4. empty_eventの分布が試合ごとに大きく異なる。 game_2は536個ですが、game_5は19個です。使用する前に意味を確認する必要があるラベルであるため、私たちは使用しません。

4. Extended OpenTTGames:ラリーがどのように終わったか

同じ12本に打球とラリー終了の原因を付与した拡張です(arXiv 2512.19327、github moamal01/table_tennis_data)。私たちの審判エンジンの正解データです。

ラベルは試合ごとに1つのJSON、 {"120fps 프레임": "값"} です。値は3種類が1つのファイルに混在しています。

種類 例 実測値
元のイベント bounce, net, empty_event 3,206(オリジナルよりも少ない — 下記の罠1)
打球 left_forehand_serve neutral left_foot_lifted loop 583 · serve 290 · push 279 · block 187 · flick 65 · chop 30 · smash 12 · lob 10
ラリー終了 right_out 281. out 140 · net 83 · winner 34 · not_hitting_ball 10 · miss_on_own_side 10 · double_bounce 4
不明 point, xright_… 2

論文ではラリー終了282件と報告されていましたが、原因別の合計は281です。実際に数えた値も281でした。このうち「誰がサーブしたか」まで分かるラリー275件を評価に使用します。

罠

  1. 同じフレームに2つのラベルを付けると一方が消える。 JSONのキーがフレーム番号であるため、バウンドがあったフレームに終了ラベルを付けるとバウンドが上書きされます(例:test_4の4530フレームのbounceがright_netに)。test_2には元のイベントが全くありません。そのため、バウンド・ネットの正解はこのファイルではなく、元のOpenTTGamesの events_markup.json から読み取ります。
  2. プレフィックスが示すプレイヤーが原因ごとに異なる。 READMEによると、プレフィックスは「ミス/ポイントを作った選手」とのことです。winnerとdouble_bounceはプレフィックスの選手がポイントを 獲得し、残りはプレフィックスの選手が 失います 。直前の打球側と対照して確認し(winner 34件中30、out 140件中129が一致)、not_hitting_ballは10件中8件がレシーブできなかった選手側でした。
  3. READMEの技術リストは6つだが、データには8つある。 smashとchopが追加で存在します。
  4. サウスポー(左利き)。 test_3・test_7に1人ずつ、test_5に2人います(README)。フォアハンド・バックハンドを画面の向きで推論すると間違えます。

5. T3Set:音声とセンサーがあるトレーニング映像

アマチュアの多球練習を2台のカメラとラケットセンサー(9軸IMU、100Hz)、コーチの音声で記録したデータセットです(KDD 2025、Zenodo)。28GBを分割zip(.zip + .z01–.z38)形式でダウンロードしますが、私たちは 結合したり解凍したりせず 、最後の分割ファイルのセントラルディレクトリのみを読み取ってファイル一覧を数えました。

項目 実測 公式
選手 32 32
ラウンド 387フォルダ 380
技術(ラウンドフォルダ数) topspin 90 · push 89 · pendulum 43 · short 42 · block 41 · attack 41 · flick 41 7種
動画 734個(mkv 699、mp4 35)、26.9GB 1080p 60fps 2台
コーチの音声 mp3 1,014 —
JSON(姿勢・センサーの整列・コーチのアドバイス) 2,689 —

動画ファイル(mkv)には音声(AAC 44.1kHz)が同じコンテナとして含まれています(2026-10-11確認)。動画・音声・センサーが揃っている珍しいデータであるため、パート6の音声実験に使用しました。

罠

  1. カメラフォルダ名にタイポがある。 大部分は remote(376)と right(354)ですが、 romote 1, rIGHT 2, rIght 1が混ざっています。フォルダ名でカメラを選択すると4つが静かに漏れてしまいます。
  2. ラウンド数が公式と異なる。 387対380。空のラウンドや重複が存在する可能性があるため、使用前に確認する必要があります(原因未確認)。
  3. センサーの時計と動画のずれがラウンドごとに異なる。 動画ファイル名(秒単位)とセンサー時刻のずれは−1.5秒から+3秒でした。「センサーの打球時刻 ±30ms」のような整列はそのまま信頼できません。
  4. ボールの座標ラベルがない。 ボール検出の精度を目視でのみ確認でき、多球練習であるため 床やカゴにある休憩中のボールが検出の29% を占めていました(120枚中35枚)。「プレイ中のボール」だけを数えると、精度は0.54でした。

6. TT Sounds:クリアな打撃音

テュービンゲン大学が公開したラケットとボールの衝突音データセットです(arXiv 2409.11760)。1つのzip(845MB)に元録音と15msの断片が含まれています。

項目 実測
元録音 wav / 15ms断片 wav 149 / 6,037
ラベル表(full.csv)の行 5,702(train/test 80/20分割の表もある)
表面 ラケット 3,396・テーブル 777・床 290・その他 1,239
ラケットの種類 10種類(攻撃型・守備型ブレード、スポンジの厚さ、平面・ロングピンプルラバー)。サンプル 207〜892個
ラケットサンプルの回転 無回転 1,879・バックスピン 991・トップスピン 526(READMEの表と同じ)
ラベル表が指す原音 115個

落とし穴

  1. セグメント数とラベル数が異なる。 wav 6,037個のうちラベル表にあるのは 5,702個であり、原音 149個のうちラベル表が指しているのは 115個です。フォルダ内のファイルをすべて使うと、ラベルのない音声が混ざります。
  2. 提供された分割は、同じ録音を両方に分けている。 隣接する 15ms のセグメントが学習とテストの両方に含まれるため、スコアが誇張されます。原音単位で分割すると 0.1〜0.8%p 低下しました(第6回)。
  3. ラケットではないサンプル 311個にも回転ラベルがある。 回転列の全体の合計が README の表と異なる理由です。「回転あり = ラケットの音」と仮定してはいけません。
  4. 静かな場所での近接録音である。 携帯電話のマイクや卓球場の反響とは異なります。第6回で見たように、実際の録音では効果が確認されませんでした。

7. RacketVision: ラケットの5点(卓球部分)

卓球・テニス・バドミントンの国際中継において、ボールの位置とラケットのバウンディングボックス・5点をアノテーションしたデータセットです(arXiv 2511.17045, AAAI 2026)。3種目の合計はクリップ 1,672、435,179フレームです(データセットのメタ情報)。私たちは卓球部分のみを取得しました。ラケットアノテーションの詳細な形状は第4回にあります。

項目 直接集計
クリップ / 試合 / 分割 780 / 50 / 学習 625・検証 69・テスト 86
フレーム / 長さ 170,027 / 3,878秒、クリップの長さの中央値 5.0秒(1.7〜5.16)
解像度 すべて 1920×1080
fps 25(209) · 60(201) · 50(191) · 30(112) · 59.94(67)
ボールの CSV 行 / 表示 19,495 / 16,961
ラケットが存在するアノテーションフレーム / ラケット数 6,648 / 8,060

落とし穴

  1. fps が5種類混ざっている。 同じ「フレームあたりの移動量」がクリップごとに異なる速度を意味します。私たちも取得時のメモに「60fps」と書いていましたが、今回集計してみて誤りであることが分かりました。時間ベースのルール(バウンド間隔 0.12秒など)を使用するには、クリップごとに fps を読み取る必要があります。
  2. メタデータの注釈数フィールドが空である。 dataset_info.json の ball_annotated_frames·racket_annotated_frames が卓球の 780クリップすべてで 0 です。実際の注釈はクリップ別の注釈ファイルにあります。
  3. アノテーションがまばらである。 アノテーションフレームの間隔の中央値が 10フレームです。毎フレーム正解があるわけではありません。
  4. 映像の権利。 アノテーションは MIT ライセンスと表記されていますが、映像は YouTube のプロの試合中継から切り抜かれたものです。私たちは内部研究にのみ使用し、フレームを公開しません。

8. LATTE-MV: 国際中継と自動追跡

国際試合の中継からラリーを切り抜き、ボール・ラケット・卓球台・選手の 3D 姿勢を自動追跡したデータセットです(arXiv 2503.20936, CVPR 2025)。公式によると、中継約 800時間から選別したラリーのやり取り 73,222個、約 26.7時間分です。

項目 直接集計
試合 / クリップ (mp4) 812 / 23,781(動画のみ 3.75GB)
クリップごと 動画、ボール CSV (Frame, Visibility, X, Y)、ラケット CSV、卓球台のコーナー、選手の 2D・3D キーポイント、シーン復元配列(フレーム × 91 × 3)、メタ JSON
解像度・fps(ランダム 30クリップ、ffprobe) 640×360 30クリップすべて・30fps 21、29fps 9
復元配列の fps・長さ(ランダム 300クリップ) 30fps 229、29fps 71・フレームの中央値 109、「使用可能なフレーム」の中央値 70
音声トラック(30クリップ) なし

落とし穴

  1. ボールの座標は人の手によるラベルではない。 データパイプラインの追跡結果です。ボールが隠れていても Visibility が 1 であり、座標が埋められています(BlurBall が「見逃した」20枚のうち 14枚はボールが見えていませんでした)。
  2. ブレ跡の端を指している。 BlurBall と異なると判定された 40枚のうち 25枚は、同じ跡のもう一つの端でした(第2回)。ラベルのルールが異なるデータでモデルを評価すると、その違いが誤差として現れます。
  3. 複製されたフレーム。 直前のフレームとほぼ同じフレームがクリップの中央値で 27% でした(2026-10-11 実測)。実際の fps が 30 より低い可能性があります。
  4. 映像の権利の不明確さ。 データカードは Apache-2.0 ですが、元のチュートリアル動画や中継動画の権利は記載されていません。内部テストにのみ使用します。

9. おまけ: BlurBall の学習データ(公開分)

第2回の BlurBall が何を見て学習したのか気になり、公開分を集計しました。

項目 直接集計 公式(論文)
録画 / 映像 フォルダ 26 / 映像 463 録画 26本、クリップ 443(学習 363 + テスト 80)
フレーム(アノテーション行) 66,595(ボール表示 58,547) 64,119
解像度 1280×720 363 · 1266×720 60 · 1920×1080 40 —
fps 25 222・30/29.97 139・60/59.94 67・23.98 10・その他 25 —
アノテーション列 Frame, Visibility, X, Y, theta, l ブレの中心 + 方向 + 半分の長さ

学習映像の半分近くが 25fps です。 シャッター速度が長く、ボールが大きくブレている映像から学習したことを意味しており、「ブレの中心」ラベルがなぜ必要だったのかにつながっています。映像数とフレーム数が論文と若干異なる理由は確認できていません。この映像リストが公開分割と同じか、OpenTTGames と重複しているかも不明です。そのため、OpenTTGames 上での BlurBall の数値を汎化性能として読み取ることはしません。

10. ライセンスと私たちのの方針

条件 データ
CC BY-NC-SA 4.0(非営利、表示、継承) OpenTTGames, Extended OpenTTGames, T3Set
CC BY-NC 4.0(非営利、表示) TT Sounds
アノテーションは寛容だが元映像の権利が不明 RacketVision (MIT), LATTE-MV (Apache-2.0)
表記なし BlurBall の学習データ

TT Lab は非営利サービスです。そのため、非営利条件のデータで学習したモデルも使用できます。代わりに、モデルごとにどの非営利データで学習したかを記録し、方針が変わった場合は自社データで再学習します。同一条件(SA)データを修正して公開する場合は、同じライセンスで公開します。元映像の権利が不明なデータは内部テストにのみ使用し、そのフレームを画面や記事に掲載しません。この記事にデータセットのフレーム画像がない理由もここにあります。

11. 再集計の方法

# 저장소 docs/experiments/2026-10-13-tt-dataset-stats/
python3 dataset_stats.py <데이터셋 뿌리> > results/dataset_stats_YYYY-MM-DD.txt   # ffprobe, numpy 필요
python3 label_stats.py <라벨 뿌리> > results/label_stats_YYYY-MM-DD.json          # 표준 라이브러리만

圧縮ファイルを解凍せず、リストとラベルファイルのみを読み込むことで、1GB 以内のメモリで完了しました。分割 zip (T3Set) は標準の zipfile が複数のファイルにまたがる zip を読み込めないため、最後のファイルのセントラルディレクトリのみを直接解析する小さなツール(なめらかな)を使います。experiments/sound/splitzip.py)を使います。

TT の一言。 「ボールなし」と記載されている場所にボールが映っていると、モデルが正解しても不正解と判定されます。データを自分で集計するのは面倒ですが、モデルを信じる前に正解ラベル自体が信用できるかを確認しなければなりません。

参考

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

コメント

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

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