画像処理でよく使われる畳み込みニューラルネットワークとは
この記事はこんな人にオススメです.
  • 人工知能について興味がある人
  • 畳み込みニューラルネットワークについてざっくりと理解したい人
  • 画像処理分野の解析手法についてざっと理解したい人

こんにちは.けんゆー(@kenyu0501_)です.
今回は,画像処理分野でよく使われる畳み込みニューラルネットワーク (CNN)についてざっくりと整理していきたいと思います.
時系列データの人工知能を用いた処理は,リカレントニューラルネットワーク(RNN)が主流なので,そちらを確認してください!


ペンのすけ

今日は,画像データを扱うのでCNNだぞ!

畳み込みニューラルネットワーク(Convolutional Neural Network)概要

CNNの概要や特徴などをまずは簡単に示します

CNNのあれこれ
  • 初期のモデル(ネオコグ二トロン)は1982年に,福島邦彦さんによって考え出された
  • 人間のもつ視覚野の神経細胞(S細胞とC細胞)の2つの働きを模したもの
  • 1998年に,ヤン・ルカン氏によってLeNetと呼ばれるモデルが考えられる
  • ネオコグ二トロンは勾配計算はしないが,LeNetはバックプロパゲーション(勾配計算)を行う
  • 畳み込みに用いるフィルターをどのようにすれば良いか学習する
  • 「位置ずれ」に強いので画像処理に適している
  • 2012年にILSVRCで圧倒的な精度で優勝したAlexNetが出てくる

CNN (Convolutional Neural Network)について

CNNは,通常のニューラルネットワークとよく似ています.
学習可能な重みとバイアスを持つニューロンで構成されているため,一般的なニューラルネットワークが理解できれば,それほど難しいものではありません.

CNNではただ単に,入力データが画像であるという点のみが異なります.
すなわち,内側の仕組みとして,CNN特有のコード化を理解できれば大丈夫です.

一般的なニューラルネットワークではなぜダメなの?

普通のニューラルネットワークでは,入力に単一ベクトルを受け取り,それを一連の隠れ層を通して,出力として吐き出されます.
各隠れ層は,1組のニューロン群で構成されており,その中の各ニューロンが前の隠れ層のすべてのニューロンに完全結合されています.
すなわち同じ層におけるニューロンは共に完全に独立して機能しているため,横への接続がありません.
最後の層は「出力層」と呼ばれており,分類設定では,クラススコアなどを表します.

一般的なニューラルネットワークでも画像データを取り扱うことは可能です.
その場合は,以下のように画像を平ら(例えば,3×3の画像マトリクスを9×1のベクトル)にすると,入力に対応することができます.

この方法でも情報量が少ない場合だと,一定の精度が獲得できる場合もありますが,全体を通して画素依存性を有する複雑な画像に関しては,ほとんど正確さを持たないことがあります.

ペンのすけ

画像データは縦横の情報に重要な意味がありますもんね!つまり空間的な情報を解析しないといけないのだよ!


CNNは,関連するフィルタを適用することで,画像内の空間的および時間的な依存関係を正常に取得できます.
つまり,縦横の情報がある2次元のまま,入力データとして扱うことことが可能です.
(厳密には,画像データは縦横の2次元の情報に加え,色の情報があるので,数値としては3次元になります.)

CNNのアーキテクチャー

CNNの役割は,予測に必要な重要な特徴を失うことなく,画像のイメージを処理しやすい形式に変換することです.
そのために,まず「畳み込み」という操作を行います.

畳み込みとは!?

畳み込みとは,画像から特徴を抽出する操作のことです.
これは,カーネルと呼ばれるフィルターをかけることで行います.

上の例で行くと.入力される画像データは5(高さ)×5(幅)×1(色情報)です.
緑で示したものがカーネルと呼ばれ,畳み込み操作を行うためのフィルタです.
上の例だとカーネルは,3×3×1のマトリクス(自由に設定できます)です.

