カテゴリーアーカイブ AI

著者:aoki

人工知能の父「アラン・チューリング」をもっと知りたい

最近AmazonPrimeで『イミテーション・ゲーム/エニグマと天才数学者の秘密』という映画を見ました。
最初はミステリー的な感覚でダウンロードしたのですが実際に見たら「アラン・チューリング」を題材にした映画でした。
エニグマとタイトルにある段階で気づけよ・・・

アラン・チューリング
アラン・マシスン・チューリング(Alan Mathieson Turing、英語発音: [tjúǝrɪŋ]〔テュァリング〕, OBE, FRS 1912年6月23日 – 1954年6月7日)はイギリスの数学者、論理学者、暗号解読者、コンピュータ科学者。
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A9%E3%83%B3%E3%83%BB%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0

エニグマ (暗号機)
エニグマ (Enigma) とは、第二次世界大戦のときにナチス・ドイツが用いていたことで有名なローター式暗号機のこと。幾つかの型がある。その暗号機の暗号も広義にはエニグマと呼ばれる。
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%82%B0%E3%83%9E_(%E6%9A%97%E5%8F%B7%E6%A9%9F)

ミステリーを見るつもりだったのでしたがアラン・チューリングの事でしたのでしっかり見る事にした結果、ITに従事している自分としては非常に興味深く見てよかったと思える映画でした。
かなり現実に忠実に作られており、どれだけチューリングが「bombe」(映画での名前はクリストファー)を作ることに苦労と時間を重ねて来たかが物凄くよくわかります。
今ではCPUやらGPUで高速演算できる時代ですが「bombe」が無ければ今言われている人工知能は無かったかもしれません。
是非ともITに従事している方は『イミテーション・ゲーム/エニグマと天才数学者の秘密』を見ることをお勧めします。

  • この記事いいね! (0)
著者:杉浦

ディープラーニングのできる多彩な表現

少し前の画像関係におけるディープラーニングの成果のニュースでは、数十万枚の画像データから学習を行った、というようなふれこみがありました。(最近は画像に上手く回転、移動などの変換をかけてデータの情報量を増やすことによって比較的少ない枚数による学習を行うことができるようになりました。数十万枚でも数千枚でもそれほど学習効率は変わらないはずです)
ディープラーニングにおいて、数十万枚のデータの学習による結果の精度は、数万枚のデータの学習にかかる時間よりも魅力的でした。この記事の話はディープラーニングがなぜそれだけ多くのデータから学び続けられるのか、という話になります。

ディープラーニングはビッグデータと呼ばれるExcelではとても扱いきれないぐらい巨大なデータを用いて学習することができます。これだけ膨大なデータを学習に活かすことができるディープラーニングは多彩な表現が可能になっています。ディープラーニングとは巨大なニューラルネットワークによる機械学習のことです。ニューラルネットワークの持つ表現の仕組みから、多彩な表現が可能な理由の一つを述べます。

ニューラルネットワークは下図の黒丸一つ一つで場合分けを行い、矢印先の黒丸一つ一つにその結果を伝え、伝えられた結果から場合分けが行われます。

この場合分けの伝達によって、場合分けの組み合わせ爆発ともいえるような状態を作れます。
例えば、8個の場合分けから成る層(上図の黒丸の縦列のこと)が14層並んでいるならば、場合分けを8^14回まで行えるようなものです。ここで行えるようなもの、というのは厳密には違うということと用いる意味の薄いであろう場合分けはあらかじめ無視し、処理しないということができるからということです。画像認識を例にすると、画像上における近隣の情報との関係が遠方の情報との関係よりも重要になるので、遠い画素との場合分けは省略したほうがお得です。

このように場合分けを多くすることで、この画素ならばこの線、この線ならばこの部品、この部品ならばこの物体という演繹を広く行うことができ、精度の高い結果を出力することができます。

  • この記事いいね! (0)
著者:杉浦

ディープラーニングの得意なこと、不得意なこと

