Successfully reported this slideshow.
Your SlideShare is downloading. ×

はじめての人のためのDeep Learning

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 63 Ad

More Related Content

Slideshows for you (20)

Similar to はじめての人のためのDeep Learning (20)

Advertisement

Recently uploaded (20)

はじめての人のためのDeep Learning

  1. 1. はじめての人のためのDeepLearning (画像認識編) GMOインターネット 次世代システム研究室 中野唯一郎
  2. 2. 2 目次: 1. 既存のモデルで画像識別器作成 2. クラウドでモデルを学習 3. DLを利用したプログラム作成 4. まとめ
  3. 3. 3 そもそも なぜDeepLearningで 画像認識を研究?
  4. 4. 4 以前OpenCVでの画像認識をやってみたが X 顔、車など物体毎に設定ファイルの変更が必要 X 車の種類など細かい認識が難しい X 独自の物体認識器を作るのにも手間がかかる こういうった辛さも、流行のDeepLearningなら解 決してくれるのでは?という思いから
  5. 5. 5 研究内容: X 顔、車など物体毎に設定ファイルの変更が必要 X 車の種類など細かい認識が難しい →「1.既存のモデルで画像識別器作成」で解決策を 研究 X 独自の物体認識器を作るのにも手間がかかる →「2.クラウドでモデルを学習」で解決策を研究 最後に上記研究で蓄えた知識の応用として 「 3.DLを利用したプログラム作成」で研究
  6. 6. 6 自己紹介:中野唯一郎 ・2015/5~ GMOインターネット株式会社入社 次世代システム研究室所属 ・それまではSIer/コンサルでアパレル・官公庁の基 幹系システムを中心に12年間 ・センター試験-数学で200点満点中78点(しかも BASIC言語が50点)をとったほどの数学音痴 →今回の発表はそんなド素人がDeepLearningに触 れてみた内容の共有です。間違った内容はこっそ り教えて下さい
  7. 7. 7 目次: 1. 既存のモデルで画像識別器作成 2. クラウドでモデルを学習 3. DLを利用したプログラム作成 4. まとめ
  8. 8. 8 いきなりDemo
  9. 9. 9 簡単な手順で設定ファイル変更もなく、 詳細な識別ができる! https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%BC%E3%83%99%E3%83%AB%E3%83%9E%E3%83%B3
  10. 10. 10 Demo作成までに以下の工程を実施 以降でそれぞれを解説する 1. 理論実装 2. 環境構築 3. ニューラルネットワーク、学習モデル用意 4. 画像識別プログラム作成
  11. 11. 11 Demo作成までに必要な工程 1. 理論実装 2. 環境構築 3. ニューラルネットワーク、学習済モデル 4. 画像識別プログラム作成
  12. 12. 12 1.理論実装 DeepLearning関連理論の実装は避けられない・・・ →フレームワークを使えば解決!
  13. 13. 13 1.理論実装 代表的なDeepLearning フレームワーク • Caffe(←今回使用) - 現在のデファクトスタンダード - コミュニティが盛んで学習済モデル(後述)も豊富 - 情報が豊富であり馴染みやすいため今回使用 • Chainer - Jubatusでお馴染みのPFI社が作成 - 時系列等を扱えるRNN/LSTM対応 - ネットワーク設計のためのDSLが簡潔でわかりやすい • Deeplearning4j - 分散処理可能でHadoop上でも動作
  14. 14. 14 Demo作成までに必要な工程 1. 理論実装 2. 環境構築 3. ニューラルネットワーク、学習済モデル 4. 画像識別プログラム作成
  15. 15. 15 2.環境構築 Caffeは依存ライブラリが非常に多いため手動インストールは 辛い。。。 依存ライブラリ CUDA : GPUを使用するためのライブラリ。NVIDEIA提供。 BLAS: ベクトル/行列演算のための線形代数操作ライブラリ Boost: C++ユーティリティライブラリ Protobuf: データシリアライズライブラリ。Google Protocol Buffer LevelDB: 学習・評価データ格納用DB Snappy: データ圧縮・解凍ライブラリ HDF5: 大量数値データ保存用ライブラリ OpenCV: Computer Vision用ライブラリ and more...
  16. 16. 16 2.環境構築 with CUDA: GPU環境向け without CUDA: CPU環境向け https://github.com/aydindemircioglu/vagrantcaffe
  17. 17. 17 2.環境構築 > git clone https://github.com/aydindemircioglu/vagrantcaffe.git > cd ./vagrantcaffe/without.CUDA > vagrant up > vagrant ssh > cd /usr/local/caffe
  18. 18. 18 2.環境構築 後々エラーが起きるので、Caffeコードを一部修正 /usr/local/caffe/python/caffe/io.py:253行目 if ms != self.inputs[in_][1:]: - raise ValueError('Mean shape incompatible with input shape.') + # raise ValueError('Mean shape incompatible with input shape.') + in_shape = self.inputs[in_][1:] + m_min, m_max = mean.min(), mean.max() + normal_mean = (mean - m_min) / (m_max - m_min) + mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min
  19. 19. 19 2.環境構築 書籍「Caffeをはじめよう」(石橋崇司著 Oreilly刊行)より抜粋 というのもあり、CaffeのPythonモジュール修正は度々発生します “開発の中心組織であるBVLCのメンバーによると、 caffe.Netのみが公式サポートされており、それ 以外のモジュールは例として挙げているだけに過 ぎないとしています”
  20. 20. 20 Demo作成までに必要な工程 1. 理論実装 2. 環境構築 3. ニューラルネットワーク/学習済モデル 4. 画像識別プログラム作成
  21. 21. 21 3.ニューラルネットワーク、学習済モデル用意 Deep Learningを用いた画像認識では 1. ニューラルネットワークと呼ばれるモデルの定義 2. それを元に学習させた学習済モデル が動作に必要 →Caffeでは「Model Zoo」としてネット上に 公開! (※非商用ですけど、、、)
  22. 22. 22 3.ニューラルネットワーク、学習モデル用意 > cd /usr/local/caffe/examples/imagenet > wget https://raw.githubusercontent.com/sguada/caffe- public/master/models/get_caffe_reference_imagenet_model.sh > chmod u+x get_caffe_reference_imagenet_model.sh > ./get_caffe_reference_imagenet_model.sh > cd /usr/local/caffe/data/ilsvrc12 > ./get_ilsvrc_aux.sh
  23. 23. 23 3.ニューラルネットワーク、学習済モデル用意 ダウンロードファイルで重要なもの bvlc_reference_caffenet.caffemodel ・学習済モデル。1ファイルのみで対象カテゴリ全てに対応 deploy.prototxt ・ネットワーク定義ファイル ilsvrc_2012_mean.npy ・ImageNetデータセット画像の平均値 ・入力画像からこの値を減算し、正規化を行うため必要 synset.txt ・カテゴリと物体名の紐付け表(ex. nXXXX warplane) ・NNからの出力は無意味なNo.のため、これを人間のわかる名前に紐 付けるために必要
  24. 24. 24 Demo作成までに必要な工程 1. 理論実装 2. 環境構築 3. ニューラルネットワーク、学習済モデル 4. 画像識別プログラム作成
  25. 25. 25 4.識別プログラム作成 サンプルに格納されたプログラムをそのまま利用 /usr/local/caffe/python/caffe/classify.py(以下抜粋) # cpu/gpu切り替え if args.gpu: caffe.set_mode_gpu() print("GPU mode") else: caffe.set_mode_cpu() print("CPU mode") # モデルから対応カテゴリを予測し、npy形式で保存する predictions = classifier.predict(inputs, not args.center_only) np.save(args.output_file, predictions)
  26. 26. 26 4.識別プログラム作成 npy形式をsynset.txtと照合して該当カテゴリを表示する # synset_words.txtロード categories = numpy.loadtxt(sys.argv[1], str, delimiter="t") # npy形式データロード scores = numpy.load(sys.argv[2]) # score順にSortし、top_k数分だけカテゴリ表示する top_k = 3 prediction = zip(scores[0].tolist(), categories) prediction.sort(cmp=lambda x, y: cmp(x[0], y[0]), reverse=True) for rank, (score, name) in enumerate(prediction[:top_k], start=1): print('#%d | %s | %4.1f%%' % (rank, name, score * 100)) http://techblog.yahoo.co.jp/programming/caffe-intro/
  27. 27. 27 4.識別プログラム作成 コマンド実行 > python /usr/local/caffe/python/classify.py --raw_scale 255 /hoge.jpg /usr/local/caffe/result.npy 1>/dev/null 2>/dev/null ; python /usr/local/caffe/show_result.py /usr/local/caffe/data/ilsvrc12/synset_words.txt /usr/local/caffe/result.npy"
  28. 28. 28 以上の手順のみで 詳細な物体認識まで可能なことを検証
  29. 29. 29 目次: 1. 既存のモデルで画像識別器作成 2. クラウドでモデルを学習 3. DLを利用したプログラム作成 4. まとめ
  30. 30. 30 新しいオブジェクトを学習させるためには・・・ 大量の画像準備(1カテゴリに最低100枚以上) 画像リサイズ、LevelDB/LMDBへの登録 GPU搭載マシンの準備(CPUでもいいけど遅い) 各種パラメータの調整 etc.... OpenCVと同じくらいの手間。。。 もっと手軽にできないのか?
  31. 31. 31 https://www.labell.io/ja/
  32. 32. 32 Labellioとは? alpaca社が開発した画像認識を簡単に可能にするWeb プラットフォーム サーバ、ネットワークアキテクチャ等はチューニング 済みのものを使用 画像収集もBing/Flickerから取得可能 学習したモデルをCaffeの学習モデルとしてダウンロー ド可能 だれもが簡単に利用できて、それによって「新しい用 途」を生み出してほしいというコンセプト
  33. 33. 33 Labellioを使ったら 識別器作成も簡単そう!
  34. 34. 34 じゃあやってみよう!
  35. 35. 35 似ている芸能人を判別してみ よう 1. でんぱ組.inc 最上もが 2. きゃりーぱみゅぱみゅ削除
  36. 36. 36 Labellio使用手順 1. モデル名入力
  37. 37. 37 Labellio使用手順 2. Bingで検索するワードを登録する
  38. 38. 38 これだけ (数分で完了)
  39. 39. 39 Demo
  40. 40. 40 Labellio結果サンプル お手軽画像認識させるには充分な機能あり 簡単に試したいときにはかなり心強いサービス 削除
  41. 41. 41 目次: 1. 既存のモデルで画像識別器作成 2. クラウドでモデルを学習 3. DLを利用したプログラム作成 4. まとめ
  42. 42. 42 あらたな悩み
  43. 43. 43 今までの画像認識は一枚一オブジェクトしか対応していない #1| goose #2| hen #3| Kakatoe galerita ○ #1| unicycle (一輪車) #2| taxi #3| go-kart(ゴーカート) ? https://www.pakutaso.com/20110944268post-668.html http://www.ashinari.com/2015/09/18-393195.php?category=11
  44. 44. 44 複数オブジェクトでも なにがあるか認識できないか?
  45. 45. 45 (参考)http://demo.illustration2vec.net/ こういうのが理想!(これもDeepLearning) 削除
  46. 46. 46 実現はできそう! とりあえずやってみよう!
  47. 47. 47 複数オブジェクトへの対応への道: R-CNN 1. 画像をインプット 2. 画像から物体があると思われる領域を抽出する 3.4. DeepLearningを使い、領域毎に画像認識させる Girshick, R., Donahue, J., Darrell, T., & Malik, J. “Rich feature hierarchies for accurate object detection and semantic segmentation”. CVPR2014.
  48. 48. 48 物体があると思わえる領域を抽出する方法 CPMC(Constrained Parametric Min-Cuts) ・点を配置し、その周囲をグラフカット ・処理速度が遅いが、領域を高精度に判定 Selective Search ・色、輝度、テクスチャが似ている領域を探索し、物体検 出する ・高速だが精度はCPMCほどではない ・最近流行りの判定方法 →今回は処理速度が早く、モダンなSelective Searchを使用
  49. 49. 49 ただのR-CNNやるのも 面白く無いので、これを利用した プログラムを作ってみよう!
  50. 50. 50 R-CNNを利用したサムネイル抽出をしてみよう 画像中央を抽出 ? R-CNNを使って 重要な部分を抽出 https://www.pakutaso.com/20120109005post-1066.html 犬の一部が 欠けてる…
  51. 51. 51 (参考)白ヤギコーポレーション Blog http://aial.shiroyagi.co.jp/2014/12/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%8 3%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3% 82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E5%88%87%E3%82%8A%E6%8A%9C%E3 %81%8D/
  52. 52. 52 サムネイル抽出ロジック 1. SelectiveSearchで領域検出する 2. 検出した領域をDeepLearningにかけScoreを測る 3. Scoreの高いTop-Nを取得 4. Top-NのScoreを加算していき、最も高い点数を得 た領域のまん中を中心にしてサムネイル抽出する
  53. 53. 53 1. SelectiveSearchで領域検出する 赤い枠線で囲まれた領域を検出 それぞれをDLにかけ判別させる
  54. 54. 54 2. 検出した領域をDeepLearningにかけScoreを測る 3. Scoreの高いTop-Nを取得 Score: 0.462 Score: 0.456 Score: 0.460 ・・・
  55. 55. 55 4. (Y軸)得点総計の高い領域のまん中を中心にしてサムネイル抽出する 0.460 0.462 0.456
  56. 56. 56 R-CNNを利用したサムネイル抽出をしてみよう(結果) 画像中央を抽出 R-CNNを使って 重要な部分を抽出 https://www.pakutaso.com/20120109005post-1066.html 全体像が 写っている!
  57. 57. 57 Selective Searchコーディング例 ※Labellio のSelectiveSearchライブラリ使用 import selectivesearch # selective search実行 regionsにx,yの座標とそこからの距離が格納 img_lbl, regions = selectivesearch.selective_search(inputs[0], scale=100, sigma=0.9, min_size=10) for r in regions: # 同じ領域が検出されたら対象外 if r['rect'] in candidates: continue # 500ピクセル以下は対象が if r['size'] < 500: continue candidates.add(r['rect']) for x,y,w,h in candidates: imgar = inputs[0][y: y+h, x: x+w] predictions = classifier.predict([imgar], not args.center_only)
  58. 58. 58 当方式における課題 処理速度の遅さ ・領域毎に認識が走るため、時間がかかる →Fast R-CNNという新しい手法の導入(数百倍) →GPUサーバ導入 物体検出の精度 ・人間が重要だと思う領域を抜き出さないことがある →FaceDetectionなどの複数手法、複数パラメータ での抜き出しなど
  59. 59. 59 目次: 1. 既存のモデルで画像識別器をつくろう 2. クラウドでモデルを学習させよう 3. DLを利用したプログラムをつくろう 4. まとめ
  60. 60. 60 DeepLearning使えばいろんなことができそう 画像を分類分け、タグ付けをする 天気の判別 不審者の侵入検知 自分の好きな俳優だけが写っているシーンを抽出 好きな音楽ジャンルの動画を検索
  61. 61. 61 新しい分野だけにアイデアさえ思いつけ ば競争優位にたてるかも
  62. 62. 62 まずは気軽に試して、 次世代ビジネスのアイデアを育てよう!
  63. 63. 63 ご清聴ありがとうございました

×