はじめに
はじめまして!
私は2018年4月にイサナドットネットに入社予定で、内定者という立場でこちらの記事を書かせて頂いています。 学生のうちにイサナドットネットで働くイメージをよりクリアにしておきたいと思い、 現在アルバイトとして業務のお手伝いをしながら勉強をさせて頂いています。
大学の研究では機械学習を扱っており、それがきっかけでイサナドットネットのブログで機械学習に関するシリーズの記事を執筆する機会を頂きました。
私自身、過去にインターンとして参加させて頂いていまして、その時に執筆した記事はこちらです。
私たちの会社ではヘルスケアなど社会課題の解決に取り組んでいますが、機械学習などのAIを使ったサービスも始めています。
何を試す?
機械学習って難しそうなイメージですよね。 でも、画像分類なら簡単に試すことができます。 今回は機械が人の顔を分類してくれるように、学習させていきたいと思います!
画像を用意する
何を分類する?
そもそも画像分類ってどこで使われているのでしょうか? やはり身近なのは、SNSなどで人の顔を自動でタグ付けしてくれる機能です。 今では当たり前になりましたが、昔の人達からしたら魔法のように思えるかもしれませんよね・・・ そこで、今回は明治生まれの文豪の画像分類に挑戦してみようと思います!
画像を集める
機械学習にはデータが必要なので、まずは画像を集めていきます。 今回は太宰治と芥川龍之介の画像を10枚ずつ集めました。
画像収集イメージ
画像を整える
画像を集めたら、次に顔の部分を検出していきます。
出典 wikipedia
機械が学習しやすいよう、データを整えてあげることが大事ですね。 さらに、1枚の画像につき10種類に加工し、計200枚の画像が用意できました。
機械学習を実際に体験してみる
機械学習ライブラリ
機械に学習させる準備をするのに、大変便利なツールがあります。 それが、Googleが公開している「TensorFlow」です。
こちらは無料、しかも登録いらずで、誰でもすぐに使うことができます。 また、通常は機械に学習させるためには学習モデルを作る必要があるのですが、そのためのアルゴリズムが初心者向けにあらかじめ用意されている優れものなんです。
TensorFlowを使うためには、AIの分野で広く使われているプログラミング言語であるPythonを、公式サイトのやり方にしたがって導入します。 一度導入すれば、以下のような1行のソースコードでTensorFlowの機能が使えるようになります。
import tensorflow as tf
簡単ですね。具体的な機能の内容につきましては、公式サイトを参照していただければと思います。
こちらを使って機械学習の準備を進めていきます。
学習モデルの構築
画像を分類するための学習モデルを作っていきます。 画像分類では「畳み込みニューラルネットワーク」というモデルが有名ですね。 以下のページではこのモデルをわかりやすく説明してくれています。 「定番のConvolutional Neural Networkをゼロから理解する」
ソースコードの一部を覗いてみましょう。
W_conv1 = weight_variable([5, 5, 3, 4])
b_conv1 = bias_variable([4])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
こちらが畳み込み層と呼ばれる部分です。 並んでいる数字は画像から特徴を抽出するためのパラメータのようですね。 これにより検出された数値データをどんどん次の層に渡していくことにより、画像から特徴量を見つけ出すようです。 複数の層を通してより深く学んでいくことが、ディープラーニングたる所以ですね。
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool3_drop, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
畳み込み層から渡された数値データはこちらでまとめられ、分類できる形になります。 端から見たら魔法のように感じる機械学習も、実際は数値データの受け渡しで動いているということがわかります。
学習させる
学習させる前に、画像1枚1枚にラベルをつける必要があります。 機械に正解を教えてあげる部分ですね。教師あり学習とはこのことです。 ここでは、太宰治にラベル0、芥川龍之介にはラベル1を振りました。 あとは機械がこのラベルを参考に、勝手に学習してくれます。
ラベル付け
これで準備が整いました! いよいよ画像を機械に読み込ませ、学習させていきます。
学習初期
train accuracyとは学習の達成率のようなものです。 学習し始めでは60%前後。まだまだですね・・・
学習終盤
放っておくだけで、どんどん達成率が上がっていきます。 与えた正解をもとに、機械が自ら学んでいっているようですね。 ものの5分で、9割の正答率で文豪の2人を分類できるようになりました。 驚きの成長速度です。
画像を判定させてみる
2人を識別
学習が無事終わったのでテストを受けてもらいましょう。まるで学校みたいです。 テスト本番では、問題集になかった問題も解ける必要がありますよね。 そこで、機械に学習させていない画像を使って試してみます。
出典 wikipedia
Dazai: 99% Akutagawa: 1%
Dazai:99%と出ました。
学習した結果から、この画像が99%太宰治であることを判定しているわけです。 無事、合格としましょう!
遊んでみる(おまけ)
ちなみに第三者の画像を判定させると、太宰顏であるか芥川顏であるかを判定してくれます。 社員の方にお願いして、協力してもらっちゃいました!
おでこなし Dazai: 16% Akutagawa: 84%
おでこあり Dazai: 11% Akutagawa: 89%
どうやら芥川顏のようです。 文豪二人も出しているおでこを出す出さないで差異を試して見ましたが、 おでこを出すと、さらに芥川度が増すようですね。
Dazai: 67% Akutagawa: 33%
社内にいるPepper。どちらかといえば太宰治似みたいです。
今回は人の顔でしたが、動物の画像を学習させて、自分は犬顔? それとも猫顔? なんてのも楽しそうです。
まとめ
機械学習を身近に体験することができました! しかし、もっとハイレベルになってくると学習環境を考える必要があります。 難関校を受験しようと思ったら、もっと規模の大きい予備校に通ったほうがいいですよね。 そこで、クラウド環境で機械学習を行う事例も増えてきているようです。 当社では「Microsoft Azure」を使った取り組みも行っています。 Microsoft Azureで用意されているAzure Machine Learningの利用や他の機械学習の事例も引き続き紹介していきます。
イサナドットネットではマイクロソフトのAI機能であるMicrosoft Cognitive Servicesを活用したアプリケーション開発を行なっております。 ご興味持った方はisana.netまでお問い合わせ下さい。
詳細・お問い合せはこちら「MicrosoftのAIを使ったアプリ開発」