10年弱勤めたKDDI/KDDI研究所を退職しました

2017年1月15日付で10年弱勤めたKDDI/KDDI研究所を退職しました。
2007年4月入社だったので、あと3ヶ月でちょうど10年でした。

退職エントリー、読む側としては好きだったのですが、まさか自分が書くことになるとは思いませんでした。
なお、内容は思い出を振り返るチラ裏です。ポエムです。円満退社だと思っているので、残念ながら(?)旧所属をディスる内容とか過激表現は含まれません。

入社〜研修時代

研究所志望で新卒入社しましたが、KDDIは新卒で直接研究所採用をするルートはなく、どこに配属されるかは基本的に確約されません。
1ヶ月の全体研修の後、7月まで色々な部署で研修がありましたが、その中で、2ヶ月弱auショップで働くというなかなか貴重な経験をしました。その時は自分が使っていたW51CAをひたすらオススメして売ってました。
学生時代はネトゲ廃人でコミュ障だった私ですが、コミュ強な同期が多かったため、研修でちょっとだけ更生することができました。

研究所入所

2007年8月から希望通りKDDI研究所に配属となり、動画像符号化に関する研究がメインのグループに配属されました。学生時代は画像ではなくネットワーク系の研究室だったのですが、映像伝送を想定した通信に関する研究をしていて、面接時にマルチメディアと通信を融合したような研究がしたい、と言ったからそういう配属だったのかもしれません。なにしろグループ名がマルチメディア通信グループ(当時)でしたし。
面白かったのは、ほとんどのグループメンバーが学生時代とかに電子透かしを研究していた経験があったことです。私も実は卒論のテーマは電子透かしでした(研究と言えないレベルの黒歴史)

入所後はしばらくMPEG2〜H.264あたりの映像符号化の勉強&研究をしていました。
イベントとしては、2年目にラスベガスで開催されるNABという世界最大の放送機器展(CESの放送業界版)に展示説明員+調査で参加したのが思い出深いです。

社内ニート状態

細かいことは忘れましたが、入社2年目くらいは研究テーマは特に明示的に与えられることはなく、良く言えば自由に、悪く言えば放置プレイ状態でした(上記の動画像符号化は取り敢えずグループ共通言語としてのお勉強な位置づけ)
この頃はどんな研究も好きにやって良いと信じており、自分の興味の赴くままに変なことを色々やっていました。
Texture synthesisとか、Inpaintingとか面白そうーみたいなノリでした。アカン。
そんななので、これといった成果も出せずに、同期や後輩が既に走っているプロジェクトにJoinして成果を出しているのを見て焦ったりしてました。
ある種の暗黒時代みたいなものですが、ここで知識の幅を広げられたことは今につながっているのは間違いないなとも思います。

映像検索技術へ

上記のような状態のある日、TRECVIDという映像検索に関するワークショップ(母体はTRECというテキスト検索系ワークショップ)とか興味ある?みたいなことを上司に言われた気がします。
もともと研究所として、技術アピールも兼ねて継続的に参加していたが、TRECVIDのタスクが自社でやっている技術と合わなくなってきたのでここ数年は参加していなかった、みたいな経緯。
いわゆる競争型のコンペ面白そうということで、映像のコピー検出に関するタスク (content-based video copy detection) に参加することに。この頃は、Youtubeに著作権侵害コンテンツがアップロードされることが問題となっており、また自社でもコンテンツパトロールのようなこともやっていたので意義のあるタスクでした。

これまで画像も含め検索をやったことのある人がいなかったので、かなり手探りで、残念ながら最初は投稿すらできなかったのですが、2010年と2011年は投稿&幾つかの評価指標でトップ精度を出したりしました。
2010年は、共同研究でシリコンバレーのStanford Research Institute (SRI) に半年間滞在させてもらったりしました。

画像検索の研究と実用化

上記の通り映像検索をメインで研究していたのですが、当時中部大学の藤吉先生が精力的に啓蒙されていた、SIFTに代表される局所画像特徴用いたロバストな画像検索に興味があり、少しづつ大規模画像検索に研究分野をシフトしていきました。
今のようにdeep learningにより実用的な精度が出る前だったので、画像認識はまだ実応用が見えない状態でしたが、画像検索はかなり色々な応用が考えられ、自分の研究成果として開発した画像検索ライブラリが幾つかの実用化案件にまでたどり着けたのは嬉しかったです。
ちなみに実用化案件のいくつかは、下記のように自分がKDDI本体に戻っていた間に実施されていて、え、使われてたの?みたいな状態でした。