この記事の結論は、ディープラーニングは、限られた情報空間内における予測、識別がとても得意であり、学習した情報に類似のない未知の情報に対する予測、識別が不得意、ということです。(y=xという式を予測したいとき、学習データがx=0からx=100までの範囲しかないならx=1000の場合の予測は無茶苦茶になりやすい、みたいな)
近年、ディープラーニングとして多数の層に組まれたニューラルネットワーク(以下NN)が注目されています。ディープラーニングという技術はNNの延長線上にあり、利点を伸ばし、欠点を小さくしながらもNNと同じ利点、欠点を引き継いでいます。
NNは確率的場合分けによる多値分類手法といえます。ここでいう分類とはaはカテゴリAに属する、bはカテゴリBに属する、…といったものです。確率的場合分けと確率的でない場合分けの違いを述べます。たとえば、AとBを場合分けするとします。確率的場合分けはAの確率70%、Bの確率30%と一度出力し、最も高い確率はAなのでAと分類します。確率的でない場合分けは確率を介さずにAと分類します。この場合分けを行う関数が活性化関数と呼ばれます。活性化関数にはステップ関数、シグモイド関数等の関数があります。
ステップ関数

0か1かのみの関数です。縦軸が0ならばA、1ならばBといった具合です。0%、100%という確率を表してるとも言えます。
シグモイド関数

0から1までを滑らかに表す関数です。縦軸が0.3ならばAの確率30%といった具合です。このシグモイド関数のような関数を用いることで確率的場合分けを行うことができます。関数の形からわかる様にこの関数単体で可能な分類は二値分類のみです。
多値分類とは分類結果の種類が3種類以上の場合の分類のことです。先ほど紹介した活性化関数を複数介することで複数種類の分類を行うことができます。下図の黒丸一つ一つが活性化関数です。左端の入力を上からx,y,zとします。活性化関数の出力である矢印はいずれも単一の出力である同じ値のことを示しています。活性化関数の一つであるシグモイド関数は出力:1/(1+exp(ax+by+cz))となるような関数です。このa、b、cはパラメータです。

ネットワークに学習をさせるということは、あるデータがこの関数らを介してどこに分類されるか、それが正しい分類かを試し、より正しく分類できる関数になるようにパラメータを変化させることです。上図では最終出力が二つあります。この最終出力は様々です。それぞれAである確率、Bである確率の様な単なる分類結果とすることもありますし、同じ入力から全く別の二種類の情報を得ようとすることもあります。
学習データに完璧に対応したネットワークが完成した場合、学習に用いたデータと同様のデータを入力した時には正しい分類を行うことができます。ディープなNNを構成するディープラーニングで用いるモデルは柔軟なモデルであり学習データに完璧に対応したネットワークが構成されやすいです。学習を行っていないデータが入力されたときはどうなるか。ネットワークは入力されたデータが学習に用いたデータに類似したデータの場合、正しい分類を行います。一方で学習に用いたデータと類似していないデータの場合、あてずっぽうともいえる的外れな分類を行いやすいです。このためディープラーニングは、学習したデータとその近辺の予測、識別が得意、学習した情報に類似のない未知の情報に対する予測、識別が不得意、ということになります。

余談:ディープラーニングが画像認識を得意とする理由の一因は画像の変化としてありえそうなパターンである拡縮回転、光源等による規則的な色調変化を広くカバーできるためです(学習データを拡縮回転、規則的な色調変化すればそれでありえそうな異なる画像を学習したのと同じことになる。ディープラーニングは学習データを増やしても学習データに対応できる柔軟性がモデルにある)。

  • この記事いいね! (0)
takahashi 著者:takahashi

知らないなんて勿体ない!!! 手軽にリアルなARを楽しめる Windows標準搭載のARアプリが面白い!

一時期なんとなーく鎮静化ムードだったAR(MR)周りですが、最近になってAppleがiOSで”AR Kit”というARライブラリを公開してから、Pockemon GOなどでリアルなARとして使われるようになるなど、にわかに活気がつき始めている印象があります。

