「勉強会に行ってみた!」第17回「Deep Learning ハンズオン勉強会」
event

「勉強会に行ってみた!」
第17回「Deep Learning ハンズオン勉強会」

2015.10.08

ent123_img01.jpg

今回はディープラーニングの勉強会です。ディープラーニングといえば、人工知能についてのブレークスルーと言われている技術ですよね。たとえば、画像共有サービスでユーザーがアップロードした画像を認識して「猫」とか「建物」とかに自動でカテゴリー分けするような仕組みなんかにすでに応用されています。
すごい技術だなぁと思うんですが、調べてみると「特徴量」とか「コンボリューション層」とかの聞き慣れない言葉が出てきて、難しそうだな…と思っていました。でも、ハンズオンということなら、具体的に手を動かしながら雰囲気だけでも分かるんじゃないかな?と思って、行ってきました。
三土たつお

会場は、東京・銀座にある「メディアテクノロジーラボ」というところでした。中はこんなふうになってます。

ent123_img02.jpg

主催は、Mashup Awardsと先端IT活用推進コンソーシアム(AITC)による共催でした。講師は株式会社イーグルの菅井さん。AITCの運営委員でもあります。

ent123_img03.jpg

このマイクはこんなふうに台座ごと持つのが正しいらしくて「大丈夫ですか?マイクの使い方を知らない人に見えませんか?」と言っておどけていました。

今回は、ディープラーニングを使って画像分類をしてみるそうです。適当な画像をコンピュータに見せて、それが犬なのかピアノなのかを判断してもらう、みたいなことですね。まずは、ディープラーニングってそもそもなんだっけ?というところから始まりました。

「ディープラーニングは、ニューラルネットワークを多層構造にしたものです。特徴量を自動的に発見するといった特徴があります。」

ent123_img04.jpg

いきなり来ましたね、専門用語。ざっくりいうと、ニューラルネットワークは人間の脳神経を模した機械学習の仕組みとして従来からあり、でも層を深くする試みはうまくいってなかった。そこを工夫して多層構造にできるようになったのがディープラーニング、ということのようです。

ディープラーニングを使った画像分類については、今回は Caffe というツールを使います。Pythonのライブラリーがあったり、GPUだけじゃなくてCPUも使えたりと、いろいろ使いやすいんだそうです。

■Caffeの環境を用意する

ふつうに Caffe の環境を構築しようと思うと、「それだけで一日かかります」とのこと。

ent123_img05.jpg

なので今回は、あらかじめCaffeの環境を構築したAmazon Web Service のイメージ(AMI)を使うことで、この前段部分を飛ばします。もちろんそのイメージは菅井さんが作ったものです。

なので、AWSのアカウントはすでに持っていることが前提になります。手順としては、AWSにログインして新規インスタンスを作成するんですが、その際にGPUインスタンスを選択します。

ent123_img06.jpg

ディープラーニングの学習過程は、GPUを使うとCPUの何倍も早く処理できるためです。そうしたら菅井さんの用意したAMIを選択して、インスタンスを起動します。これには数分かかります。

ent123_img07.jpg

起動したらSSHでログインします。ほんとは鍵ペアの作成とかの手順が入りますが、その辺りはちょっと飛ばします。詳しくはこのページの最後にプレゼン資料のリンクがありますので、そちらを見てみてください。

画像分類については、Caffe 向けに作られた「CIFAR-10」というツールが既にあり、今回はそれを使います。これの特徴は、10クラスの画像分類ができることです。つまり、10種類分の大量の画像を用意して学習させ、その後に「これは何でしょう?」と新しい画像を見せると、10種類のうちどれかを判断できるということですね。

CIFAR-10には、それ用にあらかじめ「猫」「犬」「飛行機」「カエル」など10種類分の大量の画像がデータセットとして用意されています。こんな感じです。

ent123_img08.jpg

1種類あたり60,000枚もの画像が用意されているんだそうです。画像分類のためにはずいぶん大量のデータが必要なんですね。

まずは、CIFAR-10のライブラリーとデータセットを、まとめてダウンロードします。ダウンロードするためのスクリプトも菅井さんが作っているので、それを実行するだけです。いたれりつくせりですね。

ダウンロードしたら、データセットをCaffe用のデータベースに格納したり、設定ファイルに適宜設定を書くような下準備をします。今回はそこらへんもお膳立てができていますので、難しいことはありません。

好きな画像を分類させるためには、まず大量の画像から学習させなければいけません。なので、まずは学習させてみましょう!

ent123_img09.jpg

学習を実行させるコマンドは 「caffe train ?solver 設定ファイル名」という感じなんですね。コマンド名とかその使い方は本質じゃないとは思うんですが、こういうふうに具体的になればなるほど身近に感じる気がします。

今回の設定では学習を4000回繰り返すことになっています。それには10分ほどかかるようなので、その間にコンピューターが学習に際して何をやってるかを見てみましょう。

