Forkwell Press

エンジニアの生き様をウォッチするメディア

TensorFlow と出会った「ドルヲタ」エンジニアが1年かけてたどり着いた境地 - LINE すぎゃーん(sugyan)氏

この連載では、「Forkwell Jobs」の開発にも関わるフリーランスエンジニアの後藤大輔 (@idesaku) が、さまざまな企業で働くエンジニアとリレー形式で対談を行っていきます。
今回のゲストは、LINE の「すぎゃーん」(@sugyan) こと杉義宏氏です。

すぎゃーんさんといえば、ディープラーニングによる「アイドル顔識別」、LINE 主催の技術コンテスト「ISUCON」最多優勝者として、その名を知る方も多いのではないでしょうか。
今回は、さまざまな「仕事外活動」へアクティブに取り組み、実績を残しているすぎゃーんさんを突き動かす「原動力」についてお話しを伺いました。彼の尽きないモチベーションを支える「思い」とは、何なのでしょうか?

今回のリレーインタビューは2部構成にてお届けします!

前編:TensorFlow と出会った「ドルヲタ」エンジニアが1年かけてたどり着いた境地
後編:「ライブの幕間にも草を生やす」ー “好き”をつきつめるエンジニアが目指すゴールとは?

執筆:高橋美津

キャリアに大きな影響を与えた「Perl コミュニティ」

idesaku:
前回の kamipo さんからのご紹介で、今回のリレーインタビューは LINE の「すぎゃーん」こと、杉義宏さんにお話をお伺いします。よろしくお願いします。

sugyan:
よろしくお願いします。ちなみに、僕、kamipo さんから、どんな感じで紹介されたのでしょうか?

idesaku:
えーと、「会社での仕事もさることながら、プライベートでの活動がアクティブで楽しそうな人」とのことでした。

sugyan:
つまり「仕事に対する意識の低い人」というわけですね?(笑)

idesaku:
いや、そういうことではなくて(笑)。すぎゃーんさんといえば、TensorFlow を使ったディープラーニングによる「アイドル顔識別」の第一人者であり、LINE が主催する Webアプリケーション最適化コンテスト「ISUCON」で最多優勝を誇るスゴ腕と伺っています。今日は、そのあたりの活動のことについても聞かせていただければと思っています。

ところで、Twitter などを見る限り、前回ご登場いただいた kamipo さんとは、とても仲が良さそうですね。知り合われたきっかけは何だったのでしょうか。

sugyan:
kamipo さんを初めて知ったのは「はてブ」でしたね。よく、自分と同じ記事をブックマークしている「kamipo」という人がいて、名前はそのころから意識していました。その後、何かの勉強会で、たまたま名刺交換する機会があって「あぁ、この人が kamipo さんなんだ」と。

その後、毎年の YAPC で顔を合わせたり、同じ1982年生まれなので同年代の飲み会でもよく会ったりといった感じです。

idesaku:
今回も「YAPC」の名前が出てきました。Perl コミュニティの影響力、強いですね。ちなみに、すぎゃーんさんは、ずっと Web開発系のキャリアを積んでこられたのでしょうか。

sugyan:
新卒で入った最初の会社は SIer でした。そこから、プログラマーをやりたくてグルージェントという会社に移り、Web系や iOSアプリの開発に関わりました。そのころから YAPC のような社外のイベントや勉強会に顔を出すようになり、多くのエンジニアの方と知り合うことができました。

idesaku:
前職は「カヤック」でいらっしゃいましたよね。

sugyan:
ええ。カヤックへの転職も、YAPC などを通じて知り合ったカヤックの元エンジニアの方からの影響が大きかったです。カヤックでは2年ほど働いたのですが、その後ライブドアに就職しようとしたらなくなってしまって(笑)、結果的に今いる LINE にお世話になることになりました。そろそろ5年になりますね。

idesaku:
これまでのインタビューでも、勉強会やコミュニティイベントのような「社外活動」がエンジニアとしてのキャリアに大きな影響を与えるきっかけになったという方は多かったです。社外からの刺激というのは本当に大事なんですね。

sugyan:
勉強会やコミュニティの場を通じて、多くの社外のエンジニアの方と知り合えたのは、本当に良かったと思っています。

「好き」で「オンリーワン」だからこそ継続できた「アイドル顔識別」

