[ディープラーニング] 畳み込み

畳み込み

畳み込み層を理解するには、まず畳み込み演算を理解する必要があります。
畳み込み (Convoluation) またはフィルタリング (filtering) は、画像処理の分野で画像の特徴を抽出するために昔から使われてきた手法です。
どのような働きをするかまず実際に見てみましょう。

画像はコンピューター上では配列で表現され、要素の値は画像のあるピクセルに対応しています。
下は MNIST から取ってきた数字5の手書き画像 (左)とコンピューター上での配列表現 (右)になります。
グレースケール画像なので、0~255の値で各ピクセルの濃淡を表現します。



ここでフィルタ (filter) またはカーネル (kernel) というものが登場します。
フィルタの各マス目は重みを持っています。



以下の 5×5 の画像を例にフィルタの処理の流れを説明します。



畳み込みでは、画像のフィルタが覆っている部分に対して、フィルタの重みと画像の値を乗算して足し合わせ、新しい値を生成します。これをフィルタをスライドさせながら行うことで新たな配列が得られます。
この配列は特徴マップ(feature map) と言われます。



畳み込み演算の数式表現



サイズが \(H_x \times W_x\) の画像に対して、サイズが \(H_f \times W_f\) フィルタを使用する畳み込みを考えます。

画像の要素は \(x_{ij}, (i = 1, 2, \cdots, H_x – 1, j = 1, 2, \cdots, W_x – 1)\)、フィルタの要素は \(w_{ij}, ( i = 1, 2, \cdots, H_f – 1, j = 1, 2, \cdots, W_f – 1\) と参照することにします。添字が0から始まっているのは、配列として画像を表現する際はインデックスが0から始まる事実に合わせたものです。
例えば、画像の一番左上のピクセルの値は \(x_{00}\) になります。

すると、畳み込みの結果、生成される特徴マップの各要素 \(u_{ij}\) は次のように計算できます。

\[{u_{ij}} = \sum\limits_{p = 0}^{{H_f} – 1} {\sum\limits_{q = 0}^{{W_f} – 1} {{x_{i + p,j + q}}\;{w_{pq}}} } \]

畳み込みをするとどうなるのか

畳み込みがどういう処理なのかはわかったと思うので、実際の画像に対して畳み込みを行い、どのような特徴マップが得られるのか見てます。

以下はそれぞれ sovel フィルタ、median フィルタと呼ばれるものをそれぞれ適用した例です。
sovel フィルタでは輪郭が抽出されており、一方 median フィルタでは全体的にぼんやりしたのがわかると思います。



コメントを残す

メールアドレスが公開されることはありません。