SourceTracker の互換ノード. SourceTracker ではしきい値より近い到来方向の音源に対し同一音源 ID を付与するが, 本ノードでは到来方向の角度に基づきパーティクルフィルタによるクラスタリングを行い ID を付与するため, SourceTracker よりロバストな音源追跡が可能である. 一方で,計算コストは SourceTracker に対して増大する. パーティクルの状態遷移モデルにはランダムウォークを用いた非線形のモデル化が行われているが, そのため推定結果は毎回同じにはならないことに注意が必要である. 音源推定位置は毎フレーム更新される.
無し.
どんなときに使うのか
LocalizeMUSIC などの音源定位ノードによって定位された音源の到来方向は, 離散値となり,また変動するため音源定位結果の追跡が必要となる. SourceTrackerPF では,しきい値より高いパワーを持つ音源に対して 到来方向情報を利用し,パーティクルフィルタによるクラスタリングを行い, 各パーティクルグループに音源 ID を付与する.
移動音源の追跡がSourceTracker でうまくいかない場合に用いるとよい. SourceTracker よりロバストな音源追跡が可能となる一方で 計算コストはSourceTracker に対して増大する. パラメータの1つであるパーティクル数を小さくすることで計算処理時間 を削減できる.推定精度とのトレードオフを考慮し調整するとよい.
典型的な接続例
通常は,ConstantLocalization ,LocalizeMUSIC などの音源定位ノードの出力を 本ノードの入力端子に接続する. すると適切な 音源 ID が定位結果に付加されるので, 音源定位に基づく音源分離ノード GHDSS などや音源定位結果の表示ノード (DisplayLocalization )に接続する.
図6.49に接続例を示す.
入力
: Vector<ObjectRef> 型. 音源 ID が振られていない音源定位結果.
出力
: Vector<ObjectRef> 型. 音源 ID を与えた音源定位結果.
パラメータ
パラメータ名 |
型 |
デフォルト値 |
単位 |
説明 |
THRESH_SOURCE_POWER |
音源の MUSIC パワーがこれより小さければ無視. |
|||
TOTAL_PARTICLE |
1000 |
散布されるパーティクルの数. |
||
SOURCE_MAX |
2 |
最大音源数. |
||
ANOTHER_SOURCE |
0.00001 |
同一音源とみなすパーティクルグループの尤度閾値. |
||
IGNORE_SOURCE |
0.00001 |
新音源生成の尤度閾値. |
||
REMOVE_SOURCE |
150 |
[frame] |
パーティクルグループの生存期間. |
|
OUTPUT_RANGE |
3.0 |
[deg] |
グループ近傍のパーティクルだとみなす角度範囲. |
|
LIKELIHOOD_SIGMA |
1.0 |
[deg] |
観測値の尤度を求める際に仮定する確率分布の分散. |
|
STATE_UPDATE_SIGMA |
1.0 |
[deg] |
ランダムウォークの分散. |
|
SUM_W |
0.4 |
発散回避パラメータ. |
||
HISTORY_LOG |
false |
ログを表示. |
: float 型. 音源定位結果を無視すべきノイズか否かを,そのMUSIC パワーで判定する. MUSICパワーが THRESH より小さければノイズであると判断し, その定位結果は出力には反映されなくなる. 小さくしすぎるとノイズを拾い,大きくしすぎると目的音の定位が困難になるので, このトレードオフを満たす値を見つける必要がある.
: int 型. 計算に使用するパーティクルの総数.数を増やすと計算時間が増えるが少なすぎると確率分布の推定精度が悪くなる.
: int 型. 最大音源数.最大音源数を増やしてもパーティクルの総数は増加しない.パーティクルを分割して利用する.
: float 型. パーティクルグループ内の最大尤度がこの値以下になると観測値との対応付けを終了する.
: float 型. すべてのパーティクルグループについて,設定値以下の尤度であったら,新音源を生成する準備を行う.
: int 型. 観測値と対応付けがなされていないパーティクルグループの生存フレーム数.
: float 型. 近傍のパーティクルだと認識するための範囲. パーティクルグループの重心からの角度範囲. この範囲内のパーティクルが当該パーティクルグループに含まれものとして計算される.
: float 型. 尤度算出パラメータ. 仮定される確率分布の分散. 分散を大きくとりすぎると観測値によらず尤度が高くなってしまい,小さくしすぎると尤度が低くなってまい発散する.
: float 型. 状態遷移時のランダムウォークの分散. ランダム値は正規分布に基づく.
: float 型. 出力値に各パーティクルに対して重みづけを行うかどうかの閾値. 重要度が小さすぎる場合計算結果が発散するため,重みづけ値の総和が閾値より小さい場合はグループ内のパーティクルの平均値を出力する.
: bool 型. パーティクルグループの履歴ログの表示 / 非表示.
入力された音源 ID が付与されていない音源定位結果について, 初めにパラメータ THRESH_SOURCE_POWER 未満であるかの判定が行われる. MUSIC パワーがしきい値未満である定位結果についてはノイズであるとみなされ破棄される.
THRESH_SOURCE_POWER以上の音源定位結果については以下のパーティクルフィルタに基づく音源追跡方法により, 音源IDの付与,音源方向の推定が行われる.
パーティクルフィルタによる音源追跡
パーティクルフィルタでは, 内部状態 $\boldsymbol {x}(t)$ の遷移モデル $p(\boldsymbol {x}(t)\, |\, \boldsymbol {x}(t-1))$ と 観測モデル $p(y(t)\, |\, \boldsymbol {x}(t))$ を確率的な表現として定義する. なお $y(t)$ は観測ベクトルを表す. $i$ 番目のパーティクルは内部状態 $\boldsymbol {x}_ i(t)$ とそのパーティクルが 音源追跡結果にどの程度貢献するかを示す重要度 $\boldsymbol {w}_ i(t)$ を保持している. 重要度は一般に尤度して定義される.
パーティクルフィルタの処理を以下に示す.本ノードの処理は初期化,音源生成・消滅チェック,重要度サンプリング,選択,出力の5つのステップで構成される.
Step 1 - 初期化
初期化では,すべてのパーティクルを一様かつランダムに分布させる また,複数の音源を扱うためにパーティクルグループを導入し,重要度 $\boldsymbol {w}_ i$ を下記のように定義している.
$\displaystyle \sum _{i\in P_ k} w_ i $ | $\displaystyle = $ | $\displaystyle 1 \label{eqn:iniWi} $ | (19) | ||
$\displaystyle \sum _{k=1}^ S N_ k $ | $\displaystyle = $ | $\displaystyle N \label{eqn:iniSNK} $ | (20) |
ここで,$N_ k$ は $k$ 番目のパーティクルグループ $P_ k$ のパーティクルの数,$S$ は音源数を,$N$ はパーティクルの総数である.
Step 2 - 音源生成・消滅チェック
この Step は複数音源を扱うための Step である. パーティクルグループ $P_ k$ の内部状態は下記のように定義される.
$\displaystyle \hat{\boldsymbol {x}}_ k(t) $ | $\displaystyle = $ | $\displaystyle \sum _{i\in P_ k} \boldsymbol {x}_ i \cdot w_ i(t) \label{eqn:check} $ | (21) |
時刻 $t$ にける $j$ 番目の観測を $\boldsymbol {y}_ j$,$\boldsymbol {y}_ j$ と $\hat{\boldsymbol {x}}_ k(t)$ がなす角を $\angle \theta $, パラメータ ANOTHER_SOURCE から求められる角度の閾値を $\angle \theta _{th}$ とした場合, 以下の処理が行われる.
$\angle \theta < \angle \theta _{th}$ であれば,$\boldsymbol {y}_ j$ を $P_ k$ にアソシエートする.
$\boldsymbol {y}_ j$ に対応するパーティクルグループが見つからない場合,新規にパーティクルグループを生成する.
パーティクルグループ $P_ k$ にアソシエートする観測が REMOVE_SOURCE で指定される時間以上得られなかった場合,$P_ k$ は消滅する.
Step 3 - 重要度サンプリング
重要度サンプリングは以下の流れで行われる.
遷移モデル $p(\boldsymbol {x}(t)|\boldsymbol {x}(t-1))$ を用いて,$\boldsymbol {x}_ i(t-1)$ から,状態 $\boldsymbol {x}_ i(t)$ を推定する.
重要度 $w_ i(t)$ を式(25) を用いて更新する.
$\boldsymbol {x}_ i(t)$ の要素,音源方向の方位角 $\theta _ i(t)$,仰角 $\phi _ i(t)$ の遷移モデルは,ランダムウォークの過程に基づき,以下のように定義される.
$\displaystyle \theta _ i(t) $ | $\displaystyle = $ | $\displaystyle \theta _ i(t-1) + r_\theta $ | (22) | ||
$\displaystyle \phi _ i(t) $ | $\displaystyle = $ | $\displaystyle \phi _ i(t-1) + r_\phi \label{eqn:randum} $ | (23) |
$r_*$ は正規分布に基づく乱数である.分散はパラメータ STATE_UPDATE_SIGMA で指定する.
尤度の定義は $\boldsymbol {x}_ i(t)$ と $\boldsymbol {y}_ j$ のなす角を $\angle \psi $ とすると,
$\displaystyle l(t) $ | $\displaystyle = $ | $\displaystyle exp\left( - \frac{\angle \psi ^2}{2R} \right) \label{eqn:likelihood} $ | (24) |
となり,最後に$w_ i$を下記の式で更新する.
$\displaystyle w_ i(t) $ | $\displaystyle = $ | $\displaystyle l(t) \cdot w_ i(t-1) \label{eqn:wupdate} $ | (25) |
Step 4 - 選択
重要度 $w_ i$ に応じて,パーティクルの更新を行う.
$i \in P_ k$ を満たす $i$ に対するパーティクルの数は以下の式で更新される.
$\displaystyle N_(k_ i) $ | $\displaystyle = $ | $\displaystyle round(N_ k \cdot w_ i) \label{eqn:selction1} $ | (26) |
この場合,$R_ k$ 個のパーティクルが更新されないままとなっている.
$\displaystyle R_ k $ | $\displaystyle = $ | $\displaystyle N_ k - \sum _{i\in P_ k} N_(k_ i) \label{eqn:selction2} $ | (27) |
これらのパーティクルも,残差重みパラメータ $R_(w_ i)$ に従って分配される.
$\displaystyle R_(w_ i) $ | $\displaystyle = $ | $\displaystyle w_ i - N_(k_ i) \Big/ \sum _{j\in P_ k} N_(k_ j) \label{eqn:selction3} $ | (28) |
Sampling Importance Resampling (SIR) アルゴリズムを用いている.
Step 5 - 出力
更新後のパーティクルの密度から事後確率 $p(\boldsymbol {x}(t) \ | \ \boldsymbol {x}(t))$ を推定する.
音源 $k$ に対するパーティクルグループの内部状態は式(21) によって推定される.
Step2 から Step2 を音源の追跡が終了するまで繰り返す.
各パーティクルグループの $\hat{\boldsymbol {x}}_ k(t)$ を音源位置の推定結果とし,出力する.
音源 ID はパーティクルグループごとに付与され,同一のパーティクルグループでは音源 ID が引き継がれる.
(1) K. Nakadai, K. Nakajima, M. Murase, H. Okuno, Y. Hasegawa and H. Tsujino: “Tracking of Multiple Sound Source by Integration of Robot-Embedded and In-Room Microphone Arrays”, Journal of the Robotics Society of Japan, Vol.25, no.6 (2007).