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