FindYourCandyでの転移学習の話

 FindYourCandyでの転移学習の話

B5e4cea01a88ca6e79a962b3e0004405?s=128

Norihiro Shimoda

June 14, 2017
Tweet

Transcript

  1. FindYourCandyにおける 転移学習の話 by  Norihiro Shimdoa

  2. ⾃自⼰己紹介 • 下⽥田倫倫⼤大(@rindai87) • データ分析専業の企業のエンジニアマネージャー • TensorFlow User  Group(TFUG)主催者 •

    最近GDE(Google  Developer  Expert)のML  Expertにな りました
  3. 特別ゲストがきたので I/Oの話はスキップします Google  I/O報告会で話をして 資料料は公開済みです

  4. URL:  https://speakerdeck.com/rindai87/o-‐‑‒bao-‐‑‒gao-‐‑‒hui-‐‑‒ml-‐‑‒dan-‐‑‒dang Google  I/O  報告会での資料料は公開済み

  5. 体験ブースで展⽰示中のコイツの話 FindYourCandy

  6. TFUG#5での発表 URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/

  7. URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/#/6 この説明で理理解しろ だなんて無茶茶だよな

  8. 本⽇日の話 転移学習(画像)

  9. 画像認識識をしたい時 • 深層学習が精度度⾼高そうだしやりたい • 深層学習で画像処理理といえばCNN • Kerasを使うと簡単にできるらしい

  10. Keras • TensorFlowをバックエンドに持つラッパーライブラリ – データサイエンティストには⽣生TFより⼈人気な印象

  11. KerasでCNN

  12. None
  13. KerasでCNN フィルタサイズ はコレで良良い? プーリングのサイズは? 全結合層のユニット サイズは? ドロップアウトする? そもそも何層にする?

  14. ⼀一から取り組むCNNは初⼼心者に優しくない • パラメータ多すぎ問題 • うまくいったらいいけど、いかない時すごい⼤大変

  15. 学習済みモデル すでに学習された 精度度の良良いモデル

  16. 学習済みモデルを使う • オープンソースでけっこう公開されています • 例例えばGoogleによって公開されているInception  V3 URL:https://github.com/tensorflow/models/tree/master/inception

  17. Kerasで学習済みモデルを使う この2⾏行行でinception  v3 が使えるようになる! この2⾏行行でinception  v3 が使えるようになる!

  18. 学習済みモデルの問題 • 学習してないものには弱い、というか対応できない • Kerasの学習済みモデルはコンテストで使われたものなの で、1000クラスを分類するようにできている – つまり、1000クラスに⼊入っていなければ、まともに分類でき ない •

    何とかうまく学習済みモデルを使いたい – 最後だけちょろっと学習させたらけっこう良良いという – それが転移学習や!
  19. 転移学習 学習済みモデルを使いつつ 独⾃自の概念念も学習させる

  20. 転移学習イメージ • 追加で適当に層を追加する • 適当なので、何層つけたら良良いかとかはまあやっぱり分 からない 端っこのここ(出⼒力力層)を 取っ払ってネットワークを 追加する

  21. URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/#/6 追加したネットワーク (ただし、けっこう適当)

  22. 転移学習その他 • Fine-‐‑‒tuneっていうのもあります • 層の⼀一部だけ学習させるというやつ 出⼒力力層近くの ⼀一部だけ学習させる その他はそのまま

  23. FindYourCandyの場合 CloudMLを使っての 転移学習の実現

  24. None
  25. FindYourCandyの場合 • 1⽉月後半からの⼀一ヶ⽉月程度度の開発 – TensorFlow v1.0が出る前 • つまりKerasの統合が発表される前 – Cloud

     MLはv0.11,  v0.12が混在して割当てられる • 発⽣生した問題あれこれ – TFのバージョン違いによるモデルのフォーマット違い – そもそも⽣生TF使っても、Protobufのバージョンによって InceptionV3がうまく読み込めない! – etc…
  26. 思いつきました • 1つのネットワークで全部転移学習させる必要はない • アイデア:ネットワークを分割する – ネットワーク1:最終層を取ったInception-‐‑‒V3 • ⼊入⼒力力:画像、出⼒力力:ネットワークを通った後の特徴量量 •

    実⾏行行環境:ローカルのTensorFlow – ネットワーク2:中間層2のFull-‐‑‒connectedなNN • ⼊入⼒力力:Inception-‐‑‒V3を通った特徴量量、出⼒力力:ラベルに属する確率率率 • 実⾏行行環境:Cloud  ML  Engine
  27. ネットワーク1 ネットワーク2

  28. ちゃんとできた! • それなりにいい感じに動いている! – デモなので定性的な評価 • クラウドに画像データを持っていかなくて良良い! – 帯域の節約になる •

    Cloud  ML  Engineはクラスタの⽴立立ち上がりが読めない – 早い時もあれば遅い時もある
  29. まとめ • Kerasを使うとモデル作るのはけっこう簡単 • ただし、パラメータ多すぎるし案外何やったらいいかわ からなくなる • 学習済みモデルを使おう!転移学習をやってみよう! • FindYourCandyでも転移学習は活躍しています

  30. Thanks!!