本社への帰任、博士課程、育児休職

2013年10月に、KDDI本体に帰任となり、それと同時に博士課程に入学しました。
そのあたりの経緯は下記のとおりです。
http://d.hatena.ne.jp/yu4u/20160922/1474526568

研究所への再出向

KDDI本体で働いている間、4ヶ月の育児休職を取ったのですが、2016年6月に復帰と同時に研究所に再出向となりました。
気づけば世の中はdeep learningに席巻されており、なんとなく動向はウォッチしていたものの真っ赤で近寄りたくない、とはいえやらないとね、ということでdeep learningを色々触り始めました。
流行り始めたのが2012年頃で、それから大分経つのでもうやることないんじゃ、と思いながら一気にキャッチアップしてみると、意外にハマってしまいました。まだまだやることありそうじゃない?

何故辞めたのか

…と、研究所に戻ってきて、意外にdeep learning面白い!みたいな状態で、何故やめるのか。色々要因はありますが、一番は違う経験、違う成長をしたくなったんだと思います。研究所に戻ってきて、居心地の良さを感じるとともに、居心地が良すぎて堕落する感覚がありました。
もう1つ、自身が扱うテクノロジーがビジネスに直結した仕事をしたいという思いが元々あり、研究所と事業部両方を経験したあと、その間の距離を再認識したことも大きいかもしれません。
ちなみに転職に関しては、会社を放り出されてもやっていけるように、外から見える成果を出すことを結構意識してはいました。Ph.D.を取得したのもその1つです。とは言え、性根は安定志向のヒッキーなので、自分から積極的な転職活動はしていませんでした(する理由もなかった)。
今回は、幸運にも自身の興味やキャリアの方向性にマッチする機会を頂いたというのが正直なところです。
というわけで、1月16日からDeNAで研究開発エンジニア(自称)として働いています!有給消化、ナニソレ?

KDDI研究所について

KDDI研究所は、研究者にとって自由な研究環境や、研究開発にかけられる規模という意味で本当に良い職場だと思います。ロケーションも、都心の飯田橋にも研究所のフロアがあります(育休復帰後はそちらで働いてました)。
私自身、元引きこもりのネトゲ廃人を良くここまで成長させてくれたと感謝の念しかありません(私が採用担当だったら、正直入社時の私は採用しなかったんじゃないか)
というわけで、私は残念ながら辞めてしまいますが、KDDI研究所で働くことに興味がある学生さんがいらっしゃいましたらぜひご連絡ください!

社会人博士課程を修了し、博士号を取得しました

先日学位授与式があり、東京大学大学院、情報理工学系研究科、電子情報学専攻を修了しました。あまり参考になるようなことは書けませんが、自身の記録として過程を書いておこうと思います。

まとめ

  • 社会人博士では、自分の専攻で、e-learning等で単位が取れるか、入学前の研究を博士論文に含めることができるかは重要
  • 博士論文は自分の研究を改めて位置づける良い機会。自分で貢献が小さいと思っていても、その差分を徹底的に考えていくと、実はそこから新たな課題設定が見つかる
  • 社会人じゃない博士やりたい

何故取ったのか

2007年に修士を修了した後、某通信事業者の研究所でコンピュータビジョンの研究を行ってきました。研究者として生きていく以上、いつかは取らねばという意識がずっとありました。特に、修士時代はネットワークの研究であったのに対し、現在はコンピュータビジョンの研究をしているため、現在の専門で学位を取りたいという気持ちがありました。
また、将来的な選択肢を広げるという点でも、取れる恵まれた環境にいる間にとっておきたいという思いがありました。
(後は、査読とかで英語のメールが来る際に、Dr. 〜で始まっているときにしょんぼりしなくなります)

研究室選びから出願まで

