LearningLog

主に機械学習について学んだことを残していく予定

Artistic-styleでムンクの叫び風のドラえもんを作る

やりたいこと

入力した画像を他の画像の作風(style)で描き直す.以下の例では猫の写真をゴッホ風に描き直している.

https://no2147483647.files.wordpress.com/2015/12/pogo-vangogh-mxnet_600px.png?w=1008

Deep learning for hackers with MXnet (2): Neural art | Number 2147483647

DNNを活かした面白い技術だと思うのでそれっぽい顔をしたドラえもん(アニメ)をムンクの叫び風に描き出してみる.

Artistic styleの基本

参考:A Neural Algorithm of Artistic Style

  • 2つの画像をVGGモデルに入力する.1つからContent,もう1つからStyleを抽出する.
  • content画像を入力し,最後の畳み込み層から得た出力をcontent representationとする.後段の層の出力を利用するのがポイント.後段であればある程より画像の抽象的な特徴を捉えているから.
  • style画像を入力し,それぞれの畳み込み層から計算したGram Matrixをstyle representationとする.Gram Matrixは画像内の位置的情報を取り除いてテクスチャ情報を抽出できるようだが,何故上手くいくかはよくわかっていないらしい.
  • content画像と同じrandom white noise画像をモデルに入力して,先程抽出した2つのrepresentationとの誤差を取り,noise画像を誤差逆伝播法で変更していく.

要は2枚の入力画像をCNNに通して一度抽象的な形にし,そこから画像を生成し直すということか.入力画像自体を変化させて最適化するというのは面白い.DNNの応用範囲の広さを改めて感じた.

 

結果

Practical Deep Learning part2の講義資料を元に実装してみた.part2はyoutubeで見られるが,まだ公開準備中という段階らしいのでリンクは貼らないでおく.

f:id:budti:20170718002759p:plain

上手くいったのかよくわからない結果,元の画像が顔に寄り過ぎか?contentとstyleのlossの比重など,ハイパーパラメータが多いので調整によってはもっと良い結果が得られるだろう.すまんドラえもん

Tips
  • artistic-styleではMax pooling(ある領域の最大値を得る)よりも,Average poolong(ある領域の平均を得る)方が良い.Max poolingは元の画像情報を失ってしまうため.
  • Keras modelクラスのget_layerで名前あるいはindexで指定した層を得られる.layerはoutputメソッドでその段階での出力を得られる.今回のように中間層の出力を利用する場合に便利そう.

 

AWSでdeep learningする上で必要な知識のまとめ2

AWSでp2インスタンスを作成するまでに登場する不明点を解明していく.

ステップ1:Amazonマシンイメージ(AMI)

参考:Amazon EC2 とは - Amazon Elastic Compute Cloud

AMIはOSやアプリケーションなどのソフトウェア構成を記録したテンプレート.以前利用したのは『Deep Learning AMI Ubuntu Version』というAMI.

これにはTensorflowやKerasといったdeep learning用のライブラリやPython3やjupyter notebookを含まれている.

Amazonが提供するAMI以外にも他業者が提供するAMIを利用したり自分で用意することも可能.

 

ステップ 2: インスタンスタイプの選択

インスタンスはアプリケーションを実行できる仮想サーバ.インスタンスタイプは利用するホストコンピュータのハードウェアを決定するもの.

タイプ毎に様々なメモリやストレージ等の組み合わせがあるので,用途に応じて選択する.GPU搭載のインスタンスはP2とG2があるが,deep learningをするなら汎用的に使えるP2一択か.

それと基本的にはインスタンスを終了したらデータは全て失われるが,Amazon S3やEBSに格納すればデータを保存できるらしい.一々学習用のデータを転送なんかしてられないので,これは是非とも利用したいところ.この辺の設定はステップ4:ストレージの追加で出来るようだ.

 

ステップ 6: セキュリティグループの設定

ステップ3~5はスキップして良いが,jupyter notebookを利用する場合はステップ6の設定が必要.セキュリティグループはインスタンストラフィックを制御する仮想ファイアウォールとして機能する,とのことだがよく分からんので調べてみる.

