ディープラーニングやCNNという言葉は聞いたことがありますか。ディープラーニングのことを日本では「深層学習」と言います。「深層学習」とは簡単に言えばコンピュータが自分で学習するということです。これまでの「機械学習」は人間が特徴点を指摘する必要がありましたが、「深層学習」はコンピュータが自ら学んでいくという違いがあります。
その「深層学習」つまりはディープラーニングにおいてCNN(畳み込みニューラルネットワーク)が重要な役割を果たしています。特に画像処理ではなくてはならない仕組みです。
しかし、CNNと聞いても何のことは分からない人が多いと思います。そこでこの記事ではCNNの仕組みとそれが画像認識で使われる理由、さらにはCNNを使った事例について紹介します。
Contents
画像処理が必要とされる理由
CNNの説明に入る前にそもそもなぜ画像処理が必要なのでしょうか。画像処理を使わなくてもこれまで生活に支障が無かったわけですから、画像処理は無くても大丈夫だと考えるのは当然です。
しかし画像処理が正確にできることで便利になることがたくさんあります。例えばCT画像を考えてみましょう。これまで医師がCT画像を見て、異常があるかどうか判断してきましたが、これをコンピュータが代替できるようになります。
コンピュータであれば、これまでの画像データを全て読み込んで蓄積することができるので、実際のCT画像と照らし合わせて、異常があるかどうかの判断が人間よりも正確にできます。
また画像処理が正確にできることで、監視カメラに指名手配の容疑者が移っただけで、警察に知らせるというシステムを作ることも可能です。実際にこうしたシステムは使われており、コンサート会場に来た容疑者が逮捕されたという話もあります。
他にも個人を認証するために顔であれ、指紋であれ、画像処理が正確にできるかどうかが重要になってくるのです。
CNNとは?
先ほども述べたとおり、画像処理においてCNN(畳み込みニューラルネットワーク)が重要だと述べてきました。ではCNNとは簡単に言うとどのようなものなのでしょうか。CNNを理解するためにはニューラルネットワークについて理解する必要があります。
ニューラルネットワークとは人間の神経回路を真似た仕組みであり、神経がつながるように情報を伝達していく仕組みです。しかし、コンピュータには神経はないので、電子信号で行われます。
ニューラルネットワークは入力層、中間層、出力層に分かれており、入力層に入力されたデータが中間層を経由して出力層に出力されます。その際に、入力されたデータに重みを付けていきます。
伝わりやすい情報と伝わりにくい情報に重みをつけることで区別しているのです。そうして出力されたデータがあらかじめ用意されている教師データ(お手本のデータ)に近づくように重みの値を調整していくのです。
これがディープラーニングで使われるニューラルネットワークの基本です。こうしたやり方はこれまでも存在していましたが、その計算量の多さから実現できていませんでした。しかし、近年のコンピュータの処理速度の向上で実現できるようになったのです。
CNNは先ほどのニューラルネットワークの仕組みにおける中間層に畳み込み層とプーリング層を組み込んだ仕組みです。ここで使われる畳み込み層とプーリング層は1層ではなく、複数の層が組み込まれていくことになります。ではこの畳み込み層とプーリング層でどのようなことが行われているのでしょうか。
CNNのしくみ
CNNについての簡単な仕組みについてはすでに述べましたが、具体的にどのように画像処理をしているのでしょうか。ここではその処理の仕組みを簡単に説明することにします。
1.画像から特徴を抽出する
まず教師データ(お手本の画像)から特徴を抽出しなければなりません。特徴とはそれぞれの画像を小さい画像に分割されたものを言います。この特徴と入力された画像データが一致すれば同じ画像だと判断するわけです。
小さい画像に分割して特徴を抽出することで、画像全体を用いて一致するかどうかを検証するよりも正確に判断することができます。
2.畳み込み層で画像を畳み込む
入力された画像がお手本と同じ画像であるかどうかを判断するためには、お手本の画像のそれぞれの特徴が入力された画像と一致する必要があります。その際に入力された画像のどこに特徴が含まれているのか分からないので、画像全体のあらゆる部分で特徴の計算を行います。
この計算のことを畳み込みと言います。特徴は一つではないわけですから、それぞれの特徴で行われた畳み込みが画像のセットとしてできあがります。それを畳み込み層と言います。特徴の数が多ければそれだけ計算が増えるわけですから、これまでのコンピュータでは処理するのが難しく、採用されなかったというのが理解できると思います。
3.プーリング層で画像を集約する
プーリング層では先ほどの画像の特徴を維持したまま、画像を圧縮します(プーリング)。その結果、画像のピクセル数は4分の1程度に圧縮されます。先ほど畳み込み層で行われた画像の枚数はプーリング層を経由しても変わりませんが、それぞれの画像が4分の1程度に圧縮されますので、処理が簡単になるというわけです。
これらの処理の組み合わせは1回で終わるわけではありません。何層か繰り返されることが多いです。ただしプーリング層で画像を圧縮して処理が簡単にはなりますが、それが精度向上に必ずしもつながるわけではありません。それぞれの画像処理システムによってプーリング層の数が変わる場合もあります。
CNNとRNNはどう違うか
CNNは畳み込みニューラルネットワークのことであり、画像処理に使われる手法でした。一方でRNNという言葉もディープラーニングでは出てきます。RNNもニューラルネットワークの構造のひとつなのですが、それはどのようなものなのでしょうか。
RNNとは再帰型ニューラルネットワークと言い、自然言語の処理の分野で高い成果を上げています。これまでのニューラルネットワークはお互いの入力データが独立の状態で処理されていました。
しかし、文章を考えた時に、前に出てきた言葉と後ろの言葉は関連性がありますよね。つまり、それぞれの入力データが独立した状態では処理するのが難しいということです。そこで、ある出力データを別のニューラルネットワークの入力として使える再帰構造を利用したのがRNNです。
こうした仕組みを用いることで、より自然な文章が出力できるというわけです。このようにCNNとRNNは同じニューラルネットワークですが、仕組みも用途も全く違うということが分かります。
CNNが画像処理で使われる理由
CNNがなぜ画像処理で使われるようになったのでしょうか。その理由は画像の特徴を失わずに情報量の圧縮ができるようになったことです。写真など画像を扱う際に、容量が大きいとコンピュータの性能が悪いと処理が遅くなる経験をしたことがないでしょうか。
つまり情報量が圧縮されることで、処理速度も速くなり、コンピュータの性能が下がっても処理できるようになります。これまではスーパーコンピュータが必要だったものが、家庭用のコンピュータでも処理できるとなれば、かなり実用的だといえます。
また情報量が圧縮されるわけですから、これまでよりも多くの情報を処理できるという利点もあるのです。特に画像処理の場合、画像の情報量が多いのが一般的なので、こうした情報量の圧縮は有益なのです。
CNNを使った事例
CNNを使った事例は多くあります。ディープラーニングを使った画像処理にはほぼ使われているといっても間違いありません。今回はその中でも身近な事例を3つ挙げて、説明することにします。
Facebookのタグ付けシステムDeepFace
Facebookを使ったことがある方は分かると思いますが、顔写真に対してタグ付けをするシステムがあります。ここにCNNが使われています。どの写真がどの人の顔なのか判断することができるようになっているのです。
発表によれば、DeepFaceの2つの画像の顔の識別精度は97.25%であり、人間の97.53%とほぼ同じレベルでの識別が可能だと言われています。確かにFacebookを使っていると、その画像処理レベルの高さに驚かされるところがあります。CNNが顔の共通点を探して判別している成果だといえます。
ホットペッパービューティー
皆さんはホットペーパービューティーというアプリをご存知でしょうか。こちらはリクルートが運営するアプリですが、ここでCNNが使われています。具体的にはネイルの類似検索機能です。
ある特定のネイルの画像を選択した時に、その画像と類似のネイル画像を表示することで回遊率を上げる目的で作られました。つまりCNNを使って選択しているネイルの画像と似ているネイル画像を出力させているわけです。こうすることで、利用者もより自分の好みに合ったネイルを選択することが可能になります。
日本気象協会の降水量の予想
このようなところにもCNNが使われていたとは意外に感じるかもしれませんが、画像処理がさまざまなところで活用されている良い事例です。これまで20㎞四方で3時間ごとの予想しかできなかったものが、ディープラーニングを使うことで、5㎞四方で1時間ごとの予想ができるようになりました。
特にCNNを使ったことで、これまでスーパーコンピュータで計算できなかった処理が、一般的なコンピュータでもできるようになったと言います。台風が多い日本では、こうした降水量の予想がより正確になるのは多くの人にとって利益になっているといえます。
まとめ
これまでCNNが画像認識においていかに重要な技術であるのか説明してきました。近年、画像処理に対する需要は増えてきています。それが単に画像を識別するというだけでなく、犯罪の防止やCT写真の判定などにも使われています。
今後、車の自動運転が実用化されることになれば、画像処理がさらに重要になるのは間違いありません。ここで説明した画像処理技術はさらに進化する可能性があります。今後も最新のトレンドに注目しながら、新しい知識を吸収するようにしましょう。