何はともあれ、お世話になる研究室を決めないといけません。周りでは出身研究室に戻る人が多いようですが、出身大学が関西かつOR/ネットワーク系の研究室出身なので、戻ることはあまり考えませんでした。
国際学会で何度かお会いして仲良くさせて頂いていた佐藤真一先生に何かの折にお願いしてみたところ、快く引き受けて頂いたので、佐藤先生にお世話になることに決めました。
出願時には上司の推薦書が必要だったり、入学時には会社に在籍したまま入学することを許可するといった内容の書類が必要だったりしたので、やはり会社的に理解がないと在籍したまま通うのは難しいようです。

入試

元々卒業生ではないので、ちゃんと試験を受けないといけません(関連する専攻の修士卒であれば専門科目の試験が免除される)。具体的には、英語(TOEFL ITP)、専門科目の筆記試験、研究プレゼンで合否が決まります。
さて、専門科目は8分野から5題出題され3問に回答するようですが、 実は元々学部は工学部系ではなく大学院から情報系に入ったこともあり、 過去問を見てみると半分くらい良く分かりません!というわけで、生協に行き、なんとか分かりそうな4分野くらいの参考書を買って、夜中のスタバで勉強をして入試に挑みました。
実際の試験では、ほとんど勉強しなかった分野からばかり出題され、ちゃんと解けそうなのが1問という絶望を味わいました…。持てる知識と想像力を全力で駆使して回答しましたが、良い結果ではなかったと思います。英語と研究プレゼンは業務スキルなので問題ないと思っていますが、専門がそんな感じだったので、合否を見に行ったときは本当にドキドキしました。

入学後

実は入学と同時に研究所から事業部に異動となり、仕事としてはほとんど研究をしない状況となりました。異動先はスマートフォンを中心とした端末の企画開発および関連するサービスの企画開発を行う部署です。
端末の発売スケジュールという絶対的なデッドラインがある業務であり、仕事に慣れた頃には結構な量の業務を背負っていたため、忙しくも刺激的な日々を送ることになります。この時の所属グループにはそれぞれキャラの違う尊敬できるメンバーが多く、また相当自由にやらせてもらえたので、本当に良い環境でした。

大学はと言うと、必須単位取得のため、毎週開催される輪講に参加する必要があります。輪講は専攻全体で開催され、M1・D1は既存研究のサーベイを、M2・D2は自身の研究発表を持ち回りで行います。発表自体は年1回で、その他の回は発表者全員に対して、発表に対するコメントを紙またはウェブフォームから提出する必要があります。
本業が結構忙しい状態でしたが、輪講を落とすわけには行かないので有給を取って参加していました。輪講の他にも、4科目ほどですが普通の単位も取る必要があり、こちらもちょくちょく仕事を休んで学校に行っていました。
平日時間が取られるのはかなりきついのです。E-learningで単位が取れたり、そもそも単位取得自体が不要だったりするケースも聞くので、大学・研究科・専攻によって結構違いがあり、自分が通えるのかによって研究室等を選択することが重要ですね。

この間研究はあまり進められませんでしたが、たまに日本開催の国際学会で発表する等、ほそぼそと活動はしていました。
(そんな理由で国際学会を選んでいたら、入学してからのPublicationのレベルが下がっているように見えると予備審査で突っ込まれた)

予備審査

気づけばあっという間にD3です。本審査の半年前くらいに予備審査があり、博士論文の提出は不要ですが、博士論文の(予定している)アウトラインに沿った研究発表を行う必要があります。
入学前は、映像のコピー検出、近似最近傍探索、大規模画像検索についての研究を行っており、入学前後からバイナリ局所特徴を用いた画像検索という研究を行っていたため、それらを全てつなげて合計5つの研究を大規模マルチメディア検索技術と言うようなタイトルでまとめ発表しました。
予備審査のコメントでは、薄々気づいていましたが、博士の研究としてまとまりがないという観点での指摘を多く頂きました。通常の論文をつなげたような博士論文を見たことがあったので、そういうので良いのかなというノリがあったのは否めません。また、入学以前の研究が博士論文の大部分を占めることに関しても指摘がありました。専攻によっては明確に禁止されている場合があるようです。
さて、これらの指摘に対し、最もstraightforwardに回答すると、入学以後のバイナリ局所特徴を用いた画像検索でまとめる、となるわけですが、これまでの研究業績に対し非常にボリュームが小さくなってしまい、博士論文として書き切れるのか、とプチ絶望していました。