参考:https://n2p.co.jp/blog/tech/serverside/ec2-instance-2/

  • デフォルトでは『SSH接続,TCPプロトコルで22番ポートを使い全てのIPからの接続が可能』になっている.SSH接続は暗号鍵を用いた通信プロトコルインスタンス作成時にキーペアを作成するのはSSH接続に必要だから.
  • 暗号鍵を使っているとはいえ誰でもアクセスできるのは困るのでは,個人利用ならソースを"マイ IP"に変えておけば良さそう.
  • インスタンス上のjupyter notebookにローカルブラウザからアクセスするために,設定されているポートを開放しておく必要がある(デフォルトでは8888,configから変更可能)

後はキーペアを選択すればインスタンスが作成される.

 

おまけ:jupyter notebookの設定

参考:IPython notebookをリモート接続する - Qiita

        http://jupyter-notebook.readthedocs.io/en/latest/config.html

  • ip: デフォルトはlocalhost(生成したインスタンス) → 全てのIP
  • password: デフォルトは未設定 → sha1:<ハッシュ化されたパスワード>
  • open_browser: デフォルトはlocalでブラウザを開く → 開かない
  • port: デフォルトは8888 → ステップ6で指定したポート

AWSでdeep learningする上で必要な知識のまとめ1

 

モチベーション

CNNで画像認識をした際,とてもCPUでは計算しきれなかったので以下のサイトを参考にしながらAWSのp2インスタンスで学習したことがある.

何をやってるのか,そもそもAWSとは何なのかもよくわからないまま書かれている通りに動かしただけなので十分使いこなせていない.

今後もう少し複雑なモデルで学習する上で,どうしてもGPUが必要になるがすぐにGPU搭載マシンを購入する予定はないのでAWSをある程度使いこなせるようにしておく.自分はクラウド関係の知識が不足しているので丁度いい勉強になるだろう.

 

そもそもAWSって何

参考:絶対に知っておきたい!AWSとは?5分でわかる基礎知識

  • AWSamazonが提供するクラウドコンピューティングサービス(CCS)
  • CCSはネットワークを通じて既成のサービスを利用する方式
  • (特にEC2のようなインターネット経由の一般向けサービスを「パブリッククラウド」というらしい:wikipediaより)
  • AWSでは仮想サーバー(EC2),コンテンツ配信,ストレージ,データベースなどのサービスが利用可能
  • セキュリティの高さ,利用枠の柔軟性,従量課金制といったメリットから多くの企業で採用されている

成る程,ここら辺までは何となく察してた.じゃあ次は実際に利用する仮想サーバ(EC2)について調べてみよう.

 

仮想サーバ(EC2)って何

参考:サーバーの仮想化とは?仕組み、メリット・デメリットをわかりやすく解説します

  • 物理的な1台のサーバ上で複数の仮想的なサーバを運用することを「サーバの仮想化」という.
  • EC2で使われているXenはハイパーバイザー型の仮想化手法.ハイパーバイザーと呼ばれるソフトウェアが複数のゲストOSを運用する.処理速度が高い
  • メリット①省スペース,②リソースの有効活用,③拡張性など

EC2ではamazon保有する計算資源を提供するサービス.1人の利用者が物理的なサーバを丸々借りるのでは無くて,仮想化で分割されたものを借りてるということ.

概要は理解できたので,次回はAWSでp2インスタンスを作成する際に出てくる不明点を解きほぐしていこう.

 

 

『働きたくないイタチと言葉がわかるロボット』

副題:人工知能から考える「人と言葉」

概要

 この本の主題は以下の通り.

「言葉が分かること」と言えるには,少なくとも何ができなくてはならないか.

「言葉が分かる」ということは,少なくとも「何と違う」のか.

イタチ達が「どんな命令も理解して実行してくれるロボット」を開発する物語と解説が各章ごとに展開されていく.

各章では以下のトピックが取り上げられている.何れも「言葉を分かる」ために必要不可欠だが, それだけでは不十分であることが物語と解説で示されてそれを克服する技術が次章で紹介される形式になっている.

  1. 音声認識                  -「言葉を聞き取れること」
  2. 雑談システム           -「自然に雑談ができること」
  3. 質問応答システム    -「言葉の世界から出ないで質問に答えること」
  4. 画像認識                  - 「言葉と五感の情報を結び付けられること」
  5. 推論(含意関係認識)  -「文と文の論理的な関係が分かること」
  6. 単語の意味表現        -「単語の意味の知識を持つこと」
  7. ???                           -「相手の意図を推測すること」

