ラーメン二郎をディープラーニングで判定!?
ラーメンフリークではなくても、「ラーメン二郎」の名前を耳にしたことは、一度くらいはあるだろう。濃厚な豚ベースのスープと極太麺が織りなす力強い味、丼からあふれんばかりの豪快な盛りつけを愛するラーメン二郎ファンは、「ジロリアン」と呼ばれ、関東を中心に40ある店舗(2017年11月現在)の前に今日も列をなしているはずだ。
そんな熱狂的なファンを擁するラーメン二郎は、いわゆる本部統制型の飲食チェーン店ではない。そのため内装や製法、具材、味、盛り付けが店舗ごとに異なる。こうした各店の違いや個性に目をつけ、ディープラーニングでどの店舗のラーメンかを画像で見分けるモデルを開発した人物がいる。NTTコムウェアで道路の不具合検知システムの技術開発に携わっている土井賢治さんだ。
ギーク仲間にウケたい一心で開発に着手
NTTコムウェア株式会社 ビジネスインキュベーション本部 土井賢治さん。普段は道路の不具合検知システムの研究開発に携わっている。実はいまだにラーメン二郎を食べたことがない(2017年11月現在)
土井さんが開発した「ラーメン二郎全店分類器」をTwitter bot化した「@jirou_deep」。ラーメン二郎の画像をリプライすると店舗名を答えてくれる
まずは土井さんに「ラーメン二郎bot」の元になった技術「ラーメン二郎全店分類器」を開発した経緯を聞いてみた。
「ギーク仲間でありエンジニアでもある同僚が、社内の技術発表会で発表したある取り組みに刺激を受けて開発することにしたんです。単に仲間内のノリといいますか、興味本位で開発を始めました」
同僚が披露してくれたのは、5店舗のラーメン二郎の写真がどの店舗に該当するかをディープラーニングで判定する「ラーメン二郎5店舗分類」というデモだった。
「各店舗20枚程度の学習サンプルしか使っていないのにそこそこの精度が出ていたので、これはおもしろいなと。それでせっかくなら41店舗(開発当時)全部判定してみようと思ったのが、開発のきっかけでした」
当初の開発目標は「仲間にウケる」こと。そんな単純な動機で始めた開発だったが、事態はその後、思わぬ方向に転がっていくことになる。その話を聞く前に、開発に際して直面した苦労について聞いてみよう。
約3万3000枚の画像を集め、精度87%を叩き出す
「まずは全店舗のラーメンの画像データを集めなければなりません。そこで、画像を収集するクローラーの開発を始めました。投稿の文言やハッシュタグを頼りに、TwitterやInstagram上に投稿されたラーメン二郎に関する画像を集め、朝夕の通勤時間を使ってチェックする作戦でしたが、想像以上に手間のかかる作業でした」
店舗の外観や券売機、自撮り写真といった写真を目視で取り除くのは比較的簡単だ。しかし、同じ画像を別の店舗名で複数投稿しているアカウントや、明らかに店名とマッチしていない画像がかなりの数あったという。
「一目見てわからないノイズは、疑問に思ったら手を止めて調べてチェックするしかありません。この作業に思いのほか手を取られてしまいました」
3万3130枚集めたラーメン画像の店舗ごとの内訳。全体の15%程度はノイズとして除去したという
土井さんの通勤時間は往復で1日80分。1~2週間かけてコツコツと学習データを整理していった結果、およそ3万3000枚の学習用データが揃った。
「今度はこのデータを使い、人間の脳内にある神経細胞の働きを模したニューラルネットを構築していきます。今回は『Apache MXNet』というディープラーニング用フレームワークを使ったのですが、私物のノートパソコンでは処理速度が間に合わなくて。クラウド経由でGPU(Graphics Processing Unit)付きのインスタンスを自腹で借りて、計算したこともあります」
結局、3万3000枚もの画像を集めたものの、本格的な判定モデルを構築するには、これでもまだ十分な数ではなかったという。
そこで土井さんは、1つの画像を複製し、傾けたり反転させたりして学習サンプル数を増やす「データ拡張」や、別の用途のために集めたデータで、学習済みのパラメータを別のニューラルネットの初期値に適用する「ファインチューニング」などのテクニックも取り入れ、少ないデータから精度を出す努力をした。その甲斐あって、すぐに80%程度の判定精度を叩き出すせたと土井さんは振り返る。
「その後、1カ月ぐらいかけて、複数のニューラルネットワークのモデルを試したり、学習係数やイテレーション数などのパラメータを調整したりして、87%程度まで精度を高めることができました。それでギーク仲間が500人ほど参加しているチャットツールSlack上に、ラーメン二郎全店分類器のbotを公開してみることにしました。予想通り評価は上々。みんなおもしろがってくれましたね」
収集した約3万3000枚の画像のうち、約3万枚の画像を使って得た学習の進捗(赤線)と、学習では使わなかった2000枚のテスト用画像の判定精度の進捗(青線)を比較したグラフ。赤線と青線がほぼ同じ経過を辿っているのは学習モデルが比較的うまく構築されていることを示している ※縦軸は正答率、横軸は学習回数
似た構図で撮影された画像で判定した場合の判定結果。土井さんによると「盛り付けの均質性、具材の位置やバランスなどが正答率に影響を与えているのではないか」という。ちなみに、同一画像を左右反転した画像も含めて学習すると、判定の正答率は下がってしまうらしい
しかし、この成果を楽しんだのは仲間内だけではなかった。2017年8月に開かれたNTTグループのエンジニアたちが集う「NTT TECH CONFERENCE #2」でその成果を発表したからだ。
「カンファレンス当日の夜、ITmediaさんの記事に取り上げていただいたことで、多くの方に知られるようになりました。登壇に合わせて公開したTwitterアカウント(@jirou_deep)にはアクセスが集中しすぎて、一時凍結されてしまうほどでしたね。驚きやうれしさもありましたが、それよりも『みんなラーメン二郎が好きなんだなー』っていうのが率直な感想でした(笑)」
上京をきっかけに社外コミュニティ活動へ参加するように
期せずして多くの人の注目を集めることになった「ラーメン二郎全店分類器」。開発当初は思いもしなかった波及効果もあったという。
「会社の役員から『おもしろい取り組みだったね』と声をかけていただいたり、経験豊富なエンジニアや研究者と知り合いになったりできたのは、やって良かったと思える瞬間でしたね。また、自分よりも優れた実績を持つ方々と知り合いになったことで、自分はまだまだだと思えましたし、仕事のモチベーションアップにもつながりました」
実は、土井さんがNTTコムウェアで働き出したのは2014年。それ以前は、大阪にあるNTT西日本で開発に取り組んでいた。大阪でのエンジニア同士の社外交流は、東京に比べると少なく、当時は外部の勉強会やハッカソン、オープンソース活動にはほとんど関わらなかったという。だが東京に来てから状況は激変した。
「とにかく、エンジニアのための会合が毎日のように開かれているじゃないですか。そういう場所には新しい情報もたくさん集まってきますから、東京に来てから積極的に参加するようなりました。その結果、開発仲間も増え、新しい技術に取り組む意欲も以前より強くなった気がします。そう考えると今回のラーメン二郎全店分類器も、東京に来なければ実現しなかったかもしれません」
今後の目標はずばり、ラーメン二郎を食べること
気軽な気持ちで開発したサービスが大反響を呼び、多くの人に開発の成果を楽しんでもらう喜びを知った土井さんだが、次はどんなテーマに取り組むのだろう?
「GAN(Generative Adversarial Networks: n次元の乱数等を入力とし、学習データの特徴を備えたそれらしい画像を生成できる技術)」を使って、逆に“◯◯店らしいラーメン二郎”の画像生成にチャレンジしようかな、と。どの店の画像かを判定するのではなく、その店っぽいラーメンの画像を作り出すんです。実は、すでに実験を始めていて、テーブルの色や麺の盛り具合、画角などに対応した入力データの次元を見つけ、その値を連続的に変化させることで、生成される画像の特徴も連続的に変化することを確認しています。
さらに、GANの学習時にどの店舗の画像であるかのラベルも含めて学習しておくことで、店舗に対応したデータの次元を探すことなく、狙った店舗の画像をすることもできるため、近々挑戦するつもりです。……何のために? と聞かれると、答えるのが難しいですが(笑)」
GANを活用すれば、既存のデータセットから抽出したラーメンの特徴に対応する入力データの次元を操作することで「◯◯店っぽいラーメン二郎」画像を意のままに生成できるようになるという
だが、もうひとつ大事な目標を忘れていないだろうか?
「あっ、そうだ! まだ一度も食べに行ったことがないラーメン二郎へ早く行かないといけませんね(笑)。どうせ行くなら、開発のきっかけを作ってくれた同僚と一緒にと思っていたら、ズルズルと先延ばしになってしまって……。これを機に、近々必ず伺います!」
ラーメン二郎に足を踏み入れぬまま完成に至ったラーメン二郎全店分類器。念願の二郎デビューは、「オフィスの近くにある品川店にぜひ行きたい」と土井さんは話す。インパクトの強いあのラーメンを食べたら、きっとさらなる開発のアイデアも浮かぶのではないだろうか。