idesaku:
さて、すぎゃーんさんと言えば「TensorFlow による Deep Learning でのアイドル顔識別」の人というのが代名詞のようになっていますけれど、そもそも「ディープラーニング」自体に興味を持たれたのはいつごろだったんでしょうか。

sugyan:
Google が TensorFlow を初めて公開した、2015年の11月くらいですね。

idesaku:
なぜやろうと思われたのですか。

sugyan:
その時期、ちょうど「少しでも興味を持ったことは勉強してみよう」という思いが強かったんですよ。2015年10月くらいから、GitHub で毎日コードを書く、いわゆる「Write Code Every Day」みたいなことを始めていたんですが、そのネタが尽きて困りだしたころに、TensorFlow が出てきたので「新しいことに手を出したら、新しいコードが書けるかも」と思って、いじってみたというのが最初ですね。

idesaku:
でも、機械学習やディープラーニングは、数学の知識などが必須で「難しそう」というイメージがありますよね。

sugyan:
ええ。私も、そのあたりについては「言葉は知っている」程度で、それまでなかなか手が出ませんでした。ただ、毎日コードを書くためのネタのひとつとして「なんか新しいライブラリが出たので、ちょっと触ってみよう」くらいのノリだったんですね。

もし、それがうまく動かなかったり、使い方が難しかったりしたら、そこで終わっていたと思うのですが、いろいろなことがうまくハマったおかげで、今でも続いているといった感じです。

idesaku:
「うまくハマった」というのはどういうことでしょう。

sugyan:
TensorFlow が思ったより使いやすかったということも、もちろんあるのですが、それ以上に「ディープラーニングでやりたいことがあった」というのが大きいですね。

idesaku:
つまり、それが「アイドルの顔識別」だった、と。

sugyan:
はい。実は、自動で「アイドルの顔を識別する」ことに対する関心は、ディープラーニングを学ぶ以前からあったんですよ。

2014年くらいから、アイドル活動をしている人向けの「自撮りアプリ」というのが登場して、自撮りに対する「いいね」数ランキング上位のアイドルはイベント出演できる、などの企画が出てきました。こういう仕掛けができたことで、Twitter などにも大量にアイドルの自撮り写真が流れるようになったんです。

私自身も、非常にアイドルが好きなんですが、それを見ているうちに「機械学習を使って、流れてくる写真が誰のものかを自動で識別できたら面白いんじゃないか」と思うようになりました。ただ、「できるかもしれない」というイメージはあったものの、それを実現する方法がわからないでいたところに TensorFlow が出てきて、「あ、これを使えば自分で作れてしまうかも」と思ったのがすべての始まりです。

idesaku:
ディープラーニングに「画像識別」というのは、やはり相性の良い組み合わせですよね。サンプルコードでも「文字画像の識別」というのがありますし。ただ、そこに「アイドルの顔」というキャッチーな題材を持ってきたあたりが、あざとい……いや、うまいと思っていました(笑)。

ただ、すぎゃーんさんの場合、その突き詰め方が尋常ではないようにも思うんですよ。普通だったら、「ももクロの5人であれば75%くらいまで識別できる(参照)」ところまできたら、そこで満足してしまいそうです。

でも、すぎゃーんさんは、そこから1年以上かけて、識別できる人数を増やし、人力でのラベル付けで精度を上げて、さらには「顔生成」の段階に踏み込んだりもされていますよね。…今あのシステムは何人くらいのアイドルの顔を識別できるんですか?

sugyan:
2,000人分くらいのデータが入っていて、うち1,000人程度は識別が可能ですね。

idesaku:
アイドルの方って、そんなにいらっしゃるんですか!

sugyan:
ただ、アイドルも入れ替わりの激しい業界なので、この1年でそのうちの250人ほどが、解散や卒業などでアイドルではなくなってしまったんですよ。現在「アイドルでない人」を「アイドル」だと識別してしまうのは問題なので、情報収集をしながら、そういった画像からはラベルを外すようにしています。作業しながら、ちょっと寂しくなる瞬間です。

idesaku:
…その底なしのモチベーションは、どこから生まれているんでしょう。

