ステータス:ドラフト(2026-10-13)、実測値を反映。 表の数値は2026-10-13にダウンロードしたデータセットのコピーを、読み取り専用の一時ポッド(CPU、GPUなし)でffprobeとPythonの標準ライブラリを使用して実際に数えた値です。圧縮ファイルは解凍せず、内部のファイル一覧とラベルファイルのみを読み取りました。論文や公式ページの数値は「公式」として個別に記載しています。スクリプトと元の出力はリポジトリ
docs/experiments/2026-10-13-tt-dataset-stats/にあります。 作成ルール:実測データを基本とし、計測できなかったものは「未計測」と表示します。
目次
- 1. なぜ自分で数えるのか
- 2. ひと目でわかる一覧
- 3. OpenTTGames:評価の基盤
- 4. Extended OpenTTGames:ラリーがどのように終わったか
- 5. T3Set:音声とセンサーがあるトレーニング映像
- 6. TT Sounds:クリアな打撃音
- 7. RacketVision:ラケット5点(卓球部分)
- 8. LATTE-MV:国際中継と自動追跡
- 9. おまけ:BlurBall学習データ(公開分)
- 10. ライセンスと我々の方針
- 11. 再度数える方法
- 参考文献
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つの要素が含まれています。
ball_markup.json:{"프레임": {"x": …, "y": …}}xとyが −1 の場合、「ボールなし」。events_markup.json:{"프레임": "bounce" | "net" | "empty_event"}.segmentation_masks/*.png:人・テーブル・スコアボードをチャンネルとして塗りつぶしたマスク。 ボールマーカーが存在するフレームと正確に同数が含まれています。
| 試合 | ボールマーカーフレーム | ボールあり | ボールなし | 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件」と完全に一致します。数え方が正しいことの確認となります。
罠
- マーカーのないフレームは「ボールなし」ではなく「不明」である。 ボールマーカーはイベントの4フレーム前から12フレーム後までにしか存在しません(公式)。全644,199フレームのうち52,987フレーム、 8.2% です。マーカーのないフレームを「ボールなし」として数えると、モデルが検出した本物のボールがすべて不正解となり、精度が誤って大きく低下します。私たちのローダー(
ttscore/data/openttgames.py)は両者を分けて格納します。 - test_7の「ボールなし」は信頼できない。 他のテスト試合の「ボールなし」は6~14個ですが、test_7だけ104個あります。そのうち41箇所では実際にボールが映っています(6箇所を目視で確認)。このためBlurBallのtest_7の精度が0.882となり、41箇所を除外すると0.9937になります(パート2)。
- 「net」の大部分はネットに当たったものではない。 名前とは異なり、ボールがネットの上を通過する瞬間に付けられたマーカーがほとんどです。その前後の水平速度の比が0.75~1.01であり、ボールはほとんど減速していません(パート5)。ネットに「引っかかった」ボールを見つけるには、Extendedのnet終了ラベルを使用する必要があります。
- 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件を評価に使用します。
罠
- 同じフレームに2つのラベルを付けると一方が消える。 JSONのキーがフレーム番号であるため、バウンドがあったフレームに終了ラベルを付けるとバウンドが上書きされます(例:test_4の4530フレームのbounceがright_netに)。test_2には元のイベントが全くありません。そのため、バウンド・ネットの正解はこのファイルではなく、元のOpenTTGamesの
events_markup.jsonから読み取ります。 - プレフィックスが示すプレイヤーが原因ごとに異なる。 READMEによると、プレフィックスは「ミス/ポイントを作った選手」とのことです。winnerとdouble_bounceはプレフィックスの選手がポイントを 獲得し、残りはプレフィックスの選手が 失います 。直前の打球側と対照して確認し(winner 34件中30、out 140件中129が一致)、not_hitting_ballは10件中8件がレシーブできなかった選手側でした。
- READMEの技術リストは6つだが、データには8つある。 smashとchopが追加で存在します。
- サウスポー(左利き)。 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の音声実験に使用しました。
罠
- カメラフォルダ名にタイポがある。 大部分は
remote(376)とright(354)ですが、romote1,rIGHT2,rIght1が混ざっています。フォルダ名でカメラを選択すると4つが静かに漏れてしまいます。 - ラウンド数が公式と異なる。 387対380。空のラウンドや重複が存在する可能性があるため、使用前に確認する必要があります(原因未確認)。
- センサーの時計と動画のずれがラウンドごとに異なる。 動画ファイル名(秒単位)とセンサー時刻のずれは−1.5秒から+3秒でした。「センサーの打球時刻 ±30ms」のような整列はそのまま信頼できません。
- ボールの座標ラベルがない。 ボール検出の精度を目視でのみ確認でき、多球練習であるため 床やカゴにある休憩中のボールが検出の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個 |
落とし穴
- セグメント数とラベル数が異なる。 wav 6,037個のうちラベル表にあるのは 5,702個であり、原音 149個のうちラベル表が指しているのは 115個です。フォルダ内のファイルをすべて使うと、ラベルのない音声が混ざります。
- 提供された分割は、同じ録音を両方に分けている。 隣接する 15ms のセグメントが学習とテストの両方に含まれるため、スコアが誇張されます。原音単位で分割すると 0.1〜0.8%p 低下しました(第6回)。
- ラケットではないサンプル 311個にも回転ラベルがある。 回転列の全体の合計が README の表と異なる理由です。「回転あり = ラケットの音」と仮定してはいけません。
- 静かな場所での近接録音である。 携帯電話のマイクや卓球場の反響とは異なります。第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 |
落とし穴
- fps が5種類混ざっている。 同じ「フレームあたりの移動量」がクリップごとに異なる速度を意味します。私たちも取得時のメモに「60fps」と書いていましたが、今回集計してみて誤りであることが分かりました。時間ベースのルール(バウンド間隔 0.12秒など)を使用するには、クリップごとに fps を読み取る必要があります。
- メタデータの注釈数フィールドが空である。
dataset_info.jsonのball_annotated_frames·racket_annotated_framesが卓球の 780クリップすべてで 0 です。実際の注釈はクリップ別の注釈ファイルにあります。 - アノテーションがまばらである。 アノテーションフレームの間隔の中央値が 10フレームです。毎フレーム正解があるわけではありません。
- 映像の権利。 アノテーションは 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クリップ) | なし |
落とし穴
- ボールの座標は人の手によるラベルではない。 データパイプラインの追跡結果です。ボールが隠れていても Visibility が 1 であり、座標が埋められています(BlurBall が「見逃した」20枚のうち 14枚はボールが見えていませんでした)。
- ブレ跡の端を指している。 BlurBall と異なると判定された 40枚のうち 25枚は、同じ跡のもう一つの端でした(第2回)。ラベルのルールが異なるデータでモデルを評価すると、その違いが誤差として現れます。
- 複製されたフレーム。 直前のフレームとほぼ同じフレームがクリップの中央値で 27% でした(2026-10-11 実測)。実際の fps が 30 より低い可能性があります。
- 映像の権利の不明確さ。 データカードは 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 の一言。 「ボールなし」と記載されている場所にボールが映っていると、モデルが正解しても不正解と判定されます。データを自分で集計するのは面倒ですが、モデルを信じる前に正解ラベル自体が信用できるかを確認しなければなりません。
参考
- OpenTTGames: https://lab.osai.ai/, TTNet https://arxiv.org/abs/2004.09927
- Extended OpenTTGames: https://arxiv.org/abs/2512.19327, https://github.com/moamal01/table_tennis_data
- T3Set: https://zenodo.org/records/15516144, https://github.com/jima-cs/t3set
- TT Sounds: https://github.com/cogsys-tuebingen/tt_sounds
- RacketVision: https://arxiv.org/abs/2511.17045, https://huggingface.co/datasets/linfeng302/RacketVision
- LATTE-MV: https://arxiv.org/abs/2503.20936, https://huggingface.co/datasets/ember-lab-berkeley/LATTE-MV
- BlurBall: https://arxiv.org/abs/2509.18387