Using deeplearning4j to distinguish between Cats and Dogs
Kotlinで機械学習VGG16モデルで犬猫判断どこでもKotlin #32017/10/23エムスリー株式会社 Lukas Prasuhn
View Slide
自己紹介- M3のSoftware Engineer- 日本歴12年のドイツ人- Java経験が少ない → いきなりKotlin- Kotlin以外の得意言語- C++ (C++11まで)- PHP5- Github: https://github.com/lukasjapan- Twitter: @cvguy84- RaspberryPiをイジるのが好き- モデル1 は 1台- モデル3 は 3台
(私にとっての)Kotlinとは- めちゃ書きやすいJava- Kotlin/Javaの関係- KotlinはJavaの考え方より柔らかい- KotlinはJavaの資産を多く使っている- Kotlinの目的はJavaを使いやすくするため- Javaを尊敬しながら、Kotlinの利用者が急増
ディープラーニングとは- 機械学習の一種- ニューラルネットワーク(NN)を使用- 手法のざっくり説明- 答えを知っている入力データは大量ある- NNに入力データ+それに対する答えを学習させる- 他の入力データに対して答えが出力可能になる行列計算で答えを出せる学習させる時は行列の値を調整する
VGG16のモデル(NN)- 下記の問題を解くために作られたNN- 入力データは画像- 答えはラベル1000個に対する「自信度」- ラベルはimage-net.orgが定義- 金魚- ノートパソコン- 飛行機- ビーグル- ...- 比較的にシンプルで優秀- 16レイヤー
ラベルから犬猫判断- 画像は犬?猫?- image-net.orgのラベルを見たら- Egyptian_cat, Persian_cat, cougar, …- French_bulldog, toy_terrier, …- 判断提案1- cat, dogであるラベル(手動判断)の自信度を見る- 1000個もある- 自信度が低い場合、どうする?- 写真にヒントある?- 骨 → 犬、ネズミ → 猫、...- 判断提案2- VGG16ラベル → 犬猫関係を学習させる!
犬猫判断できるNNを作成- 犬猫写真+答えを大量DL(kaggle.com)- 全写真のVGG16ラベルを判定- VGG16ラベル+答え(犬、猫)を新NNに学習させる- そして連続判定- 写真 → VGG16 → 新NN → 犬、猫の「自信度」VGG16の1000個ラベルの「自信度」犬に対する「自信度」猫に対する「自信度」
ようやくKotlin登場!- 実装は何言語?- 機械学習世界ではPythonが強い- どこでもKotlin! 機械学習分野でもKotlin!- deeplearning4j- Javaのディープラーニングライブラリー- Skymind社がサポート(Softbankと共同)- これからPepperに入るかも- 当然だがKotlinで問題なく使える- 公式サンプルコードにも.ktファイルを目撃
deeplearning4jのモデルZOO- 有名なモデルを提供- VGG16もある- 学習済みモデルがDL可- 最初の実行時にモデルを裏でDL- ~490MB
ここでKotlinの一つのアピールポイント- outputはINDArray型である- deeplearning4j所属ライブラリの行列フォーマット- 扱いにくい(数学視点重視)- 答えは一行の行列で表す- Kotlinの拡張関数でListに置き換える- Kotlinの便利機能は直感的に使える- sort, map, ...
犬猫NNの実装- 公式サンプルコードを自分のニーズに合わせて、モデルを作成- VGG16ラベル+答えで学習させる- 学習済みモデルを保存(Serialize)- 答えは下記のように定義- 猫の場合:100%猫、0%犬- 犬の場合:0%猫、100%犬https://github.com/lukasjapancatsvsdogsgame
犬猫判断の実装- 保存モデルをDeserialize- VGG16モデルで得たラベルを入力- 犬猫それぞれの自信度出力
デモ(というかゲーム!)- TwitterAPIで #m3kt #catsdogs ハッシュタグを監視- ツイートのプロフィール写真で犬猫判断を行う- 結果はAPIで呟く @cvguy84- おまけでVGG16モデルの判断も教える- 「自信度」が高くなるプロフィール写真が勝つヒント:どうしても勝ちたい場合は、プロフィール写真を犬または猫に変えるhttps://github.com/lukasjapancatsvsdogsgame
最後に- http://www.fast.aiのディープラーニングコース- 機械学習世界で有名な「Jeremy Howard」が無料提供- Youtube動画- プログラマー向け- 数学的なことももちろん教えている- Python/Keras/...- 今日の内容はLesson 1+2
#m3kt #catsdogsぜひ呟いてみてね!https://github.com/lukasjapancatsvsdogsgame