まず、コンピューターは与えられたデータセット(今回の場合は大量の画像)を学習用と評価用に分けます。学習用の画像にはあらかじめ「猫」とか「犬」とかのラベルが与えられていますので(教師あり学習というやつですね)、それを1枚ずつ見ながらふむふむと学習していきます。何回か繰り返したら、こんどは評価用のデータセットから適当に選んで、学習の成果から導きだされる答えと、本当の成果を比較してテストをします。

ent123_img10.jpg

そのときの正答率が、上の画面に出てる accuracy(正解率)ですね。この値は、ループを繰り返すごとにだんだん上がっていきます。グラフにするとこんな感じになるようです。

ent123_img11.jpg

この例だと結構あっという間に収束してますね。逆に言うと、ある回数以上は学習を繰り返してもあんまり正答率があがらないように見えます。

さて、10分ほどして4000回の学習がようやく終わりました。さっそく画像分類を試しましょう!

まず、10種類のどれかに該当する写真を適当に探してきます。ここでは、ライセンスフリーの猫の画像をネットから落としてきて使うことにします。そして、画像分類の実行スクリプト「cifar10_classifier.py」(菅井さん作)を実行すると…

ent123_img12.jpg

ちょっと分かりづらいですが、「3:cat」と結果が出ています。ちゃんと猫に分類されてますね!
その上に10個並んでいる数値は、10種類のそれぞれにあてはまる確率のようなもののなのですが、猫に該当する3番目の欄が53%という値になってますね。半信半疑くらいで猫だと判断してる感じなんでしょうか。面白いですね。

■オリジナルのデータセットで、オリジナルの分類をさせる

さて、今までやってきたのは、用意されたデータセットをただなぞっただけでした。自分で応用できるためには、好きな画像群をもとに、好きなように分類させたいところです。なので、最後にそれをやってみましょう。

今回は「顔画像から性別を分類する」というのをやってみます。つまり、コンピュータに適当な人の画像を見せて、それが男なのか女なのかを判断させたい。

そのためには、学習用と評価用に大量の人の顔の画像を用意しないといけませんが、そんなものは当然手持ちにはないので、どこかから探してくることにしましょう。幸い LFW という、著名人の顔画像を1万枚以上も集めたデータが公開されているので、それを使うことにします。

ent123_img13.jpg

ただ、これにはそれぞれが男なのか女なのかというラベルはついていません。なので、大量の顔画像を目でみて1つずつ男女に分けないといけない。大変!

でも安心してください。その大変な作業は、講師の菅井さんが事前にやってくれました。菅井さんありがとう! ちなみに本当に大変だったそうです。

菅井さんがやったのはそれだけじゃありません。不鮮明なものを削除したり、全身画像から顔部分だけを切り出したり(これはOpenCVでやったそうです)といろいろ前処理をしたんだそうです。なので、ありがたくそのデータセットをダウンロードしてきます。

それから、今回は分類のクラスが男と女の2種類なので設定ファイルの該当の場所を書き換えます。

ent123_img14.jpg

その他にも、画像データ群のファイルパスとかいろいろ書き換える場所はあるんですが、そこは省略して、いよいよ学習を開始しましょう!

ent123_img15.jpg

さきほどと同様に、ループを回してはたまにテストして、ということを繰り返します。画面を見ると、500回ループ時点でのテストですでに90点(accuracy = 0.9012)も取れてますね。ディープラーニングは男女の識別が得意なのかも?

10分ほどすると4000回の学習ループが終わりました。では、人の顔を分類させてみましょう。でも誰を?それは当然、自分の顔でやりたいですよね。

今回の主催者の一人、「Code for Japan 井戸端会議」の小俣さんも手元でハンズオンを進めていました。

ent123_img16.jpg

そこで、ネットから見つけられる小俣さんの顔画像をダウンロードして、分類のテストをするようお願いしてみました。果たして男女のどちらになるでしょうか?

ent123_img17.jpg

左上が分類の対象となった小俣さんの写真。結果は「0:man」と出ています。すごい! ちゃんと男だと分かってくれました! 身近な具体例でこうやって思ったとおりに動くと楽しくなりますね。

■まとめ

ディープラーニングって難しいのかなと思っていたんですが、少なくとも、画像さえ用意できれば、オリジナルの画像分類が自分でもできそうだなという気持ちになりました。

菅井さんは、ディープラーニングで自分や家族の顔を覚えさせ、それ以外の顔を判別したら警告してくれるという「自宅警備員」システムを作ったんだそうです。面白い! ぼくもディープラーニングにいろんな電車を覚えさせて、子供と一緒に「この電車は何でしょう」ゲームとかをやって遊びたいなと思いました。

今回参加した勉強会:
「Deep Learningハンズオン勉強会 by 先端IT活用推進コンソーシアム(AITC)オープンラボ ~Caffeで画像分類を試してみようの会~ #MA11」
記事内で引用した菅井さんのスライドは次から参照できます:
『Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」』

http://www.slideshare.net/yasuyukisugai/deep-learningcaffe

三土たつお。1976年生まれ。プログラマー、ライター。プログラマーとしてはふだんPHPを書いてます。
ライターとしてはニフティのデイリーポータルZとかで書いてます。
http://mitsuchi.net/

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW