Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

19.888 visualizaciones

Publicado el

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

Publicado en: Ingeniería
  • Sé el primero en comentar

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

  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

×