KDOG Notebook

どうも、古くからの友人です。

Local Binary Patternと距離関数 - KNNを用いたMNISTの分類

概要

Local binary pattern(LBP)は画像認識に用いられる特徴量の1つである。MNISTのデータについてLBPの特徴量抽出を実行し、得られた特徴量を用いてKNNのクラス分類を行った。クラス分類ではcosine類似度、ユークリッド距離、カイ二乗距離、ヒストグラム交差およびBhattacharyya距離を距離関数として用い、結果を比較した。

備考: 自分で書いたコードに不備があったため、修正した。それに伴い、結果に示した図も再計算後の図に差し替えた。(2017/12/27)

LBP

LBPでは3x3の画素領域に対して2値化をおこない、得られた2進数を10進数に変換して画素領域の特徴量とする。2値化については中心画素の値を参照値とする方法と領域の平均値を参照値とする方法があり、今回は平均値を用いて2値化をおこなった。注目画素の値が参照値以上または未満のときに1または0の値を割り当てる。2値化で得られた8桁の2進数を10進数に変換して得られた値が領域の特徴量である。したがって、取り得る値は0から255の整数値となる。この操作を画像全体にわたっておこない、得られた数値を256本のビンからなるヒストグラムとして表現したものが画像のLBPである。ヒストグラムの高さを要素に持つ256次元のベクトルをLBP特徴ベクトルとして、学習に用いられる。下図はMNISTの画像をLBPで変換した場合の例である。ヒストグラムは高さの総和が1になるように正規化されている。また、図は$y$軸について0から0.05までしか示していない。

f:id:kdog08:20171227142606p:plain

f:id:kdog08:20171227142620p:plain

距離関数

LBPによる変換で得られたヒストグラム(256次元のベクトル)間の距離は以下の5種類の関数を用いて計算した。

$$\begin{eqnarray} \frac{{\bf a} \cdot {\bf b}}{||{\bf a}||_2 ||{\bf b}||_2} \end{eqnarray}$$

  • Euclidean distance

$$\begin{eqnarray} ||{\bf a} - {\bf b}||_2 \end{eqnarray}$$

  • Chi-square distance

$$\begin{eqnarray} \sum_i \frac{({\bf a}_i - {\bf b}_i)^2}{{\bf a}_i + {\bf b}_i} \end{eqnarray}$$

  • Histogram intersection

$$\begin{eqnarray} \frac{\sum_i min(H_{{\bf a}, i}, H_{{\bf b}, i})}{\sum_i H_{{\bf a}, i}} \end{eqnarray}$$

  • Bhattacharyya distance

$$\begin{eqnarray} -\ln\sum_i \sqrt{p({\bf a}_i) p({\bf b}_i)} \end{eqnarray}$$

KNNの結果

MNISTデータセットのうち16,000枚の画像を学習用、4,000枚を検証用として用いた。下図は検証用データについて5つの距離関数を用いたときのF1値をまとめたものである。調べた近傍データの数(パラメータk)は$k=(1, 5, 10, 15, 20, 30, 50, 100)$である。

f:id:kdog08:20171227142631p:plain