育児休職

実は予備審査でプチ絶望する1ヶ月ほど前に子供が生まれ、元々奥さんに育児休職を取ると約束していたこともあり、予備審査後に育児休職を取得しました。快く取得させて頂いた部署の方々には本当に感謝しています。
具体的には、12月末に子供が生まれ、1月末に予備審査、2月から育児休職なので、実は予備審査のタイミングは育児+仕事の引き継ぎ真っ盛りなのでした。元々1月末が予定日だったのが1ヶ月早く生まれたのですが、予定通りだったらもっとバタバタだったので、親孝行な子です。
そんなこんなで、育児に明け暮れ、気づけば4月。春の陽気を感じながら、ふと大学のスケジュールを見ると、「6月10日博士論文提出締切日」という文字が。表紙すらない状態で漠然と8月くらいかなとか思っていた(アホ)ので、見た瞬間、もうだめだぁ・・・おしまいだぁという感じになり、半年延長かなぁ、これなら最初から長期履修制度にしておけば良かったなぁとか思っていました。

それでもやれるところまではやらねばと、 @ketsumedo_yarou パイセンにお願いして博士論文のテンプレを貰ってから、追い込みを開始しました。
(というかお願いDMを送ってから速攻で自身の博士論文ソース全部入りをくれる @ketsumedo_yarou パイセンにはもう頭が上がりません)
ちなみに見直すと5月7日にDMしており、よくもまぁ1ヶ月前まで引っ張ったと思います。

やはり論文は書き始めると進みます。書き始めないと進みません。徐々にページが増えていったり、体裁が整ってきたりするとどんどんモチベーションが高まります。
最初に手を付けたRelated Workは、元々サーベイ論文のようなレベルで広く体系立てて整理したいと思っていたので、書きたいことのほうが多く、比較的スムーズに進みました。意外に困ったのが、手法の初出がいつ、どの論文かということ。大体の論文はその辺適当で、厳密に一番古いペーパーを参照しようとしたりはしないので、その辺をあまり気にせず読んでいた論文を結構読み直しました。
そして、元々温めていた新規の手法を頑張って1つのチャプターまで成長させ、他の手法もジャーナル化と合わせてボリュームアップしてなんとか本文100ページ超えまで書き、6月10日無事提出完了することができました。
なお、これは奥さんの理解とサポートなしでは本当になし得なかったです。Acknowledgementはノロケではないのです。日中や休みの日は結構な頻度で研究室に篭もらせて貰い、またそれ以上に精神的なサポートも大きかったです。

本審査まで

本審査に向けて、発表資料を作成するとともに、改めて自分の研究の位置付けの整理をしていました。
元々、バイナリ特徴の画像検索は、「驚きを、常識に。」というauのCMで連携するODOROKIアプリというアプリで、端末内での高速な画像認識を実現するために、これまで利用したことのないORBというバイナリ特徴を活用し、突貫で認識ライブラリを作成したことが始まりでした。このときは実用に耐えるアプリを作成することが重要だったので、なるべくシンプルに要件を満たすようにライブラリを作っていたので、あまり研究という意識はありませんでした。
その後、バイナリ特徴に対してフィッシャーベクトルといった手法を適用して画像検索を行う研究を続けたりしていたのですが、改めてちゃんと調べてみると、実はバイナリ特徴を画像検索に応用している文献がほとんどないことに気づきました。
結果的に(今更ですが)、非バイナリ特徴で使われてきた様々な手法を初めてバイナリ特徴にうまく適用したという観点で、自分の研究を改めて位置付けることができました。
今回の博士課程では、どの研究でもそうだと思いますが、自分の研究と徹底的に向き合って、一体自分の貢献が何なんだということを考えることが一番得るものが大きかったです。自分では貢献が小さいと思っていても、その差分を徹底的に考えていくと、実はそこから新たな課題設定が見つかるものだと思います。

本審査

良い発表&質疑対応ができたと思います。
本審査までの間に自分の研究の位置付けを整理できていたため、イントロから結論までストーリーが一貫しており、楽しく発表することができました。発表のときには「分野外の人にも分かった気にさせる」のがモットーなのですが、副査の先生に「専門ではないが、理解できた」と言って頂けたのが嬉しかったです。