感想

オートマトンチューリングマシンをテーマとした前著『白と黒の扉』や『精霊の箱』では解説量が少なかったが,本書は物語パートよりも解説パートの分量が多くなっている.内容に関してもただ技術を紹介するだけに留まらず,言語学や論理学に触れながら「言葉が分かる」ことについて深く切り込んでいる.

自然言語処理の入門書と思って読んでみたが,思っていたよりも広いトピックを扱っていて良い意味で裏切られた.一度読んだだけでは十分に理解できない程内容が詰まっているため,豊富な引用と併せて今後何度も読み直す一冊になりそうだ.

働きたくないイタチと言葉がわかるロボット  人工知能から考える「人と言葉」

働きたくないイタチと言葉がわかるロボット 人工知能から考える「人と言葉」

 

 

 

学習経過と予定

学習経過

・『ゼロから作るDeep Learning』を通読

・勉強会に何度か出てDeep Learning以外の機械学習の基礎をある程度学ぶ

・KerasやTensorflowを使って画像認識は出来るようになった

・以下のサイトのPart1を全て視聴した

course.fast.ai

 

予定 

①Practical Deep LearningのPart2を視聴する(今月中)

Part1のようにまだ整備されていないが,講義動画さえあれば何とかなるだろう.

 

②何かメイン に取り組める課題を見つける(出来れば自然言語処理の課題)

Practical Deep Learningの講師の一人,Rachel Thomasがblogで以下のように記している.

For self-learners, one of the risks is jumping around too much and starting scattered tutorials across a range of sites, but never going deep enough with any one thing.

 

 ③学習環境を整える(随時)

今までmac bookで頑張ってきたが,ある程度のデータ量を扱う場合はGPUが無いと厳しい.特にCNNはCPUでは太刀打ちできない.

しばらくはAWSを活用することになるだろうが,いずれは自分でGPU搭載マシーンを保有したい.

機械学習を学んだきっかけ&興味ある分野

機械学習を学んだきっかけ

・私は学生の頃はソフトウェアとはあまり縁が無く,理系だったのでメーカに就職することに何も疑問を持たなかった.当時私は心理学や仏教の本を多く読んで影響を受けていたので,単純に良い製品を作るだけでなく何か人の精神活動を直接支えられるような物を作りたいと考えていた.(当時はスマホが普及し始めていた頃で,自分にはその負の側面が色濃く写りって,こういう考えをしていたのだと思う)

結局具体的な考えは何も思い浮かばなかったので普通にメーカに就職した.

機械学習あるいは広くAIに興味を持ったきっかけは『明日,機械がヒトになる』という本だ.特に石黒浩氏の以下の言葉が強く印象に残っている.

ロボットが人間に受け入れられる存在になったときに,その中身を見れば,そこに人間の定義が書いてあるはずなんです.そういう「定義された人間」が感動するものが,本当の人間の感動かもしれない. 

deep learningブームにより堰を切ったように現れるAIビジネスを見ていく中で,今まで人の精神活動を間接的に支えるに過ぎなかったテクノロジーが,ついに直接的に支える所か人にとって代わる始める時代になったことを次第に実感するようになった.

・それまでは機械学習やAIについて全く無知で胡散臭いものとばかり考えていたが,もしかして自分が学生の頃に探していたものがそこにあるのでは無いか?と考えるようになる.ちょうど仕事で(組込み)ソフトウェア開発に携わることができ,自分が他のことよりもソフトウェア開発に向いていると感じている時分であった.

・以上が当初のモチベーションであったが,今はただただ機械学習が楽しいから勉強を続けている.本格的に勉強を初めて3ヶ月程度だが,誰に言われるでもなくここまで継続して勉強できるのは初めてだ.(もちろんインターネット上に存在する,かつてない量の勉強のためのリソースが継続の大きな支えになっているのは間違いないが…)

興味ある分野

自然言語処理(特に生成系)

⇛人の精神活動に最も関連が深そうな分野.『コンピュータが小説を書く日』のように小説を生成してみても面白いかもしれない.

②強化学習,自動運転

⇛組込み制御×機械学習で最もhotな分野であるため.今の仕事の中で機械学習に関われるようになるに越したことはない.

③特徴量の可視化