
2017/07/01 chainer 다운 그레이드에 대해 추기
글쎄 T 셔츠를 손에 넣기 위해 인공 지능을 사용해 보는 것을 생각했습니다
글쎄 블로그 사진 콘테스트 매년 도전하고 있는데, 1 번 낙선, 2 회 입상하는 성적입니다. 올해야말로 T 셔츠 절대 획득하는 단단한 생각을 가지고 있습니다. 포토 콘에서이기려면 어떻게해야 할까. 항상 고민이 어떤 사진을 포토 콘내는 하나입니다. 과거에도 더 많은 사진을 내고 있으면 수상 할 수 있었던 것은 아닌지? 생각도 많이 남아 있습니다 (착각지도입니다 만).
하지만 어느 것이 포토 콘에서 수상 할 사진 따윈 알 리가 없습니다 ... 음, 사진을 보는 것만으로 마법처럼 판별 해주는 편리한 것이 있으면 ... まてよ 인류는 깊은 학습이 아닌가! 이것을 사용하면 무엇이든 할 수있을 것! 분명 포토 콘의 수상 사진을 확인 하다니 차 아이 여러번의 것!
그래서, 글쎄 블로그 포토 콘에서 글쎄 T 셔츠를 획득 할 수 있는지 판별하는 인공 지능을 자작 해보기로했습니다. 참고로, 여기에서 잠시 우주 어를 계속하기 때문에 잘 모르는 사람은 마지막 정리 만 보거나, 여기에서 이탈하는 것이 더 낫다. 덧붙여서 먼저 말해두면 제목과 전혀 작동하지 않았다.
GUI의 깊은 학습 도구 CSLAIER 개요 및 설치
CSLAIER이란?
이번에는 딥 러닝의 학습과 판별에 CSLAIER는 SONY와 UEI가 개발 한 딥 러닝 GUI 도구를 사용합니다. 이것을 사용하면 GUI에서 직관적으로 깊은 학습을 사용할 수 있으므로 매우 좋다. 자세한 내용은 개발자의 한 id : shi3z 씨의 다음 책을 읽는 것이 가장 좋다고 생각합니다.
도구 자체는 GitHub에서 MIT 라이센스로 공개되어있어 누구나 상업용도 개인도 사용할 수 있도록되어 있습니다. 훌륭하네요. 딥 러닝의 프레임 워크는 국산 Chainer이라는 프레임 워크를 사용하고 있습니다.
Chainer에서 이미지 인식 등 이전 안개도 있습니다. 관심있는 분은 아래 참조
학습에 관해서는 좀처럼 간편하게 나가는 방법이 없어 주저가 밟고있었습니다 만, CSLAIER를 사용하면 아주 쉽게 학습에서 결정까지 실시하는 것이 가능합니다.
CSLAIER 설치
공식은 다음 GitHub의 REAME에 써 있습니다.
기본적으로 공식 따르면 좋겠지 만, 참고로 자신이 Mac에서 pyenv를 사용하여 설정 한 예를 기재해야합니다. 다음은 기본 자신의 메모이므로 잘되지 않는 경우는 공식을 참고하자.
먼저 다음 문서를 참조에 pyenv-virtualenvインストール있는 곳까지 실시합니다.
그 후에는 CSLAIER 용 가상 환경을 구축하여 가상 환경에 들어갑니다.
$ pyenv global anaconda-2.4.0
$ 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
추기 2017 년 7 월 현재 chainer의 메이저 버전 업에 의해 작동하지 않을 것입니다. 다음으로 chainer다운 그레이드하십시오.
$ pip uninstall chainer $ pip install chainer = = 1.8.1
이제 설치 완료했기 때문에 다음에 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를 클릭하십시오 
다음 Start Train을 클릭하면 학습의 설정 화면입니다. 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 셔츠를 획득하려고했지만, 자신의 힘으로는 침팬지 다음의 인공 지능 밖에 생산할 수 없습니다. 딥 러닝라는 기본 블랙 박스이므로, 잘 때는 좋지만 잘못 때라고 원인을 알아 보는 것이 힘들군요. 결국 네트워크를 시행 착오로 바꾸어 보거나 데이터 량을 땅땅 증가 정도 밖에 할 수있는 일이없는 생각이 있습니다.
모르는 나름대로 원인을 추정하려면, 사진에 너무 공통점이 없어 인공 지능으로 판별하는 특징 량을 잘 추출 할 수 없었 않을까? 마음대로 생각합니다.
하지만 이번에는 잘 안하지만 이렇게 쉽게 깊은 학습하는 최첨단 기술이 아마추어도 쉽게 시험 할 수있게 된 것은 꽤 대단한 것이군요. 그냥 이대로 블랙 박스으로 마술로 깊은 학습을 계속하는 것은 치명적인 실수하고도주의하지 않으며 가능성이 높거나, 도구 사용에 대한 용어를 모르거나, 도구없이 무엇 수 없게되어 버리는 것이 자신 으로서는 싫은 느낌이므로 다음과 같은 풀 스크래치로 깊은 학습을 구현할 수 있도록 책을 읽고 이론 쪽을 보완 해 나가고 싶다고 생각하고 있습니다.
이 책은 시간에 걸쳐 읽을만한 명작! (내 생각)
그래서, 이번 실험에서 얻은 나름대로의 결론은 "글쎄 블로그 포토 콘의 기획은 인공 지능은 대체하지 않습니다!"였습니다. 사실 일까? 내노라하는 분들은 포토 콘 필승 인공 지능을 생성하고 나에게 살며시 제공하십시오! !
==============================================================
はてなブログのフォトコンで人工知能を使ってはてなTシャツをゲットするためGUIのディープラーニングツール「CSLAIER」を使ってみた