そんな中、MicrosoftはWindows10発表と同時にMicrosoft Hololensなどを発表し、他の企業がなかなか進められなかったARに、かなり力を入れて来ていました。
現在もMicrosoftはWIndowsのAR機能に力を入れ続けているようで、一つ前のメジャーアップデート “Creators Update”で3Dオブジェクトの簡易作成機能を搭載した”3Dペイント”を搭載し、現在の”Fall Creators Update”ではさらにいろいろな3D関連の機能が追加されました。

今回はその中で簡単にリアルなARが楽しめるWindows 標準アプリ  “Mixed Realityビューア”を紹介したいと思います。

遊び方は超簡単。

まず起動すると上のような謎のアヒルのキャラクターが現れます。
ドラックしてぐりぐり動かすことで、3Dオブジェクトをいろんな角度から眺めることができます。

ここまでであればただの3Dビューア―アプリなのですが、面白いのはここから。

ウインドウ上部のメニューから”Mixed Reality”アイコンを選択します。

するとカメラが起動し、手が出てきてカメラに写っている平面をクリックするように促されるので、実際にクリックしてみます。

するとカメラで写っている平面に乗るような形で、先程のキャラクターが現れます!

すごいのは、カメラを動かすと、キャラクターもちゃんとその動きに追従して動く点。
マーカーもないのにここまで綺麗に追従してくれるのは、なかなか面白いです。

好みのアングルが決まったら、右側の白丸をクリックまたはタップすると、撮影もすることができます。

このキャラクターですが、デフォルト以外にもいろんなキャラクターやオブジェクトが用意されています。

飛行船や

建物。

恐竜や

なんとペガサスまで!!!
これらはすべて画面上部にある”Remix 3D”から入手できます。

これらのオブジェクトを使ってちょっと遊んでみました。

こちらは先ほどのデフォルトのアヒルのキャラクター。

腕に乗せられてますがなんだか不満そうです(笑

ふくろうのキャラクターをペン先に止まらせてみたり…

ペガサスを手に泊まらせてみたり!

極めつけは…

手乗りドラゴン!!!
ファンタジー好きなら一度はあこがれるシーンが、簡単に撮れちゃいます!!!

Remix 3Dですが、自分がつくったオブジェクトもアップロードができるようで、この仕組みが活性化していってオブジェクトの数が増えていったらもっと面白いことができそうな気がします!

残念なのは公式でこれらの機能の宣伝がまだあまりされていない点。

マイナーな機能になってしまうのは本当にもったいないぐらい面白い機能なので、興味を持った方は是非一度試してみてはいかがでしょうか…!

Windows Mixed Reality Viewer – Microsoftストア

 

  • この記事いいね! (0)
takahashi 著者:takahashi

UbuntuでTensorFlowを動かしてみる

以前からディープランニング型AIを実現するためのライブラリとして、TensorFlowというものがよく使われています。
ご存知の方も多いかと思います。

自分は今まであまり触れてこなかったのですが、知人がTensorFlowを使って簡易的な画像認識アプリを構築しているのをみて、自分も触れてみようと思い立ちました。

手元に自由に触れるUbuntuサーバーがあったので、こちらにTensorFlowが動作する環境を構築してみます。

まずはpipをインストールします。

sudo apt update
sudo apt install python-pip python-dev

インストール完了したらつぎにpipでTensorFlow(CPU版)を入手、インストールします。

#CPU版TensorFlowインストール
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

TensorFlowはCPU版とGPU版があり、GPU版を利用するとGPUを使って計算を行ってくれます。
ただし、GPU版はnVidia製GPUのみが対応している”CUDA”が必要になります。
GPU版を入手する場合は下記のコマンドを使用します。

#GPU版TensorFlowインストール
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

nVidia製以外のGPUを搭載していたり、ドライバが適切に設定されていない環境でGPU版を利用すると、エラーが発生して実行できません。

python
Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 23, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow import contrib
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/__init__.py", line 23, in <module>
    from tensorflow.contrib import layers
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/__init__.py", line 68, in <module>
    from tensorflow.contrib.layers.python.layers import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/__init__.py", line 22, in <module>
    from tensorflow.contrib.layers.python.layers.initializers import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/initializers.py", line 24, in <module>
    from tensorflow.python.ops import random_ops
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/random_ops.py", line 23, in <module>
    from tensorflow.python.framework import ops
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 39, in <module>
    from tensorflow.python.framework import versions
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/versions.py", line 22, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
ImportError: libcudart.so.7.5: cannot open shared object file: No such file or directory

インストールが完了したら、Pythonインタープリタに入ります。

python

すると、pythonの実行環境が起動し、
“>>>”
プロンプトが表示されるので、つづけて下記のように順に入力します。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)

