Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kerasを用いた3次元検索エンジン@TFUG

3,685 views

Published on

2つのパートに分けてます。
最初のパートは新規に深層学習を用いてプロダクトを作るためのアプローチ方法です。
次のパートはそれを適用した3次元データ検索エンジンについての紹介です。

Published in: Science
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Kerasを用いた3次元検索エンジン@TFUG

  1. 1. Kerasを用いた3次元検索エ ンジン@TFUG 2017.11.16 Masaya Ogushi
  2. 2. The Goal▸ 戦略:深層学習の初期プロダクト作成までのアプローチ について知ってもらう ▸ 戦略を適用した結果:Kerasを用いた3次元CNNの手法 について知ってもらう 注意:今回の発表内容はあくまで個人の見解なので他の方のアプローチも知りたいです 2
  3. 3. Table of Contents 戦略 1. 正しい問題を探す 2. 正しい方法を探す a. 情報を集める 3. チャレンジし続ける a. 小さく試す b. チャレンジを多くする 4. フォーカス a. 正しい問題にフォーカスする b. 正しい方法の重要度を上げる 3 Reference: https://www.iconfinder.com/
  4. 4. Table of Contents 戦略を適用 1. Deep Learning Model: VoxNet a. 3D CNN b. 3D Max Pool c. Fully connected d. Output e. Train 2. 性能を向上するための技術 a. 精度 b. 速度 3. 結果 4
  5. 5. 自己紹介 ・大串 正矢 ・株式会社カブク ・機械学習エンジニア Twitter: @SnowGushiGit 5
  6. 6. Kabuku Inc. ・要求に応じた製造サービス の提供 - 3Dデータを受け取り3D printerなどを使って製造 を発注するケースがある 6 https://www.kabuku.co.jp/
  7. 7. 戦略 7
  8. 8. 戦略 正しい問題を探す 8
  9. 9. “Deep Learningであなたの問題の解 決したいですか?
  10. 10. 正しい問題を探す ▸ Deep learningを使用するのにベストなケー スは? ▹ 大抵のケース ▹ 画像処理 ▹ 音声認識 ▹ いくつかのケース ▹ 自然言語処理 ▹ 時系列解析 10
  11. 11. 正しい問題を探す ▸ Deep learningを使用するのにワーストな ケースは? ▹ 十分な学習データがない ▹ 事前学習済みモデルを用意出来ない ▹ 100%の精度が必要(機械学習全般) 11
  12. 12. 戦略 正しい方法を探す 12
  13. 13. “ 問題解決するためにベストな方法を どうやって探してますか?
  14. 14. “ググるか !!
  15. 15. “ ちょっと待って
  16. 16. Find the Right method ▸ どのようにDeep Learning のベストな解決 法を探しているか? (私の場合) ▹ Google scholar ▹ 論文検索用のエンジン ▹ 下記のことが得られます。 ▹ 良い方法 ▹ 良いキーワード ▹ どの大学や研究室がその問題に対して詳しいか ▹ メールマガジン ▹ 配信者によって洗練された情報を取得 16
  17. 17. Find the Right method ▸ どのようにDeep Learning のベストな解決 法を探しているか? (私の場合) ▹ 大学の研究室のサイト ▹ データがゲット出来るかも ▹ コードがゲット出来るかも ▹ GitXiv ▹ コードと論文がセットになっているサイト ▹ Twitter ▹ 最新の情報が取得出来るかも 17
  18. 18. Find the Right method ▸ どのようにDeep Learning のベストな解決法 を探しているか? (私の場合) ▹ 書籍 ▹ 体系的な知識 ▹ ArXiv ▹ 最新の手法 ▹ Github ▹ 実行可能なコード ▹ Google ▹ 上記で良いキーワードを知っているのでググる! 18
  19. 19. 戦略 チャレンジし続ける 19
  20. 20. “大量の学習データが集まった!! このデータ全て使用して学習!!
  21. 21. “ ちょっと待って
  22. 22. チャレンジし続ける ▸ 小さく試す ▹ もし大量の学習データを取得したら下記のことを試 してください。 ▹ 小さな学習データを準備 ▹ モジュールが正しく動作するか確認 ▹ 確認が簡単な綺麗なデータを使用 ▹ 大抵のモデルは“mnist”などでのデータが学習可能なので それで動作を確認する 22 Reference: https://www.tensorflow.org/get_started/mnist/beginners
  23. 23. チャレンジし続ける ▸ 多くのチャレンジ ▹ 精度を上げる手法は明確に分からない ▹ 結果の確認は必須 ▹ 学習データのロス、バリデーションデータのロスが下がらない場 合は止めましょう。 ▹ TensorBoardのような可視化ツールの使用 ▹ チャレンジの回数を増やすために計算速度を向上 しましょう。 ▹ GPUの使用 ▹ CPU最適化 23
  24. 24. 戦略 フォーカス 24
  25. 25. “ Deep learning は精度向上の手法が 多い。
  26. 26. “- モデル - どれだけ深くする? - どんな構造? - ハイパーパラメータの調整 - データの前処理 - データ オーギュメンテーション - Optimizer - SGD, Adam, など
  27. 27. フォーカス ▸ 正しい問題にフォーカス ▹ あなたの状況に依存 ▹ 十分な計算資源と十分なデータ ▹ 深く複雑なモデルに挑戦 ▹ 十分な計算資源だがデータが十分にない ▹ 学習済みモデルを探す ▹ 前処理とデータオーギュメンテーションにフォーカス 27
  28. 28. Focus ▸ 正しい問題にフォーカス ▹ あなたの状況に依存 ▹ 十分な計算資源がなく十分なデータもない ▹ 他の方法を考えましょう ▹ ロジスティック回帰、ランダムフォレストなど ▹ Deep learningは多分ベストチョイスではないです 28
  29. 29. 戦略を適用 Deep Learning applied to 3D objects 29
  30. 30. 戦略を適用 Deep Learning Model: VoxNet 30
  31. 31. “深層学習のモデルは多数存在... どのようにモデルを選ぶか
  32. 32. Deep Learning Model: VoxNet 32 ▸ 下記の3つを考慮しました(自分のケース) ▹ リソース ▹ コンピューターリソース ▹ 人手 ▹ パフォーマンス ▹ 要求性能 ▹ 速度 ▹ 実現スピード
  33. 33. Deep Learning Model: VoxNet 33 Reference: http://ri.cmu.edu/pub_files/2015/9/voxnet_maturana_scherer_iros15.pdf.
  34. 34. Deep Learning Model: VoxNet 34 ▸ VoxNet 利点 ▹ リソース ▹ 計算資源 ▹ 良い ▹ Memory 32GB (In my environment) ▹ GPU GeForce GTX 1080 (In my environment) ▹ パフォーマンス ▹ 精度 ▹ 83 % accuracy (Top model 95 %) ▹ 開発速度 ▹ オープンソース, シンプルなコード
  35. 35. 35 Deep Learning Model: VoxNet ▸ Voxelize ▹ 3D データ を 32 * 32 * 32 ボクセル データへ ▹ データのサイズを減らす
  36. 36. Deep Learning Model: VoxNet (3D CNN 3D objects) 36 ▸ Convolution 3D Reference: https://www.youtube.com/watch?v=ecbeIRVqD7g
  37. 37. Deep Learning Model: VoxNet (3D CNN 3D objects) 37 1 5 1 6 2 7 4 8 3 1 2 2 1 3 0 4 kernel: 2x2 stride: 2 Convolution 2D Input Image(4x4) 5 1 3 2 1*5+1*1 + 5*3+6*2 2*5+4*1 + 7*3+8*2 3*5+2*1 + 1*3+2*2 1*5+0*1 + 3*3+4*2 33 51 24 8 Convoluted Image(2x2)
  38. 38. Deep Learning Model: VoxNet (3D CNN 3D objects) 38 ▸ Convolution 3D
  39. 39. Deep Learning Model: VoxNet (3D CNN 3D objects) 39 ▸ Convolution 3D
  40. 40. Deep Learning Model: VoxNet (3D CNN 3D objects) 40 ▸ Convolution 3D
  41. 41. Deep Learning Model: VoxNet (3D CNN 3D objects) 41 ▸ Convolution 3D
  42. 42. Deep Learning Model: VoxNet (3D CNN 3D objects) 42 ▸ Convolution 3D
  43. 43. Deep Learning Model: VoxNet (3D CNN 3D objects) 43 ▸ Convolution 3D
  44. 44. Deep Learning Model: VoxNet (3D CNN 3D objects) 44 ▸ Convolution 3D
  45. 45. Deep Learning Model: VoxNet (3D CNN 3D objects) 45 32 回 ▸ Convolution 3D
  46. 46. Deep Learning Model: VoxNet (3D CNN 3D objects) 46 32 filter : : 3DCNN Conv3D(input_shape=(32, 32, 32, 1), filters=32, kernel_size=(5, 5, 5), strides=(2, 2, 2), data_format=”channels_last” ) ▸ Convolution 3D
  47. 47. Deep Learning Model: VoxNet (Max Pool3D) 47 1 5 1 6 2 7 4 8 3 1 2 2 1 3 0 4 6 8 3 4 Max pool Pooling size: 2 x 2 Stride: 2 ▸ Max Pool 2D Convolution Feature
  48. 48. Deep Learning Model: VoxNet (Max Pool3D) 48 ▸ Max Pool 3D Convolution Feature Pool window
  49. 49. Deep Learning Model: VoxNet (Max Pool3D) 49 Convolution Feature ▸ Max Pool 3D
  50. 50. Deep Learning Model: VoxNet (Max Pool3D) 50 Convolution Feature ▸ Max Pool 3D
  51. 51. Deep Learning Model: VoxNet (Max Pool3D) 51 MaxPooling3D(pool_size=(2, 2, 2), data_format='channels_last',) ▸ Max Pool 3D
  52. 52. Deep Learning Model: VoxNet (Max Pool3D) 52 ▸ Fully Connected and Output 3DCNN & 3DMaxPool : : Fully connected Dense 128 Dense number of class softmax
  53. 53. Deep Learning Model: VoxNet (Flatten, Dense) 53 ▸ Fully Connected and Output ▹ ソフトマックス関数 ▹ 出力を確率分布へ ▹ 微分が簡単に
  54. 54. Deep Learning Model: VoxNet (Output) 54 ▸ Fully Connected and Output model.add(Flatten()) model.add(Dense(128, activation='linear',)) model.add(Dense(output_dim=number_class, activation='linear',)) model.add(Activation("softmax"))
  55. 55. Deep Learning Model: VoxNet 55 model = Sequential() model.add(Conv3D(input_shape=(32, 32, 32, 1), filters=32, kernel_size=(5, 5, 5), strides=(2, 2, 2), data_format='channels_last',)) model.add(Conv3D(filters=32, kernel_size=(3, 3, 3), strides=(1, 1, 1), data_format='channels_last',)) model.add(MaxPooling3D(pool_size=(2, 2, 2), data_format='channels_last',)) model.add(Flatten()) model.add(Dense(128, activation='linear',)) model.add(Dense(output_dim=number_class, activation='linear',)) model.add(Activation(‘softmax’)) ▸ Model
  56. 56. Deep Learning Model: VoxNet 56 ▸ Train model.compile(loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_voxel_data, y_class_label)
  57. 57. 戦略を適用 性能を向上するための技術:精度 57
  58. 58. 性能を向上するための技術:精度 58 ▸ 性能向上へのアプローチ ▹ モデル ▹ 利点 ▹ 精度向上の手段が多彩 ▹ 欠点 ▹ 深いモデルほどリソースを消費 ▹ 性能向上が不明確 ▹ データ ▹ 利点 ▹ 効果がある程度明瞭 ▹ 欠点 ▹ 手段が限られている
  59. 59. 性能を向上するための技術:精度 59 ▸ バリデーションデータに対する精度向上の 施作 ▹ モデル ▹ RandomDropout ▹ LeakyRelu ▹ データ ▹ Data augmentation(3D data) ▹ Data increase ▹ Class weight をアンバランスなカテゴリのデー タに使用
  60. 60. 性能を向上するための技術:精度 60 ▸ データへアプローチ ▹ Data Augmentation は下記の点で優れている ▹ 効果が明確 ▹ 計算速度が層を深くするようなモデルと違って 上がらない
  61. 61. 性能を向上するための技術:精度 61 ▸ Data Augmentation ▹ 回転 ▹ シフト ▹ フリップ ▹ その他
  62. 62. 性能を向上するための技術:精度 62 ▸ Data Augmentation 3D ▹ Augmentation_matrix を変更する channel_images = [ndi.interpolation.affine_transform(x, augmentation_matrix, )for x in x_voxel] x = np.stack(channel_images, axis=0)
  63. 63. 性能を向上するための技術:精度 63 ▸ Data Augmentation 3D Rotation rotation_matrix_y = np.array([[np.cos(theta), 0, np.sin(theta) , 0], [0 , 1, 0 , 0], [-np.sin(theta), 0, np.cos(theta), 0], [0 , 0 , 0 , 1]])
  64. 64. 性能を向上するための技術:精度 64 ▸ Data increase 学習データにData augmentation したデータ を加える
  65. 65. 戦略を適用 性能を向上するための技術:速度 65
  66. 66. 性能を向上するための技術:速度 66 ▸ Deep Learningは多様な速度向上の手法 が存在 ▹ GPU(GeForce GTX 1080: Memory 8GB) ▹ CPU 最適化 ▹ マルチスレッド ▹ 特徴量データを予め用意すること
  67. 67. 性能を向上するための技術:速度 67 ▸ CPU 最適化 (TensorFlow build option) ▹ ソースからの独自ビルド bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma
  68. 68. 戦略を適用 結果 68
  69. 69. Results 69 ▸ バリデーションデータの精度
  70. 70. Results 70 Method Explanation Training (accuracy) Validation (accuracy) BaseLine BaseLine 90% 79% Shift_x_Shift_y Data augmentation(x-shift, y-shift) 80% 80% Shift_x_Shift_y_class _weight Data augmentation(x-shift, y-shift) + class weight 80% 83% Add_Shift_x_Shift_y_ class_weight Data augmentation(x-shift, y-shift) + class weight + ADD(x-shift, y-shift) 85% 85%
  71. 71. まとめ 71
  72. 72. まとめ 72
  73. 73. まとめ 73 Ref: https://www.iconfinder.com/, https://github.com/, https://arxiv.org/, http://www.gitxiv.com/, https://scholar.google.co.jp/ Right problem laboratory Rechallenge Focus ▸ 戦略 正しい問題 チャレンジ フォーカス正しい手法
  74. 74. Conclusion 74 ▸ Our case Data augmentation Modelのカスタマイズ 3D検索エンジン VoxNet オンデマンドマニュファ クチャリングサービス 正しい問題 チャレンジ フォーカス正しい手法
  75. 75. デモ 75
  76. 76. Demo 76 ▸ デモのビデオ
  77. 77. We’re hiring 77
  78. 78. “We are hiring!! 機械学習エンジニア https://www.kabuku.co.jp/jobs/machine-learning-engin eer フロントエンドエンジニア https://www.kabuku.co.jp/jobs/front-end-developer サーバーサイドエンジニア https://www.kabuku.co.jp/jobs/backend-developer
  79. 79. 79 THANKS! 質問があれば Twitter @SnowGushiGit masaya.ohgushi@kabuku.co.jp
  80. 80. References 80
  81. 81. References ▸ MNIST datasets ▹ https://www.tensorflow.org/get_started/mnist/beginners ▸ Flaticon ▹ www.flaticon.com ▸ 3D CNN-Action Recognition Part-1 ▹ https://www.youtube.com/watch?v=ecbeIRVqD7g&t=82s ▸ Bengio, Yoshua, et al. "Curriculum learning." Proceedings of the 26th annual international conference on machine learning. ACM, 2009. ▸ He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016. ▸ Yann, Margot Lisa-Jing, and Yichuan Tang. "Learning Deep Convolutional Neural Networks for X-Ray Protein Crystallization Image Analysis." AAAI. 2016. ▸ Maturana, Daniel, and Sebastian Scherer. "Voxnet: A 3d convolutional neural network for real-time object recognition." Intelligent Robots and Systems (IROS), 2015 IEEE/RSJ International Conference on. IEEE, 2015. 81
  82. 82. References ▸ Deep Learning Book ▹ http://www.deeplearningbook.org/ ▸ IconFinder ▹ https://www.iconfinder.com/, ▸ Github ▹ https://github.com/, ▸ Arxiv ▹ https://arxiv.org/ ▸ GitXiv ▹ http://www.gitxiv.com/ ▸ GoogleSchlor ▹ https://scholar.google.co.jp/ ▸ 82
  83. 83. Appendix 83
  84. 84. Appendix ▸ Twitterユーザーの探し方 ▹ In my case ▹ ファーストステップ ▹ 良いtweetをしている場合は良いtwitterユーザーの確率が 高い ▹ 良いTweet例 ▹ 論文 ▹ ブログ ▹ セカンドステップ ▹ 良いTwitterユーザーをフォローしているユーザーは良い Twitterユーザーの確率が高い 84

×