ディープラーニング実践入門 ~ Kerasライブラリで画像認識をはじめよう!

ディープラーニング(深層学習)に興味あるけど「なかなか時間がなくて」という方のために、コードを動かしながら、さくっと試して感触をつかんでもらえるように、解説します。

ディープラーニング実践入門 ~ Kerasライブラリで画像認識をはじめよう!

はじめまして。宮本優一と申します。

最近なにかと話題の多いディープラーニング(深層学習、deep learning)。エンジニアHubの読者の方でも、興味ある人は多いのではないでしょうか。

しかし、ディープラーニングについて周りのエンジニアに聞いてみると、

「なんか難しそう」
「なかなか時間がなくて、どこから始めれば良いかも分からない」
「一回試してみたんだけど、初心者向けチュートリアルMNISTなど)を動かして挫折しちゃったんだよね」

という声が聞こえてきます。

そこで! この記事では、そうした方を対象に、ディープラーニングをさくっと試して感触をつかんでもらえるよう、コードを動かしながら解説したいと思います(そのため数式などの厳密な解説は省かせていただきます)

最後まで試していただけると、自分で用意したデータセットで画像認識ができるようになっているはず! です。

はじめに ― 私がディープラーニングで開発した「顔認識」システム

最初に少しだけ自己紹介をさせてください。私は、新卒でデジタルカメラなどを作っている会社に入社し、研究開発部門で画像処理や機械学習のアルゴリズム開発を行ってきました。

5年半ほど勤めた後に転職し、現在はPARTYという会社でリサーチエンジニアとして働いています。PARTYは「最新テクノロジーとストーリーテーリングを融合し、未来の体験をデザインする会社」をスローガンに、さまざまなプロジェクトに取り組んでいます。

自社プロダクトのひとつ、世界初の犬用LEDベスト
1
日建設計、良品計画、PARTYの3社が中心となって開発した、成田空港第3ターミナルの空間デザイン

そんな私が入社して作ったのが、Deeplooksというサービスです。これは、顔写真をアップロードすると、その顔の「美しさ」を5点満点で点数付けしてくれるというものです(ジョークとして楽しんでいただけると幸いです)

数万枚の画像に対して人間が点数付けしたデータを、ディープラーニングを用いて学習した結果、「5点の顔」と「2点の顔」の違いをコンピュータが認識して、点数付けできるようになりました。

現在は、このシステムを顔以外にも応用した、新しい認識システムを開発中です。

ディープラーニングとは何か?

最初に、ディープラーニングとはどんなものかを簡単に説明しておきたいと思います。分かっている方は、先の「ディープラーニングライブラリ「Keras」を動かしてみよう」まで読み飛ばしていただいても問題ありません。

AI(人工知能)・機械学習・ディープラーニング(深層学習)の違い

ニュースなどで「人工知能」や「深層学習」といった言葉を聞く機会も増えてきました。しかし、ごちゃまぜに語られることも多く、これらが意味するものの違いが分かりにくいと感じる方もいるかもしれません。

それぞれの言葉の違いについては、これらがどう発展してきたかを解説したNVIDIA社のブログ記事が参考になります。

簡単に説明すると、以下のようになります。

AI(人工知能、artificial intelligence)
さまざまなタスクに対して、人間と同等以上の認識精度を持ち、考えることのできる機械
機械学習
データを解析して、特徴を抽出し、データ間の関係を学習する。その結果から、新しいデータに対して予測を行う。決定木、SVMなどさまざまな手法がある
ディープラーニング
機械学習の手法の一つ。ニューラルネットワークを多層に接続し、さまざまな工夫、大量のデータ、高速に計算を実行できるGPUによって、認識性能が向上した

最近は、人間の認識・分類能力をはるかに超えるディープラーニング手法も出てきました。MicrosoftやGoogleのアルゴリズムによる画像認識や、昨年囲碁で世界トップクラスの棋士に勝ったAlphaGoなどは有名なところです。

しかし、これらのアルゴリズムはそれぞれのタスクに最適化されていて、他のタスクを解くことはできないため、真の人工知能を実現したとは言えません。ただ、今までになく人工知能の実現に近づいているといえるでしょう。

ディープラーニングには高機能なGPUが不可欠