実行結果はこんな感じです。


>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)
42

ここまで動作すれば、TensorFlowは正常に動作しています。

Linux環境だと、大抵は初めからPythonが入っているので、セットアップ手順が少なくて済むのでありがたいのですが、Python自体を使用しているディストリビューションやアプリもあるようで、不用意にPythonのバージョンをアップグレードしてしまうと、OSやアプリが動作しなくなる危険もあるようです。

その場合はPyenvを利用してアプリごとにPythonのバージョンを切り替えることで対応できるようです。
pyenv + anaconda + python3 – Qiita

この辺りもまた試してみたいと思います。

参考サイト:
UbuntuにTensorFlowをインストール – Qiita
Ubuntu 16.04+CUDA 8.0+Tensorflow 環境で起きるlibcudartが見つからない問題を解決する – Qiita

  • この記事いいね! (0)
takahashi 著者:takahashi

Adobe LightroomなどのAdobe製品にAI “Sensei”が搭載。自動でより自然な補正が可能に。

ちょっと前の話になるのですが、先月の12月12日にAdobe Lightroom CCのWindows版、Mac版、Android版、iOS版、Adobe Lightroom Classic CCとAdobe Camera Raw(ACR)に対してアップデートがリリースされました。
今回のアップデートでプロのカメラマンによる写真を学習したAdobeのAI「Adobe Sensei」が各アプリの自動補正機能に搭載され、自動補正がより自然な仕上がりになるようになったようです。

アドビ「Sensei」で写真を高品質に–「Lightroom」の自動補正機能が強化 – CNet Japan

僕も実際に使ってみたのですが、旧バージョンでは自動補正すると必要以上に明るくなってしまったりと、やや不自然な補正になってしまうことがよくありました。
そのため、実際に使う際は、一度自動補正した後で、自分で明るさを暗めにしたり、コントラストを上げたりという操作をしていました。
しかし、今回のアップデートを適用すると、自動補正しても白飛びすることは少なくなり、確かにより自然な補正になっているように思えます。
気持ち暗めになってしまうこともあるので、完全に調整がいらないわけではないですが、自動補正だけである程度満足のいくレベルになっているので、大量の写真を現像しないといけないときは非常にありがたいですね。

Lightroom CCユーザーでまだアップデートを適用されていない方は、是非試してみてはいかがでしょうか!

Adobe Lightroom – Adobe

  • この記事いいね! (0)
著者:aoki

弊社ではDeepLearningを用いた画像認識アプリの開発を進めています

現在弊社ではDeepLearningを用いた画像認識のアプリ開発を行っています。

今開発しているアプリは花を認識するサービスで「Floen」という名前でリリースを予定しております。


こちらはアプリのスクリーンショットです。
枠の中に花を入れて撮影することでサーバ側で何の花なのかを画像認識して結果を返します。
画像認識自体はTensorFlowとAlexNetを利用しておりいわゆる畳み込みニューラルネットワーク(CNN)ですね。

ただ課題はまだ学習が足りず認識精度が高くないという所でどれだけ効率よく学習させるかですね。
アプリを通して撮影された写真も学習データとなりますのでリリースできましたら是非皆様に使っていただきたいです。
アプリ自体はリリース準備を進めており現在審査待ちですのでもうしばらくお待ちください。

  • この記事いいね! (0)