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.

ディープラーニングによるラーメン二郎全店舗識別と生成

17,828 views

Published on

角川アスキー総合研究所主催のイベント「創作とディープラーニングの出会い」 (http://lab-kadokawa30.peatix.com/) での発表資料です

Published in: Engineering
  • Be the first to comment

ディープラーニングによるラーメン二郎全店舗識別と生成

  1. 1. ディープラーニングによる ラーメン二郎全店舗識別と生成 創作とディープラーニングの出会い 2017年9月6日 NTTコムウェア土井賢治 1
  2. 2. 本日の発表内容は 趣味で取り組んだ 成果をまとめたものであり にて発表した 「 」 を元に再構成したものです NTT Tech Conference #2 Large Scale Jirou Classification ディープラーニングによるラーメン二郎全店舗識別 2
  3. 3. 自己紹介 名前: 土井賢治(@knjcode) 所属: NTTコムウェア ビジネスインキュベーション本部 業務: 機械学習(主にディープラーニング) 道路不具合検出システム ドローン・IoT関連 3 . 1
  4. 4. 道路不具合検出システム 3 . 2
  5. 5. 出典: https://www.nttcom.co.jp/news/cf16113001.html 3 . 3
  6. 6. 本日の内容ラーメン二郎について二郎画像のスクレイピングディープラーニングによる画像分類学習、ファインチューニング認識精度向上のための工夫Webサービス化GANによるラーメン二郎画像生成(new!) mxnet-finetuner 4
  7. 7. 突然ですが 5 . 1
  8. 8. どこの二郎かわかりますか? 5 . 2
  9. 9. 三田本店 神田神保町店 環七一之江店 ※上記ラーメン二郎の画像は同僚による撮影です 5 . 3
  10. 10. ラーメン二郎識別のモチベーション 社内勉強会にて、同僚がTensorflowを使って ラーメン二郎4店舗の画像を識別した話を 聞いたことがきっかけ (2017年4月頃) 6 . 1
  11. 11. ラーメン二郎について 同僚曰く カルト的人気なラーメン屋 主に関東圏に暖簾わけをしている 店舗は41店舗(2017年4月時点) 店舗毎に「味・見た目が多少異なる」 常連は見た目で店舗を見分けることができる この当時、画像を見ても全然違いがわからなかったが、 ジロリアンには容易に見分けられる人もいることに驚き 全41店舗対応の分類器を作ろうと決意 6 . 2
  12. 12. クローラーを開発してラーメン二郎画像を収集 主にtwitterやinstragram等から収集 全41店舗分 計33130枚 7 . 1
  13. 13. 画像収集の際は、robots.txtを考慮したり、 収集先へ意図せず負荷をかけないよう注意 7 . 2
  14. 14. 画像収集時点で分類しておく どの店舗の画像なのか推定できる形で収集するのが重要 画像のタグから特定できれば良いが、 例えば、画像についたメッセージ 「二郎なう@ラーメン二郎品川店 #二郎品川店」 から 「品川店」だけを抽出したい 7 . 3
  15. 15. 正規表現で取得 /(二郎(?:(?!二郎|店).)*店)/ ラーメン二郎素人の自分には、 画像が混ざったらもう分離できない… 7 . 4
  16. 16. 目視でノイズ除去 店舗ごとに収集した画像にも、 自撮りや店舗外観や券売機、等々 ラーメン以外の画像が結構ある ざっくり15%程度を除去して計33130枚の データセットを準備した 7 . 5
  17. 17. 収集したラーメン二郎画像の内訳 7 . 6
  18. 18. ディープラーニングによる画像分類 8 . 1
  19. 19. 画像分類の実例 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf 8 . 2
  20. 20. CNN (畳み込みニューラルネット) 画像認識分野においてはCNNがよく使われる 層の深いCNNの学習を深層学習(Deep Learning)と呼ぶ 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf 8 . 3
  21. 21. 大規模な学習と精度向上 ILSVRC (ImageNet Large Scale Visual Recognition Challenge) 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf 8 . 4
  22. 22. ラーメン二郎分類機の作成 DeepLearningフレームワークにMXNetを利用(速い) 各店舗50枚をテスト用に分離 モデル: ResNet-50 学習率(learning rate): 0.01 optimizer: SGD エポック数: 30 9 . 1
  23. 23. 学習結果 validationデータで約83%の精度そこそこイケてる? 9 . 2
  24. 24. テストデータによるモデルの評価 9 . 3
  25. 25. 分類精度評価 Precision Recall F1-score avg / total 0.326 0.166 0.148 実態としては約3割程度の正解率 Precision(適合率): 検出件数にどの程度正解が含まれるか Recall(再現率): 正解をどの程度検出できるか F1-score: PrecisionとRecallの調和平均 9 . 4
  26. 26. 混同行列 ほぼほぼ荻窪店 9 . 5
  27. 27. ファインチューニング ディープラーニングによる画像分類で定番の ファインチューニングを試してみる ※ 転移学習(Transfer Learning)と呼ぶ場合も 10 . 1
  28. 28. ファインチューニングとは 別の問題、別のデータセットで学習済みのモデルの パラメータをコピーし、新しいニューラルネットの パラメータの初期値として使うこと 下位層は固定して限られた上位層のみ再学習する ImageNetで学習済みのモデルを用いることが多い 10 . 2
  29. 29. 出展: http://acsi.hpcc.jp/2016/download/ACSI2016- tutorial2.pdf 10 . 3
  30. 30. 出展: CS231n: Convolutional Neural Networks for Visual Recognition 10 . 4
  31. 31. ファインチューニングの使いどころ ディープラーニングを利用したいが、 学習データを大量に用意できない場合 通常の学習における問題 大量の学習用データが無ければ精度がでない 最近の性能の良いモデルは学習に1~2週間かかることもある ファインチューニングのメリット 比較的少ない学習データでも精度が得られることが多い 学習済みモデルの汎化性能を引き継いだモデルを作成できる 最近は性能の良い学習済みモデルが多数公開されている 10 . 5
  32. 32. ラーメン二郎データをファインチューニング フレームワークは同じくMXNet 各店舗50枚をテスト用に分離 ImageNetで学習済みのResNet50モデルをファインチューニング 学習済みモデルを利用する以外は、 スクラッチでの学習と同様のパラメータで学習 10 . 6
  33. 33. 学習結果 スクラッチからの学習より約10%ほど高い約94%の精度 10 . 7
  34. 34. テストデータによるモデルの評価 10 . 8
  35. 35. 分類精度評価 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の調和平均 10 . 9
  36. 36. 混同行列 かなり改善した(やや亀戸店) 10 . 10
  37. 37. 認識精度向上のための手法 (主にファインチューニングにおける) 11 . 1
  38. 38. データの追加、精度向上 まずは学習用データの量と質が大事 例えば、路面不具合であれば、 路面が正常なのか異常なのかの判断基準が重要 必要に応じて専門家の意見を仰ぐ等 データ品質を向上させる ※ データが極端に少ない場合に高性能な モデルで学習すると性能がでないことが多い 11 . 2
  39. 39. モデルの選択 どのモデルを選ぶか? → より表現力があり問題の処理に適したモデルを利用 最近はImageNetで学習済みのモデルが多数共有されている Alexnet, VGG, ResNet, etc どれを選ぶのがよいか、性能は?学習コストは? 11 . 3
  40. 40. ImageNet学習済みモデル性能比較(MXNet) 11 . 4
  41. 41. Optimizerの選択 様々なアルゴリズムが研究されている SGD AdaGrad RMSProp SGDNesterov AdaDelta Adam 一般に扱う問題が異なれば適するOptimizerも異なる 出展: ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION 11 . 5
  42. 42. Optimizerの違い(イメージ) 出展: Visualizing Optimization Algorithms 11 . 6
  43. 43. データ拡張 学習用データが少ない場合に、元データを回転・輝度変 更・上下左右反転等してデータを水増しするのも有効 出展: https://m2dsupsdlclass.github.io/lectures- labs/slides/03_conv_nets/ 11 . 7
  44. 44. モデルやOptimizerを変えて試す モデル: ImageNetで学習済みのinception-v3 学習率(learning rate): 0.00005 optimizer: NAdam(~30epoch), RMSProp(~60epoch) エポック数: 60 各種データ拡張実施 11 . 8
  45. 45. 学習結果 validationデータでの識別精度は約93% 11 . 9
  46. 46. テストデータによるモデルの評価 11 . 10
  47. 47. 分類精度評価 Precision Recall F1-score avg / total (ResNet-50) 0.816 0.725 0.723 avg / total (inception-v3) 0.880 0.860 0.862 先程のファインチューニングの例に出した ResNet-50の場合と比べさらに識別精度が向上 11 . 11
  48. 48. 混同行列 さらに改善した 11 . 12
  49. 49. ラーメン二郎の店舗毎の識別精度(precision順) inception-v3をファインチューニングしたモデルで算出 赤羽店は2017年4月に閉店 11 . 13
  50. 50. 資料冒頭の画像を作成したモデルで識別 三田本店 神田神保町店 環七一之江店 三田本店(99.69%) 目黒店(0.09%) 桜台駅前店(0.07%) 神田神保町店(99.32%) 中山駅前店(0.38%) 松戸駅前店(0.12%) 神田神保町店(61.23%) 新橋店(14.44%) 中山駅前店(13.77%) 正解! 正解! 残念 三田本店と神田神保町店はほぼ同じ構図だが見分けられた 11 . 14
  51. 51. サービス化 Slackに組み込んだ twitterのボットにした 12 . 1
  52. 52. Slackのbotに二郎識別機能搭載 12 . 2
  53. 53. twitterのbotに二郎識別機能搭載 に画像をリプライすると店舗名を答えます@jirou_deep 12 . 3
  54. 54. GANによるラーメン二郎画像生成 13 . 1
  55. 55. GANとは 学習データと似た性質を持つ出力を生成するネットワーク 2014年にGoodfellowらによって提案 2015年にRadfordらによってCNNを使ったGANである DCGAN(Deep Convolutional GAN)が提案される DCGANで生成した画像 出展: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 13 . 2
  56. 56. 収集したラーメン二郎画像でDCGANを試してみた DCGANの実装 で約2万枚の ラーメン二郎画像を学習した(画像は123epoch時点のもの) carpedm20/DCGAN-tensorflow 13 . 3
  57. 57. 画像生成時のモデルへの入力について DCGANは入力をn次元一様乱数からサンプルします の実装では[-1.0, 1.0] の100次 元一様乱数z を入力として使用します 学習が成功すれば、 画像から抽出されたそれぞれの特徴が それぞれの次元に対応して学習されています (例えば、テーブルの色、麺の盛り具合、画角等) zの値を調整した際の出力の変化から 各次元に対応する特徴を推定することもできます carpedm20/DCGAN-tensorflow 13 . 4
  58. 58. モデルへの入力を連続的に変化させた例 z1(テーブルが茶色の二郎画像を出力) と z2(テーブルが朱色の二郎画像を出力) を 探し、入力をz1からz2へ連続的に変化させてみる 単に学習データを再構築しているのではなく、学習データ の特徴を抽出したモデルが構築できていると考えられる13 . 5
  59. 59. LSGANでも試してみた chainerによるLSGANの実装 で約3万枚の ラーメン二郎画像を学習した(画像は775epoch時点のもの) musyoku/LSGAN 13 . 6
  60. 60. LSGANで入力を連続的に変化させた例 こちらも で約1万6千枚の ラーメン二郎画像を学習したモデルから生成 musyoku/LSGAN 13 . 7
  61. 61. 任意店舗のラーメン二郎画像生成 店舗を特徴づける入力の次元を特定すれば、 指定した店舗のラーメン二郎画像が生成できそう しかし、手動で対応する入力の次元を探索するのは大変… しかも、店舗毎の特徴が入力の次元にマッチして 学習されるとは限らない 13 . 8
  62. 62. conditional GAN GANの学習時に画像とその画像の ラベルを組み合わせて学習する手法 画像生成時に指定したラベルに応じた 画像を生成することができる 参考: Conditional Generative Adversarial Nets 13 . 9
  63. 63. すでに店舗毎に分類済みの ラーメン二郎画像データセットはある… 13 . 10
  64. 64. 現在、実装中 13 . 11
  65. 65. mxnet-finetuner 14 . 1
  66. 66. ラーメン二郎識別モデル生成に取り組んだ際の ノウハウや知見をまとめてツール化しました 14 . 2
  67. 67. ファインチューニング時の各種作業を自動実行 学習データの加工・整形 学習済みモデルの自動ダウンロード 用意したデータのクラス数に応じた学習済みモデルの整形 データ拡張 学習結果のグラフ化、混同行列や分類精度のレポート機能 Slackへの学習結果のアップロード jupyer notebook, etc https://github.com/knjcode/mxnet-finetuner 14 . 3
  68. 68. まとめ ラーメン二郎の全41店舗の画像を収集ファインチューニングにより識別精度約87%のモデルを作成識別モデルをAPI化し、Slackやtwitterのbotに組み込んだノウハウをまとめツール化した(mxnet-finetuner) GANによるラーメン二郎画像生成を実験中実はまだラーメン二郎を食べたことがない 15
  69. 69. 参考深層学習とその画像認識への応用に関する最近の研究動向CS231n: Convolutional Neural Networks for Visual Recognition ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION Visualizing Optimization Algorithms Optimizer : 深層学習における勾配法についてはじめてのGAN できるだけ丁寧にGANとDCGANを理解するChainerで顔イラストの自動生成Generative Adversarial Networks Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks Conditional Generative Adversarial Nets carpedm20/DCGAN-tensorflow musyoku/LSGAN 16
  70. 70. 「ラーメン二郎」は創業者山田拓美氏の登録商標ですその他、記載されている会社名、製品名、サービス名は、各社の商標または登録商標です 17
  71. 71. ありがとうございました 18

×