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.

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

62,023 views

Published on

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

Published in: Engineering
  • Be the first to comment

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. ありがとうございました

×