やり残したこと

やり残したというわけでもないですが、もっと学生の身分を利用できれば良かったと思います。
学生という身分だからこそ享受できるメリットがいっぱいある(が社会人だと享受しにくい)ということも再認識しました。
自分が学生の頃は意識低い系のネトゲ廃人であったためあまり活用できていませんでしたが、インターン、留学制度、起業家支援プログラム等々、今から思うと、修士の後、博士課程に進むという選択肢もあったな、と思うのでした。

MIRU'14で発表してきました

と言ってもACPR'13で発表した内容とほぼ同様です。一発ネタです。

  • SIFT特徴+BoVW表現に対し、SIFT+フィッシャーベクトル表現が精度的に優れているため広く利用されている(deep learningって言っちゃ駄目)
  • SIFT特徴は連続値を取る特徴でGMMでモデル化することでフィッシャーベクトルが導出できる
  • 近年ORBに代表される局所バイナリ特徴がその高速性から流行
  • バイナリ特徴のフィッシャーベクトル表現はこれまで提案されていない
  • バイナリ特徴は0,1しか値を取らないので、GMMではなく混合ベルヌーイ分布 (Bernoulli mixture model, BMM) でモデル化
  • フィッシャーベクトルを導出し、BoVWより良くなったお

ポスターでも発表しましたが、意外にフィッシャーベクトルの手前の、(混合)ベルヌーイ分布モデルでモデル化するという部分に意外性があったような印象でした。確かにあまりベルヌーイ分布自体が使われていないようで、私自身も色々調べたけど情報が少なかった印象はありました。そういう感触自体もポスターで発表すればこそで、既発表とはいえ発表する意味はあったなぁと思いました。

システムプリインアプリの判定

ApplicationInfo.flagsのフラグの立ち方で判定できる。
システムプリインアプリ
→ApplicationInfo.FLAG_SYSTEM

アップデートされたシステムプリインアプリ
→ApplicationInfo.FLAG_SYSTEM
→ApplicationInfo.FLAG_UPDATED_SYSTEM_APP

ユーザ領域にプリインされたアプリの場合、どちらのフラグも立たない

ApplicationInfo appInfo;
appInfo = getPackageManager().getApplicationInfo(packageName, 0);

if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
	// システムプリインアプリ
}

if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
	// システムプリインアプリでユーザ領域にアップデートされたアプリが存在
}

InstallerPackageName

最近Androiderなのでアプリ周りメモ

PackageManager.getInstallerPackageName()でアプリをインストールしたパッケージ名を取得可能
PackageManager  |  Android Developers

public abstract String getInstallerPackageName(String packageName)
Retrieve the package name of the application that installed a package. This identifies which market the package came from.

例えばGoogle PlayからDLしたアプリだと "com.android.vending" が付加されている。


他方、アプリからのapkのインストールはMIME type指定したIntent発行で行えるが、
http://techbooster.org/android/application/14715/
この際に、intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, "com.test.market");
とputExtraすることでInstallerPackageNameを付加できる。
(できるかもみたいな情報しかなかったが、実際やってみたらできた)

大規模特定物体認識技術およびその最新研究事例

信学会の自分の記事、今は条件付きで公開できるらしいので、以前の解説記事を公開します。会誌なのでふわっとした感じになってますが…
内田祐介, 酒澤茂之, "大規模特定物体認識の最新動向," 信学会誌, Vol. 93, No. 3, pp. 207-213, 2013. Copyright (C) 2013 IEICE.
公開条件等の認識が間違っていたらご指摘ください!

もう少し新しい情報を追加した記事を画像ラボさんに寄稿させて頂いたのですが、こちらは公開できないのでそのうちアップデートして別の記事として公開したいですね。
内田祐介, 酒澤茂之 "大規模特定物体認識技術およびその最新研究事例," Vol. 24, No. 12, pp. 61-68, 2013.

Japan CV Dayで発表してきました

今更ですが一応。

Japan Computer Vision Day 2013
http://partake.in/events/5a96edbd-7a32-4a6d-81b8-bf5e7bbcbbf4

togetter
http://togetter.com/li/540498

