ディープラーニングで笑顔を自動検知したい

ディープラーニングで笑顔を自動検知するまでの学習過程を綴っていきます。

畳み込みニューラルネットワーク

畳み込みニューラルネットワーク

ディープラーニングでは、画像認識や音声認識自然言語処理の分野で研究が進められているようですが、画像認識においてはCNN(Convolutional Neural Network)が高い画像認識率を達成しているようです。
今回のゴールを達成する上で必ず必要になると思われますので、こちらについても調べてみました。

CNNの構造

CNNの構造については以下のサイトが図入りで分かりやすいです。
CNN(畳み込みニューラルネットワーク)の仕組み

畳み込み

畳み込みとは元の画像から特徴点を抽出るする処理のこと


入力画像が5x5、畳み込みフィルタが3x3とした場合

f:id:amiami05:20190114210552p:plain

まずは左上(グレーになっている個所)に注目し、

f:id:amiami05:20190114210419p:plain

入力値とフィルタ値の掛け算を行って、すべて合算して、

f:id:amiami05:20190114210601p:plain

特徴マップを得ます。
活性化関数がReLU関数の場合、正ならばそのまま、負ならば0がセットされます。

f:id:amiami05:20190114210609p:plain

フィルタ適用範囲を1つ右にずらしてストライド1)、同様に計算を行います。

f:id:amiami05:20190114210621p:plain

同様に、右下まで進めていきます。

f:id:amiami05:20190115201129p:plain

f:id:amiami05:20190115201137p:plain

f:id:amiami05:20190115201144p:plain

パディング

畳み込みを行った場合、出力サイズ(特徴マップ)が小さくなってしまう。
これを防ぐための方法としてパディングがある。

f:id:amiami05:20190115201735p:plain

ストライド

フィルタのずらし方を変えることも可能

f:id:amiami05:20190115202017p:plain

プーリング

画像の情報を一気に捨ててサイズを小さくする

f:id:amiami05:20190115202445p:plain

f:id:amiami05:20190115202507p:plain

f:id:amiami05:20190115202519p:plain

f:id:amiami05:20190115202530p:plain

プーリング処理では、特徴マップの"ごく狭い領域"での最大値を取得して新たな特徴マップを作っており、これにより少々画像が変化しても同じ結果となるため画像の変化に強くなるらしい。

最後に

とりあえず、今後必要になりそうな言葉の意味について調べてみました。
従来ではこの特徴マップの作り方を人が設定していたようですが、CNNではコンピュータがこれをが自動抽出してくれます。これはとても画期的な事で、確かにこれを人がやるのはとてもじゃないけど無理と感じました。
今はライブラリを使えば簡単にCNNが使えるようなので、先人に感謝しつつ、学習を進めていきたいと思います。