Windows環境で深層強化学習の環境を作る

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回は入門編からやや飛んで、強化学習にディープラーニングをプラスした「深層強化学習」の環境構築をしてみましょう。

**********

さて、今回はWindows環境で深層強化学習の環境を作るだ。

ディープラーニングを学習するのに最適な環境は、専用のubuntuマシンを作って、その中で動かしていく方法だ。
できれば、CPUではなくGPU。
ただ、簡単なコードであれば、多少時間はかかるが、CPUでも問題なく動くことが多いので、予算の少ない方やお試しで学んでみたい方にはCPU搭載マシンでも大丈夫だろう。

CPUマシンでいくのなら、昨今のPCスペックの増加により、あるOSの上に仮想環境を作って、その中でubuntuを回す方法でも十分に対処できる。

そこで、今回はwinマシンに仮想環境を作り、そこにubuntuを入れて、ゲームなどを自動で学習する深層強化学習の環境構築をしてみたい。

まず用意するのはWindowsパソコンの64ビット。
32ビットだとディープラーニングのフレームワークであるTensorFlowや Chainerなどを動かすのに手間がかかるので、ここは素直に64ビットマシンを用意しよう。

そして、仮想化ソフトはvirtialBox、VMwareなどの有名どころのどちらかを用意する。

今回はVMwareを使用。

最新のバージョン14だとubuntu16のインストール時に画面が乱れてしまい、先に進むのに手間がかかりそうだったので、VMwareのバージョン12を選択して入れてみた。

まずOSであるubuntu16.04を公式サイトよりダウンロードして、パソコンのCドライブ辺りに置いておく。

続いて、仮想化ソフトのVMwareをインストール。
ソフトのインストールが終わったら、ubntu16.04を指定して、OSのインストールを行う。

終了後にubuntuを起動してみよう。
VMwareを起動して、「仮想マシンの再生」をクリック。

すると、下記のようなubuntuのデスクトップ画面が現れる。

この画面上で、Ctrl + Alt + T の同時押しをする。
すると、真っ黒のコンソール画面が現れるので、ここに各種コマンドを入れて進行していく。

まずpwdを打ち込んでみよう。ubuntu上での、今いる階層がわかる。
/home/ユーザ名
が表示されるはずだ。

お次に簡単なコマンドを、それぞれ入力してみよう。
mkdir
新しいディレクトリィを作る

mkdir test1
カレントディレクトリィにtest1フォルダができる。

cd test1
test1フォルダの中に移動する。

ls
フォルダの中のファイルなどを表示する。

ls -al
上記の内容を更に細かく表示。

vi sample.txt
sample.txtという名前のテキストファイルを作る。

このviとは、Linux系では有名なテキストを編集するソフトで、独特な編集コマンドがある。
詳しくは「vi 使い方」などで検索するべし。

cat sample.txt
先ほど作ったsample.txtの内容のみを表示する。編集はできないので、中身を見たい時だけ安心して見れる。

この辺のコマンドは結構頻繁に使う。
他にもいろいろなコマンドがあるので、ネットで検索しながら使ってみてほしい。

続きは次回へ。

ニューラルネットワークをpythonで実装してみよう

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はディープラーニングのニューラルネットワークを実装してみましょう。

**********

さて、今回はニューラルネットワークの順方向での最初の部分を実装してみよう。
まずはお決まりのニューラルネットワークの参照図です。

上記画像の赤枠の中を実装します。

x1とx2から出ている水色の線は「重み」を表しています。
これをW1とします。

また、オレンジの線はバイアスから出ているもので、これをB1とします。

Xからの入力値を2層目で受け取り、入力値と重みを乗じたものの総和を取り、バイアスを加えて、シグモイド関数を通して出力する。
この部分をpythonで実装してみましょう。

では、pythonコードです。

どうでしょう。
上記を繰り返していけば、何層にも渡って、順方向のニューラルネットワークを作ることができます。
(最終層である出力層のところは、関数を通さずに、そのまま出力することが多いです。ここら辺はまた後ほど)

まずは上記のコードをよく読んで、ニューラルネットワークの基礎を習得しましょう。

OpenCVで顔画像を切り取る

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はディープラーニングの画像処理に使う、手元の画像データから顔認識をして、切り出す作業をやってみましょう。

*****************

さて、今回はOpenCVで顔画像を切り取ってみよう。