これによって,特徴が抽出された右側のデータを特徴マップと言います.
(カーネルが9回シフトした結果得られた特徴情報です)

複数の色情報を有する画像の場合(RGBなど),カーネルもその色情報と同数の深さを有することになる.
例えば,赤,緑,青色の情報を持っているとすると,深さが3で,それにバイアスを足し合わせた特徴量に変換されることになる.

畳み込み演算の目的は,入力される画像データから,エッジなどの特徴を高い精度で抽出することです.
CNNでは,1つの畳み込み層に限定される必要はないです.
かつては,畳み込み層は,エッジやカラー,グラデーションの向きなどを抽出する層がありました.

また,畳み込み演算の操作には以下の2つのタイプがあります.

  1. 入力と比較して,畳み込み特徴の次元数が減少するもの.
  2. 次元数が増加するか,または同じままのもの.

畳み込みによる移動不変性!?

この畳み込み演算は,人間の視覚野が持つ局所受容野に対応しています.
つまり,移動不変性の獲得に貢献します.

ペンのすけ

人間は,数ピクセルずれた写真も認識できるよね!

人間なら,数ピクセルずれた画像や写真などから物体を認識することができますが,コンピュータでは少々厳しいです.
普通のニューラルネットワークであれば,数ピクセル異なるだけの入力データを違う画像だと判断させる場合はあります.
そういう面で,畳み込みの演算はフィルターを重ねて特徴抽出しているので,「位置ずれ」にものすごく強い手法になります.

ペンのすけ

これが,画像データに使われたりする理由だね!

プーリング

「プーリング」も「畳み込み」と似ている操作ですが,プーリングは特徴の空間サイズを縮小するための単純な役割を持ちます.
これは,データの次元削減を行なって,計算に必要な処理コストを下げる目的があります.
回転や位置ずれに対して優勢な特徴を抽出しているので,これも移動不変性に一躍かった操作です.

また,プーリングには,「maxプーリング」と「avgプーリング」の2種類があります.
それぞれ説明していきます.

maxプーリング

maxプーリングは,単純にカーネルの中の最大値を特徴として抽出します.
この操作も,畳み込みと同じく画像のずれに対して,ロバスト(頑健性)を持っています.

avgプーリング

一方で,avgプーリングというのは,カーネルの中の全ての数字の平均値をとったものです.
maxプーリングもavgプーリングも学習という概念はなく,決まった計算を淡々とやるものです.

全結合層 Fully Connected Layer (FC層)

CNNの一番最後の画像判別のところの層です.

これまでやってきた「畳み込み層」も「プーリング層」も基本は,入力画像の配列の形態のままです.
入力画像を分類(「ねこ」や「さる」など)するためには,どこがで画像の形態から,1次元出力ができる形態に変換する必要があります.

CNNでは,畳み込みと,プーリングがいくつか終わった後に,画像データを列ベクトルにフラット化します.
以下のような概念で多次元データをフラットにします.

フラットになれば,通常のフィードフォワードニューラルネットワーク(隠れ層・出力層)に引き継ぐことができます.

このように,CNNでは,フィードフォワードニューラルネットワークに受け渡す前に,入力画像の優勢な特徴を抽出したものになっているので,それらをソフトマックス法を用いて分類することができます.

最近のCNNの傾向は全結合層を用いない?

実は,最近のCNNの手法では,このFC層を使わないで分類を行うGlobal Average Poolingというものが使われています.
これは,1つの特徴マップに1つのクラスを対応させて分類する方法です.

また次回詳しく説明していきます.

CNNの代表的なアーキテクチャの紹介

現在,以下のようなCNNがあります.
それぞれ画像認識に置いて高い精度を得るために考案されていて,とても有名なものです.
名前だけ紹介しておきます!

  • LeNet
  • AlexNet
  • VGGNet
  • GoogLeNet
  • ResNet
  • ZFNet

今回は,長くなってきたので,また後ほど詳しく取り上げていきますね!
ではー!