O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Large Scale Jirou Classification - ディープラーニングによるラーメン二郎全店舗識別

177.656 visualizações

Publicada em

ディープラーニングによるラーメン二郎全店舗のラーメン画像識別を例に、学習および利用時のインタフェース(Slack、Twitter)に関するノウハウや失敗事例を共有します。
また、ディープラーニングを色々と試した際のノウハウをツール(mxnet-finetuner)としてまとめました

Publicada em: Engenharia
  • Entre para ver os comentários

Large Scale Jirou Classification - ディープラーニングによるラーメン二郎全店舗識別

  1. 1. 1 Large Scale Jirou Classification ディープラーニングによるラーメン二郎全店舗識別 NTT TECH CONFERENCE #2 2017年8月10日 NTTコムウェア 土井賢治
  2. 2. 本日の発表内容は 趣味で取り組んだ 成果をまとめたものです
  3. 3. 2 自己紹介 名前: 土井賢治 所属: NTTコムウェア ビジネスインキュベーション本部 業務: 機械学習(主にディープラーニング) 道路不具合検出システム開発
  4. 4. 3 . 1 3 . 2 道路不具合検出システム
  5. 5. 出典: https://www.nttcom.co.jp/news/cf16113001.html
  6. 6. 3 . 3 4 本日の内容 ラーメン二郎について スクレイピング ディープラーニングによる画像分類 学習、ファインチューニング 認識精度向上のための手法 Webサービス化 mxnet-finetuner
  7. 7. 突然ですが
  8. 8. 5 . 1 どこの二郎かわかりますか?
  9. 9. 5 . 2 5 . 3 神田神保町店 品川店
  10. 10. 参照 神田神保町店の二郎画像: 品川店の二郎画像: http://f.hatena.ne.jp/multiplexer/20090919110638 http://standaloneramenjiro.hatenablog.com/entry/2015/12/16/223506
  11. 11. 5 . 4 5 . 5 ラーメン二郎識別のモチベーション 社内勉強会にて、同僚がTensorflowを使って ラーメン二郎4店舗の画像を識別した話を 聞いたことがきっかけ (2017年4月頃)
  12. 12. 5 . 6 ラーメン二郎について 同僚曰く カルト的人気なラーメン屋 主に関東圏に暖簾わけをしている 店舗は現在41店舗 店舗毎に「味・見た目が多少異なる」 常連は見た目で店舗を見分けることができる 画像を見ても違いがわからなかったが、 とりあえず全41店舗の分類器を作ろうと思い立つ
  13. 13. 6 . 1 クローラーを開発してラーメン二郎画像を収集 主にtwitterやinstragram等から収集 全41店舗 計33130枚
  14. 14. 画像収集の際は、robots.txtを考慮したり、 収集先へ意図せず負荷をかけないよう注意
  15. 15. 6 . 2 どの店舗の画像なのか推定できる形で収集するのが重要 例えば、画像についたメッセージ 二郎 二郎品川店 二郎品川店 から 品川店 だけを抽出したい
  16. 16. 6 . 3 正規表現で取得 /(二郎(?:(?!二郎|店).)*店)/ ラーメン二郎素人の自分には、 画像が混ざったらもう分離できない…
  17. 17. 6 . 4 6 . 5 目視でノイズ除去 店舗ごとに集めた画像には、 自撮りや店舗外観や券売機、等々 ラーメン以外の画像が結構ある ざっくり15%程度を除去して計33130枚の データセットを準備した
  18. 18. 収集したラーメン二郎画像の内訳
  19. 19. 6 . 6 7 . 1 ディープラーニングによる画像分類
  20. 20. 7 . 2 画像分類の実例 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf
  21. 21. 7 . 3 CNN (畳み込みニューラルネット) 画像認識分野においてはCNNがデファクト 層の深いCNNの学習を深層学習(Deep Learning)と呼ぶ 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf
  22. 22. 7 . 4 大規模な学習と精度向上 ILSVRC (ImageNet Large Scale Visual Recognition Challenge) 出展http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf
  23. 23. 8 . 1 ラーメン二郎分類機の作成 DeepLearningフレームワークにMXNetを利用(速い) 各店舗50枚をテスト用に分離 ResNet-50モデルで学習
  24. 24. 8 . 2 学習結果 validationデータで約83%の精度そこそこイケてる?
  25. 25. 8 . 3 テストデータによるモデルの評価
  26. 26. 8 . 4 分類精度評価 Precision Recall F1-score avg / total 0.326 0.166 0.148 実態としては約3割程度の正解率 Precision(適合率): 検出件数にどの程度正解が含まれるか Recall(再現率): 正解をどの程度検出できるか F1-score: PrecisionとRecallの調和平均
  27. 27. 8 . 5 混同行列 ほぼほぼ荻窪店
  28. 28. 9 . 1 ファインチューニング ディープラーニングによる画像分類で定番の ファインチューニングを試してみる
  29. 29. 9 . 2 ファインチューニングとは 別の問題、別のデータセットで学習済みのモデルの パラメータをコピーし、新しいニューラルネットの パラメータの初期値として使うこと 下位層は固定して限られた上位層のみ再学習する ImageNetで学習済みのモデルを用いることが多い
  30. 30. 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf
  31. 31. 9 . 3 出展: CS231n: Convolutional Neural Networks for Visual Recognition
  32. 32. 9 . 4 9 . 5 ファインチューニングの使いどころ ディープラーニングを利用したいが、 学習データを大量に用意できない場合 通常の学習における問題 大量の学習用データが無ければ精度がでない 最近の性能の良いモデルは学習に1~2週間かかることもある ファインチューニングのメリット 比較的少ないデータでも精度が得られることが多い 学習済みモデルの汎化性能を引き継いだモデルを作成できる 最近は性能の良い各種モデルの学習済みモデルが公開されている
  33. 33. 9 . 6 ラーメン二郎データをファインチューニング フレームワークは同じくMXNet 各店舗50枚をテスト用に分離 ImageNetで学習済みのResNet50モデルを利用 学習済みモデルを使う以外は、 スクラッチでの学習と同様に学習してみる
  34. 34. 9 . 7 学習結果 スクラッチでの学習より約10%ほど高い約94%の精度
  35. 35. 9 . 8 テストデータによるモデルの評価
  36. 36. 9 . 9 分類精度評価 Precision Recall F1-score avg / total (scratch) 0.326 0.166 0.148 avg / total (finetune) 0.816 0.725 0.723 ファインチューニングの方がかなり精度が良い Precision(適合率): 検出件数にどの程度正解が含まれるか Recall(再現率): 正解をどの程度検出できるか F1-score: PrecisionとRecallの調和平均
  37. 37. 9 . 10 混同行列 かなり改善した(やや亀戸店)
  38. 38. 10 . 1 認識精度向上のための手法 (主にファインチューニングにおける)
  39. 39. 10 . 2 モデルの選択 どのモデルを選ぶ? → より表現力があり問題の処理に適したモデルを利用 ImageNetで学習済みのモデルが共有されている Alexnet, VGG, ResNet, etc どれを選ぶのがよいか、性能は?学習コストは?
  40. 40. ImageNet学習済みモデル性能比較
  41. 41. 10 . 310 . 4 データの追加、精度向上 まずは学習用データの量と質が大事 例えば、路面不具合であれば、 路面が正常なのか異常なのかの判断基準が重要 必要に応じて専門家の意見を仰ぐ等 データ品質を向上させる ※データが極端に少ない場合に高性能な モデルで学習すると性能がでないことが多い
  42. 42. 10 . 5 Optimizerの選択 様々なアルゴリズムが研究されている SGD AdaGrad RMSProp SGDNesterov AdaDelta Adam 一般に扱う問題が異なれば適するOptimizerも異なる
  43. 43. 10 . 6 Optimizerの違い(イメージ)
  44. 44. 10 . 7 データ拡張 学習用データが少ない場合に、元データを回転・輝度変 更・上下左右反転等してデータを水増しするのも有効 (参考画像: ) https://m2dsupsdlclass.github.io/lectures- labs/slides/03_conv_nets/
  45. 45. 10 . 8 モデルやOptimizerを変えて試す モデル: ImageNetで学習済みのinception-v3 learning rate: 0.0001 optimizer: NAdam 各種データ拡張実施
  46. 46. 10 . 9 学習結果 validationデータでの識別精度は約94%
  47. 47. 10 . 10 テストデータによるモデルの評価
  48. 48. 10 . 11 分類精度評価 Precision Recall F1-score avg / total (ResNet-50) 0.816 0.725 0.723 avg / total (inception-v3) 0.874 0.839 0.845 先程のファインチューニングの例に出した ResNet-50の場合と比べ識別精度が向上
  49. 49. 10 . 12 混同行列 さらに改善した
  50. 50. 11 . 1 サービス化 Slackに組み込んだ twitterのボットにした
  51. 51. 11 . 2 Slackのbotに二郎識別機能搭載
  52. 52. 11 . 3 twitterのbotに二郎識別機能搭載 @jirou_deepに画像をリプライすると店舗名を答えます
  53. 53. 12 . 1 mxnet-finetuner https://github.com/knjcode/mxnet-finetuner
  54. 54. 自動でファインチューニングして 結果をレポートしてくれるツールを作った ファインチューニングるまでの定形の作業を スクリプト化してDockerコンテナに詰め込んだ 学習用の画像を準備して、 各種学習用パラメータを書くだけで すぐにディープラーニングを試せます
  55. 55. 12 . 2 セットアップ $ git clone https://github.com/knjcode/mxnet-finetuner $ cd mxnet-finetuner $ bash setup.sh ホスト環境(GPU有無等)に応じて と が自動生成されます
  56. 56. 12 . 3 画像をクラス毎に分類して配置 images/ train/ airplanes/ airplane001.jpg cairplane002.jpg ... watch/ watch001.jpg watch002.jpg ... と も同じ構造で配置
  57. 57. 12 . 4 を書く finetune: pretrained_models: - imagenet1k-resnet-50 optimizers: - sgd num_epochs: 30 lr: 0.0001 lr_factor: 0.1 lr_step_epochs: 10,20 mom: 0.9 wd: 0.0001 batch_size: 20
  58. 58. 12 . 5 12 . 6 ファインチューニング $ docker-compose run finetuner
  59. 59. 12 . 7 学習結果のグラフ 先程お見せしたグラフが に出力されます
  60. 60. 12 . 8 テスト test: model_prefix: 201705292200-imagenet1k-nin-sgd model_epoch: 10 にテストしたい学習済みモデルを指定
  61. 61. 12 . 9 テスト実行 $ docker-compose run finetuner test
  62. 62. 12 . 10 テスト結果 先程お見せしたグラフが に出力されます
  63. 63. 12 . 11 学習後にSlackへ結果を自動アップロード
  64. 64. 12 . 12 ファインチューニング時の各種作業を自動実行 学習データの加工・整形 学習済みモデルの自動ダウンロード 用意したデータのクラス数に応じた学習済みモデルの整形 データ拡張 学習結果のグラフ化、混同行列や分類精度のレポート機能 Slackへの学習結果のアップロード jupyer notebook, etc https://github.com/knjcode/mxnet-finetuner
  65. 65. 13 まとめ ラーメン二郎の全41店舗の画像を収集 ファインチューニングにより識別精度約87%のモデルを作成 識別モデルをAPI化し、Slackやtwitterのbotに組み込んだ ノウハウをまとめツール化した(mxnet-finetuner) 実はまだラーメン二郎を食べたことがない
  66. 66. 14 参考 深層学習とその画像認識への応用に関する最近の研究動向 CS231n: Convolutional Neural Networks for Visual Recognition Optimizer : 深層学習における勾配法について 神田神保町店のラーメン二郎画像 (http://f.hatena.ne.jp/multiplexer/20090919110638) 品川店のラーメン二郎画像 (http://standaloneramenjiro.hatenablog.com/entry/2015/12/16/22350 道路不具合検出システムをAI技術で実現
  67. 67. ありがとうございました

×