🥊

連続した加速度データから「1打撃」を切り出す方法

に公開

私たちの研究室(Nislab)

https://nisk.doshisha.ac.jp/

アドベントカレンダー 23 日目~

https://nislab-advendcallender-2025.vercel.app/

はじめに

ボクシングやマスボクシングにおける打撃動作を機械学習で扱う際、
最も重要で、かつ難しい前処理が
「連続した動作データから、1打撃だけを正確に切り出すこと」です。

本記事では、

  • スマートウォッチの 3軸加速度データ
  • 連続した打撃・no-actionを含む時系列データ

を対象に、

「1打撃」をどのように定義し、どのように切り出したか

を、実験に基づいた方法としてまとめます。

また,使用したデータセットとしては、Wagnerらが公開しているものを使用しました。
https://www.kaggle.com/datasets/smartpunchteam/boxpunch-dataset


全体の流れ

本記事で扱う「1打撃切り出し」の流れは以下の通りです。

  1. 3軸加速度を前処理して合成加速度を作成
  2. 絶対閾値を超えるピークを検出
  3. 複数ピークがある場合に「同一打撃か」を判定
  4. ピーク中心から固定ウィンドウを切り出し
  5. 切り出した区間を「1打撃」と定義

① 3軸加速度の前処理と合成

ローパスフィルタ処理

スマートウォッチから取得した 3軸加速度(x, y, z) に対し、

  • 高周波ノイズの除去
  • 打撃に本質的な運動成分の抽出

を目的として、各軸にローパスフィルタを適用します。

合成加速度の計算

3軸加速度を以下の式で合成します。

|a(t)| = \sqrt{x(t)^2 + y(t)^2 + z(t)^2}

以降は、この 合成加速度波形を用いて処理を行います。


② 絶対閾値によるピーク検出

打撃と no-action のピーク値分布

実験データから、合成加速度のピーク値には以下の傾向がありました。

  • punch : 約 40〜140 g
  • no-action : 約 10〜25 g

この差を利用し、打撃らしいピークを検出します。


閾値探索による最適値の決定

  • 閾値範囲:0〜150
  • 各閾値で Precision / Recall / F1-score を算出

その結果:

  • ✅ 最適ピーク閾値 : 28.4277
  • ✅ Precision : 0.999
  • ✅ Recall : 0.9961
  • ✅ F1-score : 0.9976

本研究では扱いやすさを考慮し、
閾値 = 28 を採用します。


③ 1打撃内に複数ピークが存在する問題への対処

問題設定

実際の打撃動作では、

  • 加速
  • 減速
  • インパクト前後

などにより、1打撃の中に複数のピークが現れることがあります。

ここで重要なのは、

複数ピークが「別の打撃」か「同一打撃の内部構造」か

を判定することです。


3-1. 局所ピークの定義

局所ピークは以下の条件で定義します。

|a(i)| > |a(i-1)| \land |a(i)| > |a(i+1)|

さらに、

  • 絶対閾値 = 28
  • prominence ≥ 3

を満たすもののみをピークとして採用します。


prominence とは?

prominence とは、

ピークの高さから、左右の最も低い谷までの差

を表す指標です。

prominence の検討結果

  • prominence = 2
    • ノイズを拾いすぎ(ピーク過検出)
  • prominence = 5
    • ピークを消しすぎ(検出漏れ)
  • prominence = 3, 4
    • 自然な1打撃の内部構造を捉える

👉 本研究では prominence = 3 を採用しました。


3-2. 局所ピーク数とピーク間距離の分析

対象打撃数

  • punch データ数:5948

局所ピーク数分布

  • min : 0
  • max : 5
  • mean : 1.95

ピーク間距離(samples)

  • min : 5
  • mean : 14.1
  • max : 49
  • 95% : 26
  • 99% : 32


同一打撃とみなす基準

この結果から、

32サンプル以内に出現する複数ピークは、同じ1打撃の内部構造

と定義しました。


④ ピーク中心から固定ウィンドウを切り出す

固定ウィンドウとは?

ピークを中心に、

  • 前後に一定時間のデータを含めることで
  • 純粋な打撃動作のみを切り出す

ための方法です。


ウィンドウ幅の検討

第一候補

  • 0.5〜0.7 秒(50〜70 samples)

理由:

  • ピーク間距離の分析より
  • 1打撃中のピーク活動は ±0.3 秒以内に収まるため

次の実験:ウィンドウ幅と分類精度

  • ウィンドウ幅:10〜150 samples
  • 分類モデル:1D-CNN


⑤ この区間を「1打撃」と定義する

最終的に、

  • 絶対閾値で検出されたピーク
  • 同一打撃と判断された複数ピーク
  • ピーク中心の固定ウィンドウ

から切り出された区間を、

「1打撃データ」

として定義します。


おわりに

本記事では、

  • 経験的ではなく
  • 統計・実験に基づいて

「1打撃」を定義・切り出す方法を紹介しました。

このセグメンテーションは、

  • 打撃種類分類
  • 打撃検出
  • 判定AI・スコアリング

など、あらゆる後段の機械学習処理の土台になります。

NISLab 小板・小比賀 研究室

Discussion