いさぼうネット
賛助会員一覧
こんにちはゲストさん

登録情報変更(パスワード再発行)

  • rss配信いさぼうネット更新情報はこちら
 便利ツール 
 人工知能の種類とディープラーニングにチャレンジ!
 

 前回は人工知能(AI)の歴史と近年の成果についてお伝えしました。 今回は、人工知能についてもう少し掘り下げた内容をお伝えしようと思います。 また、実際にディープラーニングによる画像認識を試してみましたので、その紹介もさせていただこうと思います。

 人工知能には多くの種類があります。 Microsoft社が提供する人工知能サービス[1]の分類がその種類を上手く表しているため、表1で紹介します。

 表1.人工知能の分類
対話型 自然言語処理、推論・探索
予測型 機械学習
認知型 ディープラーニング
 

 対話型は会話やパズルゲームなど入力パターンが多数あり、入力パターンに応じて適切な回答を出力するものです。 例えば、自然言語処理という技術で人間の質問を理解して、適切な回答を出力するために推論やデータベース探索を行います。

 予測型は過去のデータを元に今後どうなるかを予測します。 機械学習で、数ヶ月間の交通量をコンピュータに学習させて、明日の交通量を予測することが一例として挙げられます。

 認知型は音や物の特徴を自動で抽出して学習することで、入力されたものが何なのかを認識します。 今話題のディープラーニングの登場により、認識率は実用的なレベルに引き上げられました。

 このような人工知能を利用することで様々なことが自動化できます。

 身近なものとして、迷惑メールのフィルタリング機能が挙げられます。 迷惑メールの単語や内容は似たようなものであるため、その傾向をつかむことができれば、コンピュータは人間のように自動で迷惑メールと判断できます。

 ここで注目すべき点は傾向をつかむ作業です。 例えば、「お母さん急にお金が必要になりました!至急親友の口座に500万円振り込んでください!」というメールを受信しました。 人間が見たら「親友の口座に500万円振り込んでください!」という文章から怪しいメールだと判断できます。

 では、どのようにすればコンピュータに怪しいメールだと自動で判断させることができるでしょう?

 迷惑メールのフィルタリング開発者が「親友の口座に500万円振り込んでください!」という文章がある場合は迷惑メールと判断するようにプログラミングするのでしょうか?

 この場合、「親友の口座に5万円振り込んでください!」(500万から5万に変更)や「親友の口座に500万円振り込んで!」(”ください”を削除)と微妙に数値やニュアンスが異なる文章には対応できません。確かに、これらを1つ1つプログラミングすることで迷惑メールの自動振り分けは可能ですが、何億、何百億、何千億と天文学的なパターンをプログラミングする必要があります。

 そこで、人工知能の出番です!

 対話型の自然言語処理によって、これまでに得られた迷惑メールの内容を抽象化して解釈します。 具体的には、初めに文章を名詞、形容詞、副詞、動詞や助動詞などに細かく分割して、品詞の繋がりや辞書から内容を解釈します。これが傾向をつかむ作業となります。

 そして、受信したメールに対しても同様に内容の抽象化と解釈を行い、過去の傾向を参考に、受信したメールが迷惑メールに似ているかを自動で判断します。

 業務メールが迷惑メールと判断されてしまった経験をしたことがある方もいるのではないでしょうか?これは文章や添付画像などの何かしらが迷惑メールに類似していたためです。

 さて、話はガラリと変わりますが、今話題のディープラーニングで画像認識を試してみました。

 筆者にとってディープラーニングは初めて触れるため、NVIDIA社のDIGITS[2]というディープラーニング用のフレームワークを利用して、数字認識[3]と車両認識[4]をチュートリアルに沿って試してみました。

 今回利用したPCのスペックを表2に示します。 ディープラーニングの学習には多くの時間を要するため、学習の計算にはGPU(グラフィックボード)を利用しました。 OSはWindowsではなく、無料のUbuntuと呼ばれるOSを利用しました。

 表2.PCのスペック表
CPU Intel Core i7-6700K CPU(4.00GHz)
メモリ 8GB
GPU(グラフィックボード) GeForce GTX 780 Ti
OS Ubuntu Server 14.04
 

 まずは、数字認識です。 ディープラーニングの学習用にMNIST[5]と呼ばれるデータセットを利用しました。 MNISTは図1のような手書きの数字画像が60,000枚含まれています。 この60,000枚の画像をGPUで学習させたところ、画像のサイズが小さいこともあり、約1分で完了しました。


図1.MNIST[5]に含まれている画像の一例

 それでは、Windowsのペイントで書いた数字と、カメラで撮った数字を認識できるかを確認してみましょう!

 図2はそれらの認識結果です。 Predictions(予想)のパーセント値は画像・写真に書かれているであろう数字の確率です。


図2.手書き数字の認識結果

 5の画像に関しては、逆さにした画像(中央)以外は5である確率が約97%となっており、上手く認識されています。 6の写真では画像全体に対して6の文字サイズが小さく、数字以外のものが写り込んでいるため、6と認識できませんでした。 正位置の写真(左側)でさえも6が49%、2が41%となりました。

 次に、車両認識にチャレンジです。 学習用のデータとしてKITTI Vision Benchmark Suite[6]を利用しました。 これには図3のような写真が約6,300枚含まれています。 車両が写っている位置を示すテキストファイルが別途に用意されており、写真と共に学習に利用されます。 この学習にはGPUを使っても2日半掛かりました。


図3.KITTI Vision Benchmark Suite[6]に含まれている写真の一例

 それでは、弊社の駐車場の写真で車両を認識できるのかを試してみましょう。

 図4は、その結果を示しています。 Source imageは入力した写真(ナンバーは白塗りにしています)であり、Inference visualizationはディープラーニングによる車両認識の結果を示しています。 車両と思われるものは赤枠で囲まれています。


図4.車両認識の結果

 塀の向う側にある車両は、小さく写っているためか車両と認識していませんが、塀より手前の車両は認識されています。 影や光の加減の影響に左右されていないことは注目すべき点です。

 数字認識より認識率は高いです。 手書きの数字は色や形状に大きな特徴がありませんが、車両は色、タイヤ、窓や形状など多くの特徴をもつためではないかと考えられます。

 今回は人工知能の種類やディープラーニングの実践と盛りだくさんな内容となりました。 次回は、人工知能の機械学習についてお伝えしようと思います。

[1] Microsoft Azure,https://azure.microsoft.com/ja-jp/services/cognitive-services/
[2] NVIDIA,https://developer.nvidia.com/digits(英語)
[3] NVIDIA GitHub,https://github.com/NVIDIA/DIGITS/blob/master/docs/GettingStarted.md(英語)
[4] NVIDIA GitHub,https://github.com/NVIDIA/DIGITS/tree/master/examples/object-detection(英語)
[5] Max Planck Research Group for Autonomous Vision,http://yann.lecun.com/exdb/mnist(英語)
[6] THE MNIST DATABASE of handwritten digits,http://www.cvlibs.net/datasets/kitti(英語)

Copyright(C) 2002- ISABOU.NET All rights reserved.