$30 off During Our Annual Pro Sale. View Details »

Kotlinで機械学習:VGG16モデルで犬猫判断

Lukas
October 23, 2017

 Kotlinで機械学習:VGG16モデルで犬猫判断

Using deeplearning4j to distinguish between Cats and Dogs

Lukas

October 23, 2017
Tweet

More Decks by Lukas

Other Decks in Technology

Transcript

  1. Kotlinで機械学習
    VGG16モデルで犬猫判断
    どこでもKotlin #3
    2017/10/23
    エムスリー株式会社 Lukas Prasuhn

    View Slide

  2. 自己紹介
    - M3のSoftware Engineer
    - 日本歴12年のドイツ人
    - Java経験が少ない → いきなりKotlin
    - Kotlin以外の得意言語
    - C++ (C++11まで)
    - PHP5
    - Github: https://github.com/lukasjapan
    - Twitter: @cvguy84
    - RaspberryPiをイジるのが好き
    - モデル1 は 1台
    - モデル3 は 3台

    View Slide

  3. (私にとっての)Kotlinとは
    - めちゃ書きやすいJava
    - Kotlin/Javaの関係
    - KotlinはJavaの考え方より柔らかい
    - KotlinはJavaの資産を多く使っている
    - Kotlinの目的はJavaを使いやすくするため
    - Javaを尊敬しながら、Kotlinの利用者が急増

    View Slide

  4. ディープラーニングとは
    - 機械学習の一種
    - ニューラルネットワーク(NN)を使用
    - 手法のざっくり説明
    - 答えを知っている入力データは大量ある
    - NNに入力データ+それに対する答えを学習させる
    - 他の入力データに対して答えが出力可能になる
    行列計算で答えを出
    せる
    学習させる時は行列
    の値を調整する

    View Slide

  5. VGG16のモデル(NN)
    - 下記の問題を解くために作られたNN
    - 入力データは画像
    - 答えはラベル1000個に対する「自信度」
    - ラベルはimage-net.orgが定義
    - 金魚
    - ノートパソコン
    - 飛行機
    - ビーグル
    - ...
    - 比較的にシンプルで優秀
    - 16レイヤー

    View Slide

  6. ラベルから犬猫判断
    - 画像は犬?猫?
    - image-net.orgのラベルを見たら
    - Egyptian_cat, Persian_cat, cougar, …
    - French_bulldog, toy_terrier, …
    - 判断提案1
    - cat, dogであるラベル(手動判断)の自信度を見る
    - 1000個もある
    - 自信度が低い場合、どうする?
    - 写真にヒントある?
    - 骨 → 犬、ネズミ → 猫、...
    - 判断提案2
    - VGG16ラベル → 犬猫関係を学習させる!

    View Slide

  7. 犬猫判断できるNNを作成
    - 犬猫写真+答えを大量DL(kaggle.com)
    - 全写真のVGG16ラベルを判定
    - VGG16ラベル+答え(犬、猫)を新NNに学習させる
    - そして連続判定
    - 写真 → VGG16 → 新NN → 犬、猫の「自信度」
    VGG16の1000個ラベル
    の「自信度」
    犬に対する「自信度」
    猫に対する「自信度」

    View Slide

  8. ようやくKotlin登場!
    - 実装は何言語?
    - 機械学習世界ではPythonが強い
    - どこでもKotlin! 機械学習分野でもKotlin!
    - deeplearning4j
    - Javaのディープラーニングライブラリー
    - Skymind社がサポート(Softbankと共同)
    - これからPepperに入るかも
    - 当然だがKotlinで問題なく使える
    - 公式サンプルコードにも.ktファイルを目撃

    View Slide

  9. deeplearning4jのモデルZOO
    - 有名なモデルを提供
    - VGG16もある
    - 学習済みモデルがDL可
    - 最初の実行時にモデルを裏でDL
    - ~490MB

    View Slide

  10. ここでKotlinの一つのアピールポイント
    - outputはINDArray型である
    - deeplearning4j所属ライブラリの行列フォーマット
    - 扱いにくい(数学視点重視)
    - 答えは一行の行列で表す
    - Kotlinの拡張関数でListに置き換える
    - Kotlinの便利機能は直感的に使える
    - sort, map, ...

    View Slide

  11. 犬猫NNの実装
    - 公式サンプルコードを自分のニーズに合わせて、モデルを作成
    - VGG16ラベル+答えで学習させる
    - 学習済みモデルを保存(Serialize)
    - 答えは下記のように定義
    - 猫の場合:100%猫、0%犬
    - 犬の場合:0%猫、100%犬
    https://github.com/lukasjapan
    catsvsdogsgame

    View Slide

  12. 犬猫判断の実装
    - 保存モデルをDeserialize
    - VGG16モデルで得たラベルを入力
    - 犬猫それぞれの自信度出力

    View Slide

  13. デモ(というかゲーム!)
    - TwitterAPIで #m3kt #catsdogs ハッシュタグを監視
    - ツイートのプロフィール写真で犬猫判断を行う
    - 結果はAPIで呟く @cvguy84
    - おまけでVGG16モデルの判断も教える
    - 「自信度」が高くなるプロフィール写真が勝つ
    ヒント:どうしても勝ちたい場合は、プロフィール写真を犬または猫に変える
    https://github.com/lukasjapan
    catsvsdogsgame

    View Slide

  14. 最後に
    - http://www.fast.aiのディープラーニングコース
    - 機械学習世界で有名な「Jeremy Howard」が無料提供
    - Youtube動画
    - プログラマー向け
    - 数学的なことももちろん教えている
    - Python/Keras/...
    - 今日の内容はLesson 1+2

    View Slide

  15. #m3kt #catsdogs
    ぜひ呟いてみてね!
    https://github.com/lukasjapan
    catsvsdogsgame

    View Slide