sugyan:
やっぱり「アイドル顔認識をやりたかった」ことに尽きると思います。前からその思いがあったからこそ、飽きずに続けられているのでしょうね。あと、「アイドル好きで、その自撮り画像をテーマに機械学習をやっている」という人は、私以外にまずいないんです(笑)。「自分がやらなきゃ、ほかのだれもやらない」ことに対しては、モチベーションが続きますね。

idesaku:
「好き」であることと「オンリーワン」であることがカギなんですね。実際、手作業でのラベル付けのような作業は、好きでないとできないですよ。

sugyan:
いろんなアイドルの自撮り画像を見比べてみると、面白い発見もあるんです。いつも同じポーズ、同じ画角で撮る人もいれば、毎回ボケた写真だったり、毎回変顔していたり、毎回加工がすさまじかったり…(笑)。画像を集める中で、それまで知らなかった自分のタイプの子を発見したりもして、いろいろ勉強になります。

そうこうしているうちに500人くらいのアイドルの顔は自力で識別できるようになってしまいました。今では、推しのグループのライブに対バンとして出ているグループのメンバーが「声や曲は初めて聞くのに、なぜか顔と名前は知っている」というような、不思議な境地に達しつつあります。

「作りたいもの」があれば「技術」は身につく

idesaku:
ある種の特殊能力ですね(笑)。ところで、実際に「自動で画像認識」をするにあたっては、TensorFlow にデータを食わせる前の、収集や画像加工の工程が必要ですよね。この部分でも、かなりやらなければならないことが多くて大変そうだなぁという印象があるんですが。

sugyan:
たしかに前工程は必要ですが、そこについては、自分がこれまで Webアプリケーションを作る中で身に付けた知識で対応できる部分が多かったんです。

画像の加工、管理を含めて「どういうデータを、どういう形に持っておき、どういうふうに処理すれば、こうなる」といった部分は、比較的すんなりクリアできました。画像の管理やラベル付けのツールに関しては、専用のものを自分で作って使っているんですよ。

idesaku:
意外なところで過去の経験が役に立ったのですね。とはいえ、あの仕組みを実現するために、いろいろと新しい技術にも手を出されていますよね。例えば、管理部分は Rails で、TensorFlow 上のロジックは Python で、連携する Bot については Go で、フロントエンドは webpack で…といった感じで。

sugyan:
そのあたりについては、もともとプログラミングが好きなので、いろいろ手を出して自分の知識の幅を広げてみたいという思いで挑戦していますね。

idesaku:
新しい技術を学ぶときに、心がけていることはありますか。

sugyan:
「アイドル顔認識」もそうなんですが、私の場合は「作りたいもの」がまず先にあって、そのためにツールが使えるようになるというパターンがほとんどですね。

例えば、以前 Node.js を使っていた時期があるのですが、ちょうど Socket.IO が出てきて「リアルタイムWeb」が盛り上がっていたころに「複数のユーザーでエディタをリアルタイム共有するアプリを作りたい」と思ったのが、始めるきっかけになったんですよ。そのエディタは当時ちょっと話題になったのですが、それを見て Node.js に関心を持った古川陽介さんが、今、Node.js 日本ユーザーグループの代表をやっています。「会長はワシが育てた」と、ネタにさせてもらってます(笑)。

あと、Go を始めたきっかけも「ターミナルの操作を記録して再生する」というツールを Go で作ってみたくなったからなんです。 Go なら標準ライブラリで GIFアニメも作れるし、キャプチャの処理を並行でできたりして題材としてもちょうど良さそうだったんです。

idesaku:
根っからの「サービス指向」なんですね。目で見て分かる何かを実現すること目指して、技術を学ぶというか。

sugyan:
自分の作りたいものに対して「この技術が使える」ことに気付くと覚えられますね。純粋にライブラリや言語について「勉強」する感覚で始めてしまうと、続かないことのほうが多いです。それで何か立派なサービスを作ったわけではないのですが、とりあえずブログのネタにできる程度にまでは、自分のものにしたいという気持ちで続けています。

後編へ続く forkwell.hatenadiary.jp

すぎゃーんさんがリレー相手としてご指名するエンジニアは…?



Forkwell では、ITエンジニアが自身のアウトプットを簡単に連携・管理し、スキルを可視化することができる「Forkwell Portfolio」を運営しています。

GitHub アカウントの連携により、登録されたリポジトリのコミットログを解析。普段書いているプログラミング言語や、コードの変更量をグラフ化します。