機械学習とディープラーニングで大きく異なる点は、開発に必要な環境です。ディープラーニングでは、学習の際にGPUを用いてゴリゴリと計算することが不可欠になっているため、高機能なGPUを備えた環境を準備できるかどうかがネックになります。

さまざまなディープラーニングのライブラリが対応しているのは、NVIDIA社のGPUです。必要なスペックはやりたいタスクに応じて決まるのですが、画像認識であればある程度の高スペックなGPUが要求されます。本稿執筆時点での最低ラインはGeForce GTX 1060で、GeForce GTX 1080 TiTITAN Xがあれば安心です。

最近では、GPUが利用できるクラウドコンピューティング環境も、Amazon、Google、Microsoft、さくらインターネットなどで提供されているため、かなり試しやすくなっています。本稿でも、Amazonのクラウド環境を利用して、ディープラーニングを試してみます。

ディープラーニングとその他の機械学習手法の使い分けを、環境要因以外で線引きすることは難しいでしょう。タスクによっては、今までの手法の改良で、最新のディープラーニング手法を超えることもあります。

人間が簡単そうに思えるタスクでも機械には難しかったり、逆に人間は難しいと感じることが意外と機械は簡単にできたりするので、知識や経験が豊富な機械学習エンジニアに聞くのが一番だったりします……。

ディープラーニングの歴史

ディープラーニングは、どのように発展したのでしょうか?

ニューラルネットワークとAIブーム

ディープラーニングの元になったのはニューラルネットワーク(neural network)ですが、そのさらに元の元の元となったアルゴリズムである形式ニューロン(formal neuron)は、1943年に発表されました。世界最初のコンピュータといわれるENIACが開発されたのが1946年、人工知能という言葉が生まれたのは1956年と言われていますから、かなり長い歴史があります。

その後、1960年代にかけて第一次AIブームが起きます。しかし、当時の技術では簡単な問題しか解けないことが分かり、1970年代はAIにとって冬の時代が訪れます。

1980年代に入ると、さまざまな知識をもとに最適な答えを導くエキスパートシステムが提案されるなど、再びAI・機械学習ブーム(第二次AIブーム)が起きます。ニューラルネットワークに複数の層を重ねれば、さまざまな表現が可能になり、難しい問題を解けるようになることが分かったのもこの時代です。

例えば、ディープラーニングのライブラリの一つであるTensorFlowのサイトにあるこちらのデモを試していただけると、実感できるかもしれません。FEATURESをx1とx2にして隠れ層(HIDDEN LAYER)を1層にすると単純な分類しかできませんが、

2

層を複数重ねることによって、複雑な分布をしていても正しく分類できるようになります。

3

また、このような多層ニューラルネットワークを比較的簡単に最適化できるアルゴリズムも提案されました。

しかし、なかなか上手くいかないのが機械学習です。ニューラルネットワークの層を深くしていけば、より難しい問題が解けるようになる? と思いきや、学習が上手くいかず、なかなか精度を上げることができないという問題にぶち当たります。

機械学習の分野も、1990年代には再び冬の時代が訪れてしまいます。

2000年代に画像認識でブレイク

その後、インターネットの発達で大量のデータを集めやすくなり、コンピュータの処理速度も大幅に向上。機械学習が、社会で徐々に使われるようになってきました。一番身近な例では、デジカメの顔検出などです。この流れが現在まで続いており、ディープラーニングの登場によってかつてないほどのブーム(第三次AIブーム)になっています。

意外かもしれませんが、ニューラルネットワークは、最近までほとんど注目されていませんでした。それどころか、論文中に「ニューラルネットワーク」という言葉が増えるほど採択率が低いとまで言われていました。しかし、逆風の中でも地道に研究が続けられ、2006年には後の成功につながった大きなブレイクスルーもありました。

従来は、形や色など物体を表現する特徴を画像からどう抽出するかを人間がいろいろ試して、そのデータをうまく分割するためのアルゴリズムを調整して適応するということが、一般的な解決法でした。しかし、ディープラーニングの登場によって、特徴抽出から分類まで機械が自動的に計算してくれるようになりました。

ニューラルネットワークが大きく注目されるきっかけになったのは、2012年に開催された「ILSVRC2012」という一般画像認識のコンペティションでしょう。1,000種類の物体(ピアノ、ダルメシアン、雄鶏など)が写った120万枚の画像が用意され、画像認識率を競いましたが、ディープラーニングが他の手法を圧倒してダントツの1位を獲得しました。

