2019/04/10 更新

ディープラーニング学習データ作成の様子

どうも、ディープなクラゲです。
今回はレシピではなく、クラゲの実験の様子をご紹介します。ディープラーニングで必要な「学習データ」を作成する様子です!

ディープラーニングのフェーズは「学習フェーズ」と「推論フェーズ」の2つですが、データがない場合は「学習データ作成フェーズ」が必要になります。 「データセット」「オープンデータ」「Webスクレピング」などを利用する方法もありますが、自分しか持ってないモノを学習する場合には自分でデータを作る必要があります。

実際は、学習データ作成 → 学習 → 推論 の順ですが、逆から見てゆきましょう。

推論

最終的な推論時の動作です。

親子向けの鉄道×AIイベントにてデモするために作りました。
7種類の果物をカメラに向けて認識させ、鉄道に関する音を鳴らすという仕様です。果物がないときは音は鳴らしません。

認識対象物 再生音
チェリー 発車メロディー
レモン 発車ベル
みかん ドア開く音
パプリカ 踏切音
電車の通過音
いちご アナウンス音
トマト 警笛音

学習

学習自体はあっという間に終わります。

GPU搭載のノートPCを使って学習時間は65秒くらい、正解率99%以上でした。
ネットワークはCNNです。フレームワークにはChainerを使いました。

学習データ作成

学習データ作成の様子です。冒頭はショートバージョンでしたが、こちらはフルバージョンです。

撮影には、キーボードの特定のキーを押すとUSBカメラに写っている画像を保存してゆくプログラムを作ってそれを実行しています。
一番最初にプログラムを起動してチェリーを1枚撮影し、ちゃんと映っているか確認しています。
確認が出来た後に、チェリーを少しずつ回転させたり、置く場所を少し変えたりして撮影しています。
果物7種類に加えて、実は何もないときも学習させています。レモンとみかんの間で手の影などを撮影しているのがそれです。

この画像は「いちご」を撮影したデータです。回転させたり、色々な位置に置いているのが分かります。左下に写りこんでいるのは、カメラ台として使用した紙コップです。
学習データを作る際に、「アノテーション」と呼ばれるいわゆるラベル付け作業がありますが、今回の例では種類毎に一気にまとめて撮影しているため、フォルダを分けて保存するだけで完了しています。

ちなみに、ディープラーニングにはデータ拡張(通称:水増し)という手法があり、学習データを疑似的に増やすことが可能です。例えば元画像を少し回転させたり、元画像を少し移動したり、元画像に少しノイズを加えたりすることで数倍に学習データを増やせます。
ただし、単純な画像変換なので現実の回転とは違うため(例えば照明の影など)、できる限り元データで回転する方が良いです。

また、CNNは移動に対するロバスト性は高いのですが、大きく移動している場合はNGです。なるべく被写体を大きく撮影する方が良いのですが、カメラのピント、カメラ設置位置、被写体の大きさ等の違いがあるため、なかなかスマートに行かないのが現実です。

まとめ

ディープラーニングにおける「推論」や「学習」自体は完全にAIが自動的に計算してくれます。しかし、リアルの世界と結びついているAIの場合、「学習データ作成」などは人間の知恵がまだまだ必要で、意外と地味でアナログな作業も必要です。

以上、「ディープラーニング学習データ作成の様子」でした!