Ustream
http://www.ustream.tv/channel/%E5%90%8D%E5%8F%A4%E5%B1%8Bcv-prml%E5%8B%89%E5%BC%B7%E4%BC%9A

発表資料

"K-means Hashing: an Affinity-Preserving Quantization Method for Learning Binary Compact Codes," CVPR'13. を概説しています。k-means(ベクトル量子化)の符号化効率の良さと、バイナリコードの高速な距離計算の良いとこ取りができる手法です。ハッシングをk-meansでやっているところが面白くてこの論文を選びましたが、既存手法のiterative quantization (ITQ) のも非常に面白いです。
ITQは、ハッシングを量子化とみなすことで、ハッシングのための射影行列の最適化に直交プロクラステス問題を適用することを可能としました。直交プロクラステス問題は下式で表現される最小化問題です。
R = \arg\min_{\Omega} || A \Omega - B ||_F^2 \; \mathrm{subject \; to} \; \Omega^T \Omega = I
http://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem
直感的には行列AとBをなるべく同じにするような回転行列Rを求める問題です。量子化問題の場合、AとBはそれぞれ、量子化対象のベクトルとそれに対応するコードブックのベクトルを並べた行列です。そしてこれらの行列の差分のフロベニウスノルム(量子化誤差)を最小化する回転行列RがSVDで簡単に求まるのです。
ハッシングではなく、直積量子化の符号化効率の改善に利用している手法も提案されており、ほとんど同じ手法が同時にCVPR'13に採録されています。読んでみるとどちらも同じく直交プロクラステス問題に落とし込んでいることが分かると思います。ITQ論文がなければこれらの手法が生まれるのはもう少し遅かったのではないでしょうか。
"Cartesian k-means," CVPR'13.

"Optimized Product Quantization for Approximate Nearest Neighbor Search," CVPR'13.

やっていることはITQとほぼ同じで、直積量子化時の量子化誤差を最小化する回転を求め、回転されたベクトルを再度直積量子化コードブックに割り当て、その割り当てから直積量子化コードブックを更新するということを繰り返しています。

ついでなのでハッシング系の論文リストもおいておきます。

  1. "Similarity search in high dimensions via hashing," VLDB'99. (LSH)
  2. "Spectral Hashing," NIPS'08. (SH)
  3. "Learning to Hash with Binary Reconstructive Embeddings," NIPS'09. (BRE)
  4. "Locality Sensitive Binary Codes from Shift-Invariant Kernels," NIPS'09. (SIKH)
  5. "Kernelized Locality-Sensitive Hashing for Scalable Image Search," ICCV'09. (KLSH)
  6. "Sequential Projection Learning for Hashing with Compact Codes," ICML'10. (USPLH)
  7. "Self-Taught Hashing for Fast Similarity Search," SIGIR'10.
  8. "CARD: Compact And Real-time Descriptors," ICCV'11.
  9. "Complementary Hashing for Approximate Nearest Neighbor Search," ICCV'11.
  10. "Coherency Sensitive Hashing," ICCV'11.
  11. "Hashing with Graphs," ICML'11. (AGH)
  12. "Minimal Loss Hashing for Compact Binary Codes," ICML'11.
  13. "Random Maximum Margin Hashing," CVPR'11.
  14. "Iterative Quantization: A Procrustean Approach to Learning Binary Codes," CVPR'11. (ITQ)
  15. "LDAHash: Improved Matching with Smaller Descriptors," PAMI'12. (LDAH)
  16. "Isotropic Hashing," NIPS'12.
  17. "Supervised Hashing with Kernels," CVPR'12.
  18. "Spherical Hashing," CVPR'12.
  19. "Multidimensional Spectral Hashing," ECCV'12.
  20. "Double-Bit Quantization for Hashing," AAAI'13.
  21. "Variable Bit Quantisation for LSH," ACL'13.
  22. "Hash Bit Selection: a Unified Solution for Selection Problems in Hashing," CVPR'13.
  23. "Compressed Hashing," CVPR'13.
  24. "Inductive Hashing on Manifolds," CVPR'13.
  25. "Learning Binary Codes for High-Dimensional Data Using Bilinear Projections," CVPR'13.
  26. "K-means Hashing: an Affinity-Preserving Quantization Method for Learning Binary Compact Codes," CVPR'13.