以前のブログでOpenCVで顔認識のpythonコードを書いてみたが、今回は描画された矩形の通りに顔画像を切り出してみたい。

切り出す画像はこちら。
画像処理のコードを書いている人にはおなじみのレナさん。

まずpythonコードはこちら。
わかりやすいように、行数を減らして最低限にしてみた。

大筋で処理手順を書いてみると、
1, 画像を読み込み
2, グレースケールに変換(処理を軽くするため)
3, カスケード分類器にかける
4, 顔認識できた矩形を、カラー画像の方で切り取る
5, 切り取った画像を保存する

一般的には最後にMatplotlibなどを使って、画像を表示させることが多いのだが、AmazonのAWSなどを使っていると、遠隔で操作しているので、画像の表示作業が面倒になる。
そこで、画像を一旦保存して、その画像を手元のPCにダウンロードし、表示させる手順を想定している。

では、上記のコードを適当な名前で (testGazou.py) 保存して実行してみよう。

$ python testGazou.py

実行後、保存されたlenaCut001.jpgをダウンロードして、表示してみる。

どうでしょうか。見事に表示されましたか。

こういった画像を大量のデータにして、ディープラーニングを動かすわけですね。

ReLU関数をpythonで表示してみる

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はディープラーニングによく出てくる、ReLU関数と呼ばれるものをグラフ化してみます。

**********

前々回にシグモイド関数というのが出てきたが、
今回はReLU関数というものを紹介しよう。

ニューラルネットワークの各層の出力部分には、非線形関数を入れるのだが、この関数はそのうちの1種。

このReLU関数を入れることで、シグモイド関数とは違う値を出力することができる。

まずこの関数をグラフ化したものがこちら。

ご覧の通り、0以下の値は全て0で出力され、0より大きい値は、入力した値がそのままグラフに出力される。

このReLU関数のpythonコードはこちら。

非常にシンプルなコードだ。

では、上記のグラフを書くためのコードを実装してみよう。
下記をpythonのインタプリタで実行する。

さて、グラフが表示されただろうか。

結構、このReLU関数は使われることが多いので、グラフ化して
己の目で見てみることも、知識のひとつになると思う。

OpenCV・pythonで、顔認識をやってみよう

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はディープラーニングを小休止して、Opencvを使っての顔認識をやってみよう。

**********

顔認識というのは、ある画像の顔の部分を検出して矩形で囲む技術のことだ。

まずは顔画像を用意しよう。

こちらの画像を使って、顔認識できるのかを検証してみよう。

pythonのコードなどは、以下の記事を参照した。
Python, OpenCVで顔検出と瞳検出(顔認識、瞳認識)

上記サイトに記載のコードを適当な名前で保存(ここではtest01.py)して、実行してみる。
成功したら、保存した画像を表示してみよう。

とまあ、Opencvを使うと、いとも簡単に顔認識できるのかがわかる。
(ちなみに緑色の矩形は瞳認識だ。それと、右奥のライトを誤認識している)

で、ここで終わるには何ともつまらないので、いろんな画像を入れてみて、顔として認識できるのかを検証してみよう。

まず、アライグマ写真はどうだ。

…こちらは認識できずだった。そうですか。動物は苦手なんですね。

では、同じ霊長類だったら。
こちらのゴリラ画像はどうだ。

顔ではなく、鼻を顔として認識したようだ。言われてみれば、鼻の穴が目に見えなくもない。

お次に、たくさんの人物画像はどうだ。

顔は認識できたり、できなかったり。
瞳はほとんど認識できずだ。

ここで、真ん中行のメガネの男性は顔も認識できていない。
てことは、メガネ系は弱いのだろうか。

では、こちらの解像度バッチリのメガネ男性を認識チェックしてみる。

お見事に認識できている。但し、瞳認識はできていない。

結論を出すにはサンプル数が少な過ぎるが、ここまでの感想としては、解像度がそこそこあり、正面系の顔画像なら、結構な確率で顔認識はできるようだ。
しかし、瞳認識については、正面系でなるべくメガネ無し、でないときついのでは、といった感じだ。

いずれにせよ、結構楽しいOpencvでの顔認識だった。
時間があれば、下記も検証してみたい。

・イラスト画像は?
・人間顔に似た霊長類を探してチェック?
・変顔はどうなのか?
などなど。

皆さんもぜひ実験してみては。