Loading web-font TeX/Math/Italic

2013年5月11日土曜日

Mean Shiftの理論

in English

はじめに

 Mean Shiftの理論をまとめます。次回、OpenCVによる実践をまとめます。

理論

 d 次元空間内に観測点 \{\vec{x}_{i}|i=1,\cdots,n\} が与えられたとき、観測点の分布が作り出す密度分布関数 f(\vec{x}) を考えることができる。点が集中している場所では f(\vec{x}) の値は大きく、点がまばらな場所では小さい値を取る。
いま任意の観測点 \vec{x} を中心とする半径 h の球(超球)を考える。球内に存在する観測点の重心 \vec{x}_{\rm c} は、\vec{x} よりも密度の高い場所に存在する。
\vec{x}_{c}\vec{x} に置き換え同じ計算を繰り返せば、最初に指定した観測点は f(\vec{x}) の極大値へ向かって収束していくことが分る。 この振る舞いは文献1,2において厳密に証明されている。このように重心(平均値)への移動を繰り返すことにより、密度分布関数の極大値を検出する手法をMean Shiftと呼ぶ。

 点 \vec{x} を中心とする球内の重心 \vec{m}(\vec{x}) は、次式で定義される。 \begin{equation} \vec{m}(\vec{x}) = \frac{1}{|S_{h}(\vec{x})|}\sum_{\vec{x}_i \in S_{h}(\vec{x})}\;\vec{x}_{i} \end{equation}
ここで、S_{h}(\vec{x}) は点 \vec{x} を中心とする半径 h の球内に存在する観測点の集合を表す。|S_{h}(\vec{x})| は要素の数である。議論を一般化するため、上式を以下のように書き直す。 \begin{equation} \vec{m}(\vec{x}) = \frac{\sum_{i=1}^{n}\;K(\vec{x}_i;\;\vec{x},h)\;\vec{x}_i}{\sum_{i=1}^{n}\;K(\vec{x}_i;\;\vec{x},h)} \end{equation}
ここで、和は全ての観測点についてとることに注意する。K(\vec{x}_i;\;\vec{x},h) は次式で定義される量である。 \begin{eqnarray} K(\vec{x}_i;\;\vec{x},h)=\left\{ \begin{array}{} 1\;\; {\rm if}\;\;\|\vec{x}-\vec{x}_i\|\leq h\\ 0\;\; {\rm if}\;\;\|\vec{x}-\vec{x}_i\|\gt h \end{array} \right. \label{kernel} \end{eqnarray}
このとき、密度分布関数 f(\vec{x}) は次式で定義される。 \begin{equation} f(\vec{x})=\frac{1}{n\;V_{d}}\;\sum_{i=1}^{n}\;K(\vec{x}_i;\;\vec{x},h) \end{equation}
ここで、V_{d} は半径 hd 次元球の体積である。したがって次式が成り立つ。 \begin{equation} \int\;d\vec{x}\;f(\vec{x}) = 1 \end{equation}
K(\vec{x}_i;\;\vec{x},h) はカーネルと呼ばれる関数である。カーネルは式(\ref{kernel})以外の関数に拡張することができる。

 いま球対称なカーネル関数を考える。 \begin{equation} K(\vec{x}_i;\;\vec{x},h) = k\left(\left\|\frac{\vec{x}-\vec{x}_i}{h} \right\|^2\right) \end{equation}
k(x) をプロファイルと呼ぶ。このカーネルで定義される密度分布関数を f_{K}(\vec{x}) と書くことにすれば \begin{equation} \vec{\nabla}\;f_K(\vec{x})=\frac{2}{n\;V_d\;h^2}\;\sum_{i=1}^{n}\;k^{\prime}\left(\left\|\frac{\vec{x}-\vec{x}_i}{h} \right\|^2\right)\;\left(\vec{x}-\vec{x}_i\right) \end{equation}
を得る。ここで、k^{\prime}(x)=dk(x)/dxとした。g(x)=-k^{\prime}(x)を導入すると \begin{equation} \vec{\nabla}\;f_K(\vec{x})=\frac{2}{h^2}f_G(\vec{x})\;\vec{s}_G(\vec{x}) \end{equation}
を得る。 ここで、 \begin{equation} f_G(\vec{x})=\frac{1}{n\;V_{d}}\;\sum_{i=1}^{n}\;G(\vec{x}_i;\;\vec{x},h) \end{equation}
\begin{equation} \vec{s}_G(\vec{x})=\vec{m}_G(\vec{x})-\vec{x} \end{equation}
\begin{equation} m_G(\vec{x}) = \frac{\sum_{i=1}^{n}\;G(\vec{x}_i;\;\vec{x},h)\;\vec{x}_i}{\sum_{i=1}^{n}\;G(\vec{x}_i;\;\vec{x},h)} \end{equation}
\begin{equation} G(\vec{x}_i;\;\vec{x},h) = g\left(\left\|\frac{\vec{x}-\vec{x}_i}{h} \right\|^2\right) \end{equation}
である。 \vec{s}_G(\vec{x}) は、任意の点 \vec{x} から重心 \vec{m}_G(\vec{x}) へ向かうベクトルである。すなわち、注目している密度分布関数 f_K(\vec{x}) の勾配は、カーネル G を用いて計算される重心移動の方向に一致する。

 さて、関数 k(x) が次式で与えれるとき \begin{eqnarray} k(x)=\left\{ \begin{array}{} 1-x\;\; &{\rm if}&\;\;x\leq 1\\ 0\;\; &{\rm if}&\;\;x \gt 1 \end{array} \right. \end{eqnarray}
g(x) は以下のようになる。 \begin{eqnarray} g(x)=\left\{ \begin{array}{} 1\;\; &{\rm if}&\;\;x\leq 1\\ 0\;\; &{\rm if}&\;\;x \gt 1 \end{array} \right. \end{eqnarray}
すなわち、g から構成されるカーネル G(\vec{x}_i;\;\vec{x},h) は式(\ref{kernel})に等しい。 ここで定義されたカーネル K(\vec{x}_i;\;\vec{x},h) をEpanechnikovカーネル、G(\vec{x}_i;\;\vec{x},h) を福永カーネルと呼ぶ。福永カーネルによる重心移動の方向は、Epanechnikovカーネルにより定義される密度分布関数の勾配方向と一致する。

参考文献

  1. Mean Shift Analysis and Applications, D. Comaniciu and P. Meer, 1999 (pdf)
  2. Mean Shift: A Robust Approach Toward Feature Space Analysis, D. Comaniciu and P. Meer, 2002 (pdf)
  3. コンピュータビジョン2 最先端ガイド 第2章, アドコム・メディア株式会社

0 件のコメント:

コメントを投稿