u++の備忘録

「スタバなう」ツイートの画像は本当にスタバか、CNNで判定してみた

はじめに

Twitterで1日に一度くらいは「スタバなう」という投稿を目にする気がします。ただし大抵はキラキラ女子大生などを揶揄しており、ラーメンなどの画像とともに投稿されることが多いです。

f:id:upura:20180106131954p:plain

今回は、画像分類に秀でたConvolutional Neural Network (CNN)を用いて、「スタバなう」という語句を含むツイートの添付画像が本当にスタバの画像か否か判定してみようと思います。

データセットの構築

下記の記事でも触れたウェブサービスを用いて「スタバなう」という語句を含むツイートの添付画像を収集しました。

upura.hatenablog.com

手動でスタバの画像(正例)とそうでないもの(負例)に分類しました。枚数が中途半端なのは、ここで飽きたからです。

  • 正例:168枚
  • 負例:259枚

この段階で、検証用のデータセットとして以下の枚数分を取り出しました(当然、訓練用のデータセットとしては使いません)。

  • 正例:40枚
  • 負例:60枚

CNNの構築と学習

CNNの構築と学習には、下記の記事のPythonコードを再利用しました。もちろんパス名など細かい部分は修正しています(Github)。

upura.hatenablog.com

CNNの構造

f:id:upura:20171105180559p:plain

学習

327枚の訓練用のデータセットを学習させた結果は、下記の画像のようになりました。40ステップ辺りで収束していると分かります。
f:id:upura:20180107215708p:plain

分類結果

予想\正解
54 21
6 19

Precision = 0.72
Recall = 0.90
F-measure = 0.7999

指標についての説明はこちら。
F値 - 機械学習の「朱鷺の杜Wiki」

正と予想したのに正解は負だった画像(表の21)を調べてみると、スタバ以外のコーヒーチェーンの画像などが含まれていました。コーヒーカップは写っているのでロゴで判定するしかなく、これは間違えても仕方ないかなと思います。

おわりに

データセットの構築に飽きて訓練用のデータセットの枚数が少なくなった割には、高い性能を発揮できました。

もう少しデータセットを拡充してCNNのチューニングをすることで、さらに使い物になるレベルのアプリケーションにできそうです。顧客調査をしたいのにTwitterの画像検索が使い物になっておらずお困りのスターバックスマーケティング担当者さま、Githubでコードを公開しているので自由にお使いください。

github.com