この年には、ラベル付けしていない大量のYouTube動画をGoogleがディープラーニングで学習させたところ、猫や人間の顔に反応するニューロンができたということも大きな話題になりました。

当時、私はまだ前の会社にいて、同僚と「なんだかやばい技術が出てきたぞ」と勉強会を始めたのですが、論文を読んでもまったく聞いたことのない理論が出てきて、理解するのにとても苦労しました。今では分かりやすく解説された書籍など、さまざまな教材が出ていて良い時代になったなーと感じます。

ディープラーニングのライブラリも充実してきました。最初は、上記のコンペで1位を獲得した研究者が公開し、ゴリゴリのC++で書かれたcuda-convnetと呼ばれるものくらいしかなかったのですが、今ではTensorFlowやChainer、この記事で解説するKerasなど、使いやすいフレームワークが出てきています。

ディープラーニングが使われる分野

現在、ディープラーニングが実社会で数多く使われている分野は、音声認識や画像認識です。研究分野では、ここ1年くらいで画像生成、強化学習、マルチモーダル学習の分野で大きな成果が出てきています。

例をいくつか見ていきましょう。

音声認識や画像認識

音声認識
スマートフォンの音声入力などで利用されています。
画像認識
フォトアルバムの分類機能や、肺のレントゲン画像からガンの領域を見つける、動画から大量の人のポーズを認識してくれる(下記参照)などがあります。
Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
4

画像生成

指定した画像をデータから生成します。下の例では、どんな鳥かを文章で入力すると、それに近い鳥の画像を生成してくれます。

GitHub - hanzhanggit/StackGAN

5

マルチモーダル学習

ディープラーニングは、異なるモード間の対応が必要な問題(画像と言語、音声と画像など)に強みがあります。例えば、次の技術では「無音声の動画から写っているものを解析して、音を生成」しています。

Visually Indicated Sounds

ディープラーニングライブラリ「Keras」を動かしてみよう

簡単な説明はここまでとして、実際に手を動かしながら、ディープラーニングを学んでいきたいと思います。

本稿では、Pythonで実装されているKerasというライブラリを使い、以下の流れで解説していきます。

6

Kerasとは? TensorFlowとの関係

ディープラーニングの有名なライブラリとして、先ほどから名前が出ていますが、Googleが開発しているTensorFlowがあります。Kerasは、このTensorFlowと、カナダのモントリオール大学が開発しているTheanoを裏で読み込んでいて、2つのライブラリを切り替えて使うことができます。

日本では最近やっと知名度が上がってきたかなという印象ですが、海外ではかなり使われています。Kerasの作者であるFrançois Chollet(フランソワ・ショレ)によると、GitHubで集計したポピュラリティでTensorFlowが1位、Kerasは3位だそうです(2位のCaffeは初期に出てきたライブラリで、有名ではあるのですが使いにくいです……)

先日(2017年2月)、TensorFlowが1.0にバージョンアップした際には、TensorFlowからKerasを読み込めるようになるという発表があり、今後は公式にTensorFlowにサポートされます。

程よいバランスで人気が出たKerasの特徴

Kerasのようなライブラリがなぜ生まれ、多くの人に使われるようになったのでしょうか?

TensorFlowもTheanoも、細かいことができる反面、記述が煩雑になっています。ガチガチの研究者であればその方が良いのですが、個人で試すにはオーバースペックという場合も多いのです。

そのため、TensorFlowにはラッパーが何種類か存在するのですが、逆にブラックボックス化されすぎて、やりたいことができなかったりすることもあります。

その中で、Kerasは程よいバランスで使うことができるため、人気が出ました。

他にも、日本語のドキュメントがあったり、話題になった多くのアルゴリズムがKerasで実装されて公開されていたりすることも、おすすめできる理由です。

ただ、一つだけ注意点があります。Kerasは先日(2017年3月)2.0にアップデートしたのですが、TensorFlowの公式サポートが入ったこともあり、大幅な変更がありました。いくつかの関数が廃止されたり、名前が変わったりしたため、特にバージョン1以前のコードを使う場合には、ワーニングやエラーが出る可能性があります。

1. AWSでディープラーニング用のインスタンスを用意する

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く