はてなTシャツを手に入れるために人工知能を使ってみることを考えました
はてなブログのフォトコンテスト、毎年挑戦しているのですが、1回落選、2回入賞という成績です。今年こそ!Tシャツ絶対ゲットするという固い思いを持っています。フォトコンで勝つためにはどうすれば良いか。いつも悩むのが、どの写真をフォトコンに出すかです。過去も他の写真を出していれば受賞できていたのでは?と思うことも多々有ります(勘違いかもですが)。
でも、どれがフォトコンで受賞できる写真かなんて分かるわけがありません…うーん、写真をみるだけで魔法のように判別してくれる便利なものがあれば…まてよ、人類にはディープラーニングがあるじゃないか!これを使えば何でもできるはず!きっとフォトコンの受賞写真を判別するなんてお茶の子さいさいのはず!
というわけで、はてなブログのフォトコンではてなTシャツをゲットできるか判別する人工知能を自作してみることにしました。ちなみに、ここからしばらく宇宙語が続くので、よくわからない人は、最後のまとめだけ見るか、ここで離脱した方がベターです。ちなみに最初に言っておくとタイトルの通り全然うまくいきませんでした。
GUIのディープラーニングツールCSLAIERの概要とセットアップ
CSLAIERとは?
今回は、ディープラーニングの学習と判別にCSLAIERというSONYとUEIが開発したディープラーニングのGUIツールを使います。これを使うとGUIで直感的にディープラーニングを使えるので非常に良いです。詳しくは、開発者の一人の id:shi3z さんの以下の著書を読むのが一番よいと思います。
- 作者: 清水亮
- 出版社/メーカー: 技術評論社
- 発売日: 2016/12/07
- メディア: 大型本
- この商品を含むブログ (11件) を見る
ツール自体は、GitHubでMITライセンスで公開されていて、誰でも商用にも個人用にも使用できるようになっています。素晴らしいですね。ディープラーニングのフレームワークは、国産のChainer
というフレームワークが使用されています。
Chainerでの画像認識などは、以前やったりしています。興味ある方は以下参照ください
学習に関しては、なかなか手軽にやる方法がなく二の足の踏んでいたのですが、CSLAIERを使うと非常に簡単に学習から判別まで実施することが可能になります。
CSLAIERセットアップ
公式は、以下GitHubのREAMEに書いてあります。
基本的には公式に従えばよいのですが、参考までに自分がMacでpyenvを使って設定した例を記載しておきます。以下は基本自分のメモなのでうまくいかない場合は公式を参考にしましょう。
まず、以下記事を参照に、pyenv-virtualenvインストール
のところまで実施します。
そのあとはCSLAIER用の仮想環境を構築して、仮想環境に入ります。
$ conda create -n cslaier opencv hdf5 scipy matplotlib
$ pyenv global anaconda-2.4.0/envs/cslaier
あとは、仮想環境で必要なパッケージをREADMEの通りインストールします。
$ git clone https://github.com/SonyCSL/CSLAIER $ cd CSLAIER $ ./setup.sh $ pip install -r requirements.txt
これでセットアップ完了したので、以下でCSLAIERを起動します。
$ ./run.sh
以下のように表示されたらOKです
[INFO] Starting CSLAIER server on localhost:8080
Safariなどのブラウザのアドレス欄にlocalhost:8080
を入力します。以下のような画面がでればセットアップは完了です。
CSLAIERで学習から判別までテスト
CSLAIERでの学習から判別までの流れは以下の通りです。これは、他のディープラーニングのフレームワークでも同様の流れですね。
- データセット準備
- 学習
- 判別テスト
データセット準備
まずはテスト的に、代表的な判別用のデータセットをダウンロードします。具体的には、以下のCaltech101
というやつを落とします。
上記サイトからポチポチクリックしてダウンロードして圧縮すればよいのですが、説明が面倒くさいので以下Macのターミナルのコマンドで説明します。コマンドよくわからない人は、上記サイトからダウンロードしたファイルをとにかくzipで固めればよいです。頑張ってみてください。
以下コマンドでデータセットダウンロードして解凍します。
$ wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz $ tar xvzf 101_ObjectCategories.tar.gz
ファイルの中身は以下のように、フォルダ名がクラス。中に画像ファイルがずらずら入っているようになっていればOK
中身は問題なさそうなので、以下コマンドで圧縮します。
$ zip -r 101_ObjectCategories.zip 101_ObjectCategories
これで学習データの準備は完了です。
学習
次にデータセットを用いて、ニューラルネットの学習を行います。
以下画面で、まずはDataset
の右の+New
を選択
Images
を選択。Dataset Name
に好きな名前(今回は101_ObjectCategories
)を入力して、先ほどzipで固めたデータを選択します
データをアップロードします
アップロード完了したら、次は以下画面で、Models
の右の+New
を選択します
ネットワークを選択。今回は取り敢えずnin.py
というシンプル(らしい)ネットワークを使用。Frameworkはchainer
、Training TypeはImage Classification
を選択して、中央下のCreate
をクリックします
学習の設定をします。Select Dataset
は、先ほど入力した101_ObjectCategories
、Pretrained Model
はNew
。Epoch(世代数)
を20くらいにします。その下の画像処理の設定は、とりあえずデフォルトでStart
をクリックします
学習が始まる
しばらくほっといた後、ブラウザを更新すると学習が進んで行く
Mac Book Proで10時間くらいかかるとか言ってる…GPU使わないからこんなもんかな
判別テスト
次は判別です。ある程度学習進むか、学習完了したら左下のInspect
をクリック
ファイルを選択をクリックして、ダイアログから判別したい画像を選択。
学習した結果が表示されます
2epochの学習でも、ちゃんと飛行機と判別してくれています。素晴らしいですね。
自分の学習データで学習させて判別
まずは、データセットを準備しましょう。はてなブログの過去の記事から、Tシャツを獲得した画像と入選した画像、落選した画像をダウンロードしてそれぞれhatenaphoto
というフォルダの直下にTshirt
Accept
NG
というフォルダに分けて入れます。
こんな感じね
分け終わったらhatenaphoto
フォルダをまるごとzip
ファイルに圧縮します。あとはCaltech101
のときと同様に、CSLAIERのモデルを作成します。
アップロードした後
こんな感じにちゃんと分類されて登録されていればOK
この後の学習から判別までの流れはCaltech101
のときと全く同じです。
ただ、Caltech101
のときと違って4種類のグラフがちゃんと出て来ない。嫌な予感がします。はてなTシャツ過去ゲットした写真で判別
オー!正しく判定されていない!!
別の写真で試すと
これまたダメ!Why Deep Learning People!?
他の画像も試してみましたが、ほとんど正しく判別することはできませんでした(全部ほぼ同じ結果が出てしまう)。
一応ニューラルネットワークの層の中身とかも、以下のように見れるのですが。
うん、わからん!!
データが足りないのかなと「はてなTシャツ+入選」と「それ以外」の2グループに分けて学習したりしてみたのですが、accuracyが全然上がらない…
2グループで0.5なのでチンパンジーが適当に選ぶのと変わらない程度の知能しかないことになってしまいます。
まとめ
人工知能を使ってはてなTシャツをゲットしようとしたのですが、自分の力ではチンパンジー以下の人工知能しか生み出すことはできませんでした。ディープラーニングって基本ブラックボックスなので、うまくいったときは良いのですがうまくいかないときって原因を調べるのが辛いですね。結局ネットワークを試行錯誤で変えてみたり、データ量をガンガン増やすくらいしかやれることがない気がしています。
わからないなりに原因を推察するに、写真にあまりに共通点がなくて人工知能で判別するような特徴量をうまく抽出することができなかったんじゃないかな?と勝手に思っています。
しかし、今回はうまくいかなかったとはいえ、こうやって手軽にディープラーニングという最先端技術が素人にも簡単に試せるようになったのはなかなか凄いことですね。ただ、このままブラックボックス的に黒魔術としてディープラーニングを使い続けるのは、致命的な間違いしていても気づかなかったりする可能性が高かったり、ツールの使い方の用語が分からなかったり、ツール無しでは何もできなくなってしまうのが自分としては嫌な感じなので、以下のようなフルスクラッチでディープラーニングを実装できるような本を読んで、理論の方を補完していきたいなと思っています。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る
というわけで、今回の実験から得た自分なりの結論は「はてなブログのフォトコンの企画は人工知能には置き換えられない!」でした。本当かな?我こそはという方は、フォトコン必勝人工知能を生成して私にそっと提供して下さい!!