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.

Caffeでお手軽本格ディープラーニングアプリ @potatotips

3,262 views

Published on

2015-10-12 potatotips #22

Published in: Technology
  • Be the first to comment

Caffeでお手軽本格ディープラーニングアプリ @potatotips

  1. 1. Caffeでお手軽本格 ディープラーニング iOSアプリ TAKUYA (@noradaiko) potatotips #22
  2. 2. 松山 拓矢 • @noradaiko • フリーランス4年目 (元Yahoo!) • iOSアプリ,ウェブアプリなどを制作 • 機械学習に興味あり • 絵も描きます 2
  3. 3. め ん き き 麺利き 3
  4. 4. 4 麺利き 写真に基づいてラーメン屋を推薦するアプリ 入力
  5. 5. 5 ディープラーニング の技術を使用 + =
  6. 6. 画像認識に強い 機械学習アルゴリズム 6 ディープラーニングとは..
  7. 7. • 脳の神経構造を模倣したニューラルネットワークの一種 • 大量のデータから物体の特徴を自動的に学習 ‣ これまでは特徴の抽出方法は人間ががんばって用意していた 7 !
  8. 8. 作ろう ディープラーニングアプリ! 誰でも簡単に作れる方法をご紹介します 8
  9. 9. Caffe ディープラーニング用 フレームワーク • http://caffe.berkeleyvision.org/ • GPU演算(CUDA)で高速に学習できる • すぐに試せる学習済みモデルもある • Mac OSX対応 9
  10. 10. Caffe for iOS上で動くCaffe!!! • https://github.com/aleph7/caffe • Caffeのfork • iOS上で識別処理が実用に耐える速度で動かせる ‣ iPhone5sで1∼2秒 • サーバいらずで使える • ただしXCode7 はまだ非対応 10
  11. 11. Caffe for iOS サンプル作りました • https://github.com/noradaiko/ caffe-ios-sample • 単純な物体認識 • BLVC CaffeNet Modelを使用 11
  12. 12. demo
  13. 13. 使用するデータ • labels.txt: 識別結果を名前に変換するための一覧 • deploy.prototxt: ネットワーク定義 • mean.binaryproto: 平均画像 • bvlc_reference_caffenet.caffemodel: 学習済みデータ 13
  14. 14. 処理の流れ 1.識別対象の画像の読み込み • 像の画像 2.Classifierクラスの初期化 • 4つのモデルデータへのファイルパスを指定 3.Classifierの実行 • 画像を指定して結果を取得 4.識別結果の出力 14
  15. 15. UIImage* image = [UIImage imageNamed:@"sample.jpg"]; cv::Mat src_img, img; UIImageToMat(image, src_img); cv::cvtColor(src_img, img, CV_RGBA2BGRA); 画像の読み込み • UIImageを読み込み • cv::Mat形式に変換 • カラー配列をRGBAからBGRAに変換
  16. 16. // ファイルパスをstring型に変換 string model_file_str = std::string([model_file UTF8String]); string label_file_str = std::string([label_file UTF8String]); string trained_file_str = std::string([trained_file UTF8String]); string mean_file_str = std::string([mean_file UTF8String]); Classifier classifier = Classifier(model_file_str, trained_file_str, mean_file_str, label_file_str); Classifierの初期化 • モデル定義、ラベル、学習済みモデル、平均画像のパスを取得 • 各ファイルパスをstd::stringに変換 • Classifierのインスタンスを作成
  17. 17. // 識別の実行 std::vector<Prediction> result = classifier.Classify(img); Classifierの実行 • 画像を指定するだけ!
  18. 18. for (std::vector<Prediction>::iterator it = result.begin(); it != result.end(); ++it) { NSString* label = [NSString stringWithUTF8String:it->first.c_str()]; NSNumber* probability = [NSNumber numberWithFloat:it->second]; NSLog(@"label: %@, prob: %@", label, probability); } 識別結果の出力 • std:vector形式で複数の識別候補が得られる • iteratorで回して各候補を取得 • it->first: ラベル、it->second: 確率
  19. 19. まとめ • Caffeを使えばオリジナルの学習モデルが作れる • Caffe for iOSならサーバいらずで識別処理が出来る • サンプルプロジェクトのご紹介 • オリジナルの学習モデルでアプリを作ろう! 19
  20. 20. ご清聴ありがとうございました 20

×