2017/07/01 chainerのダウングレードに関して追記
はてなTシャツを手に入れるために人工知能を使ってみることを考えました
はてなブログのフォトコンテスト、毎年挑戦しているのですが、1回落選、2回入賞という成績です。今年こそTシャツ絶対ゲットするという堅い思いを持っています。フォトコンで勝つためにはどうすれば良いか。いつも悩むのが、どの写真をフォトコンに出すかです。過去も他の写真を出していれば受賞できていたのでは?と思うことも多々有ります(勘違いかもですが)。
でも、どれがフォトコンで受賞できる写真かなんて分かるわけがありません…うーん、写真をみるだけで魔法のように判別してくれる便利なものがあれば…まてよ、人類にはディープラーニングがあるじゃないか!これを使えば何でもできるはず!きっとフォトコンの受賞写真を判別するなんてお茶の子さいさいのはず!
というわけで、はてなブログのフォトコンではてなTシャツをゲットできるか判別する人工知能を自作してみることにしました。ちなみに、ここからしばらく宇宙語が続くので、よくわからない人は、最後のまとめだけ見るか、ここで離脱した方がベターです。ちなみに最初に言っておくとタイトルの通り全然うまくいきませんでした。
GUIのディープラーニングツールCSLAIERの概要とセットアップ
CSLAIERとは?
今回は、ディープラーニングの学習と判別にCSLAIERというSONYとUEIが開発したディープラーニングのGUIツールを使います。これを使うとGUIで直感的にディープラーニングを使えるので非常に良いです。詳しくは、開発者の一人の id:shi3z さんの以下の著書を読むのが一番よいと思います。
ツール自体は、GitHubでMITライセンスで公開されていて、誰でも商用にも個人用にも使用できるようになっています。素晴らしいですね。ディープラーニングのフレームワークは、国産のChainerというフレームワークが使用されています。
Chainerでの画像認識などは、以前やったりしています。興味ある方は以下参照ください
学習に関しては、なかなか手軽にやる方法がなく二の足の踏んでいたのですが、CSLAIERを使うと非常に簡単に学習から判別まで実施することが可能になります。
CSLAIERセットアップ
公式は、以下GitHubのREAMEに書いてあります。
基本的には公式に従えばよいのですが、参考までに自分がMacでpyenvを使って設定した例を記載しておきます。以下は基本自分のメモなのでうまくいかない場合は公式を参考にしましょう。
まず、以下記事を参照に、pyenv-virtualenvインストールのところまで実施します。
そのあとはCSLAIER用の仮想環境を構築して、仮想環境に入ります。
$ pyenv global anaconda-2.4.0
$ 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
追記、2017年7月現在、chainerのメジャーバージョンアップにより動作しなくなっているようです。以下でchainerのダウングレードをして下さい。
$ pip uninstall chainer $ pip install chainer==1.8.1
これでセットアップ完了したので、以下で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をクリックします 
次にStart Trainをクリックすると学習の設定画面になります。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シャツをゲットしようとしたのですが、自分の力ではチンパンジー以下の人工知能しか生み出すことはできませんでした。ディープラーニングって基本ブラックボックスなので、うまくいったときは良いのですがうまくいかないときって原因を調べるのが辛いですね。結局ネットワークを試行錯誤で変えてみたり、データ量をガンガン増やすくらいしかやれることがない気がしています。
わからないなりに原因を推察するに、写真にあまりに共通点がなくて人工知能で判別するような特徴量をうまく抽出することができなかったんじゃないかな?と勝手に思っています。
しかし、今回はうまくいかなかったとはいえ、こうやって手軽にディープラーニングという最先端技術が素人にも簡単に試せるようになったのはなかなか凄いことですね。ただ、このままブラックボックス的に黒魔術としてディープラーニングを使い続けるのは、致命的な間違いしていても気づかなかったりする可能性が高かったり、ツールの使い方の用語が分からなかったり、ツール無しでは何もできなくなってしまうのが自分としては嫌な感じなので、以下のようなフルスクラッチでディープラーニングを実装できるような本を読んで、理論の方を補完していきたいなと思っています。
この本は時間かけて読む価値のある名著!(と思う)
というわけで、今回の実験から得た自分なりの結論は「はてなブログのフォトコンの企画は人工知能には置き換えられない!」でした。本当かな?我こそはという方は、フォトコン必勝人工知能を生成して私にそっと提供して下さい!!
[출처] https://karaage.hatenadiary.jp/entry/2017/04/24/073000






