Kaggle Grandmasterになったのでこれまでの参加コンペを振り返る

はじめに

機械学習コンペティションプラットフォームKaggleのコンペ「G2Net Detecting Continuous Gravitational Waves」にて、5枚目の金メダルを取得し、Kaggle Competitions Grandmaster (GM) となることができたので、振り返りです。

最後の1年は時間の限られるパパKagglerとしてある程度打算的にGMを目指していたので、まずその辺りの参加スタイルを紹介します。

最近のKaggle参加スタイル

  • 子供が寝た後21時過ぎからが主戦場。週の半分は自分が寝かしつけるのでそのまま寝てしまう確率が高い。その場合、夜中に起きて深夜まで頑張る
  • 短期チャレンジ・複数コンペ同時参加はしない
    • ちゃんと金を狙う、取れなかったときの言い訳を作らない
  • 本格的な参加タイミングは開催後1ヶ月くらい経ってから
    • EDAやdiscussionが充実して自身のベースライン検討に必要な情報が出揃い、ドキュメントやメトリックの不備がある場合も指摘・修正されていることが多い
      • 正直フリーライド的なスタイルなので今後恩返ししたい
  • 序盤
    • Discussion/code/データを眺めながらコンペの雰囲気を把握しつつアプローチを妄想する
      • アプローチを妄想するのはPC前じゃなくて良いのでお風呂とか、寝かしつけしながら想いを馳せたりする。だが考えている間に一緒に寝てしまう
    • 最初は自分でEDAはせず、voteの多いEDA notebookを中心に見る。Discussionもvoteの多いものから読む(重要そうな情報はメモしておく)
    • 何となく雰囲気がつかめてきたら自分のベースライン手法構築のための仮説検証を目的としたEDAを行う
  • 中盤
    • なるべくシンプルなベースラインからスタートして1つずつ改善を入れてCVスコアを上げていく
    • ある程度CVで自信のあるモデルができてからsub。これは個人的なこだわりで、最初のベースラインができたタイミングでsubするほうが効率は良さそう
    • やる気が出ないときや学習結果待ちのときに未読のdiscussionは全部読む。追加でコメントがされたものも全部読む。voteの少ないものでも重要なdiscussionがあったりする
        - 終了1ヶ月前くらいまでになるべくLBを上げて、チームマージを検討する
  • 終盤
    • これまでの延長上で大きなモデルを長時間学習しつつ、別のアプローチの検討も続ける
    • チームの場合は他のメンバーのアプローチと相補的なアプローチを重視
  • コンペ後
    • 終了前にsolutionを予め準備しておいて、コンペ終了後すぐ投稿する
      • 最近は金とかじゃなくてもちゃんと書くようにしている。コンペ終了直後に投稿するチームは少ない&まだ熱が残っているので読んでもらえる
    • 上位解法との差分を再現検証すべきだができていない。理想的にはなるべくシンプルなsingle modelでどこまでスコアを出せるかを考えるのが一番意味がありそう

それらしいことを書きましたが、なんだかんだソロのこだわりみたいなのがあり、ガンガンチームマージするのは苦手でそこまで打算的にはできませんでした。本記事のこれ以降は、初めてKaggleに参加してからGMになるまで、自分が真面目にやったコンペの思い出ポエムです。長文注意。

 

初コンペ参加

全く記憶がないのですが、Kaggleのアカウント作成自体は2016年の10月に行っていました。当時の所属はKDDIで、育休から復帰して事業部から研究所に帰任、2016年9月に博士号を取得した直後のタイミングなので、何か新しいことをやりたくなったのでしょうか。その後DeNAに転職しています。

初のコンペ参加は2018年5月、GLRの略称でシリーズ化されている、Google Landmark Recognition Challenge / Google Landmark Retrieval Challengeでした。ちょうど2018年4月にその時の所属であったDeNAでKaggle制度が導入されています。私自身はデータサイエンティスト職ではなかったので制度の対象外ですが、Kaggle自体には興味を持っていて、前職で画像検索の研究をしていたこともあり、@Seed57_cash さんに誘われて、@nardtree さんとともに参加しました。

初subの様子

結果ですが、Recognitionが27位、Retrievalが39位でした。1ヶ月弱の参加だったことを差し引いても、仮にも自分の専門分野だったこともあり悔しい思いをしました。他方、みんな元々専門家じゃないのにコンペ期間だけで一気にキャッチアップしてくるヤバい場所なんだな、と驚きました。ということで、これを機にKaggle依存が始まったようです。

なお、@nardtree さんに大規模処理のhelpをお願いしたら、簡易大規模システムみたいなのを構築して一晩でやってくれましたみたいなのが発生したのが衝撃的でした。

 

Quick, Draw! Doodle Recognition Challenge(2018年12月)

落書きコンペ。AIに自分が書いた落書きを認識させるゲーム、Quick, Draw!のデータセットを使った落書きのクラス分類を行うタスク。ラスタ画像ではなく、ベクタのストローク情報が与えられており、単に白黒のラスタ画像に変換する、筆順やストロークの方向を色情報に落とし込む等の色々なアプローチが考えられる面白いコンペです。

最初のコンペで短期決戦で脳汁出るのが楽しかったらしく、2週間くらいの短期参加でソロ銅の結果でした。業務でもコンペでもKerasを使ってきたのですが、そろそろKeras辛いみたいな感じになって、このコンペ以降はPyTorchに移行しました。

 

Humpback Whale Identification(2019年3月)

いわゆるクジラコンペ。クジラの尻尾画像が与えられ、そのクジラの個体識別を行う、顔認証ならぬ尻尾認証コンペです。

知人とやろうと話をしていたのですが、私自身はチームマージ期限ギリギリに独自モデルを初subしてミジンコのようなスコアを出しながらチームマージしてたようです。
ちょうどその頃、新卒採用の面接で顔認証をやっていた方とお会いして、顔認証では最近ArcFaceというのが良いらしいという話を聞き、早速クジラコンペで試してみたらうまくいったという思い出深い話があります。

チームメイトのほうはpublic notebookの手法をベースにしており、全くアプローチが違うのでアンサンブルでかなり伸び、なんと17位でフィニッシュでした。今から思うと非常にもったいない参加の仕方をしているのですが、この頃は短期でそこそこ良い結果を出すのが楽しいと思っていたようで、それじゃ勝てないなと言う感じです。


VSB Power Line Fault Detection(2019年3月)

電線コンペ。三相交流の電圧波形から、送電線の部分放電を検出するタスク。同僚の @Kenmatsu4 さんと参加。電圧波形から色々特徴抽出してCNNやLSTMでコネコネしていたけど、CV/LBが全く連動せず、メダル圏外。電線何も分からん。@Kenmatsu4 さんの選択しなかったラストサブが銀圏だったので申し訳ない気持ちでいっぱいでした。終了直前、鼻中隔湾曲症の手術で入院していたのですが、夜な夜な休憩スペースでずっとKaggleしていました。


Recursion Cellular Image Classification(2019年9月)

細胞コンペ。様々な低分子干渉RNA (siRNA) を利用してRNA干渉を行った細胞の分類を行うタスク。画像コンペに飢えていたのか、初期から参加していたようです。ベースラインモデルがハマったのと、RNA干渉実験を行ったプレート毎に277クラスが多くとも1回しか現れないというリークを使って割当問題を解いてラベルを最適化すると序盤に金圏に浮上することができました。

このコンペは何故か通常1週間前に設定されるチームマージ期限がコンペ開始後1ヶ月に設定されており、そのタイミングで更に上位のチームからチームマージの誘いがありました。悩んだ挙げ句、まだまだ先も長いしチームマージして頑張ることにしました。

終了半月前くらいにリーク情報が運営から公開されスコアが詰まりましたが、最終的に4位でフィニッシュし、Kaggle Masterになることができました。最終的な解法は、チームメンバーが学習した大量のモデルを使って、割当問題でラベルを最適化してpseudo labelで学習するのを繰り返すという力技でした。

 

Open Images 2019 - Instance Segmentation(2019年10月)

クソデカOpen Imagesデータセットを用いたコンペ。Object detection, instance segmentation, visual relationship detectionのタスクのコンペが3つ同時開催されました。Instance segmentation trackでmaskrcnn-benchmarkを動かすだけみたいな解法でソロ銀でした。

この同時3コンペで、同僚の @Schwert さんが金1銀2を取得して一夜にしてKaggle Masterになってました。そこまで潤沢な計算資源があるわけではない中、初期からコツコツ実験を重ねてのソロ金で本当に凄かった。5人+チームとGMばっかりの恐ろしいobject detection trackのLBを見て欲しいです。Instance segmentationも11位の銀で惜しかった。


Lyft 3D Object Detection for Autonomous Vehicles(2019年11月)

Lyftコンペ。自動運転のための物体検出タスクで、LiDARとカメラ画像のデータが与えられるが、6DoFを求めないといけないので基本的にLiDARメインとなる。LiDARデータを2.5D化してsegmentationタスクで解くという公開notebook的なアプローチでソロ銀。上位はpoint cloudからの物体検出手法をちゃんと使っていて、完全に負け。

なお、当時インターンに来てもらっていたpoint cloudからの物体検出のプロ @_yukke42_ さんにまだ参加しないんですかーとか煽っていたら一瞬で抜かれて3位入賞されてて凄すぎた。


RSNA Intracranial Hemorrhage Detection(2019年11月)

CT画像から頭蓋内出血のタイプを分類するコンペ。@Appian さんが終盤にめちゃくちゃ整った金圏出るレベルのrepoを公開されて、これのモデルでっかくしてアンサンブルしたら簡単にメダル取れるじゃんぐへへみたいな邪な気持ちで手を付けた記憶があります。中途半端にコンペ掛け持ちするのは駄目です。

最終的には、隣接するCTのスライス情報をうまく統合することが必要で、いっぱいshake downして銅で終了だったのはさておき、このときのAppianさんのrepoを参考に、自前のPyTorchテンプレートみたいなものが確立できたのがとても良かった。


Peking University/Baidu - Autonomous Driving(2020年1月)

車載カメラ画像から、写っている車両の位置・姿勢(6DoF)を推定するタスク。ちゃんと初期から取り組んで、初のソロ金を取得することができた思い出深いコンペです。年末年始に実家に帰っているときも、ド深夜に家族を起こさないようにトイレにこもってバグ取りしていた記憶があります。

車両の角度を精度良く求めるために、GTのカメラ座標系での角度ではなく対象の車両をカメラ中心に持ってきたときの角度とするようなことをしていたのですが、推論結果はカメラ座標系に戻さないといけなかったりして無駄にパイプラインが複雑になり、座標系のバグでひたすら辛かった時期がありました。ちなみに、scipy.spatial.transform.Rotation が、オイラー角、クォータニオン、回転行列が全て簡単に扱えてめちゃくちゃ便利です。最後のアプローチとして終了5日前に突貫で投入した、難しい奥行き推定だけをモデルを分けるというアプローチがうまくいったのがドラマチックでした。

最終的な解法はこちら


Bengali.AI Handwritten Grapheme Classification(2020年3月)

ベンガルコンペ。手書きのベンガル語の文字画像を分類するタスク。各文字は、grapheme root, vowel diacritics, consonant diacriticsという3種類のパーツから構成されており、それぞれのパーツのクラスを推定する必要があります。3種類のパーツのクラス分類をそれぞれ行ってもよいのですが、組み合わせである文字自体のクラス分類として解いたほうがLBが良かったので、そのアプローチで突き進みました。その結果、チーム組んで頂いた fnakamura さんと、sukekiyo さんを巻き込んでshake downしてしまった苦い思い出、教訓です。

Testにはtrainに存在しない組み合わせの文字も存在すると明記されていましたが、public/privateでそんなあからさまなsplitはしないだろうと思っていました。愚か。上位陣はちゃんとtrainに存在するかどうかを距離学習ベースで認識して処理を変える等をしていました。なお、反省会で飲みに行ったのはめちゃくちゃ楽しかったです。


ALASKA2 Image Steganalysis(2020年7月)

画像にこっそり埋め込まれた情報であるsteganographyが存在するかどうかを判定するタスク。学部の頃に画像に対する電子透かしの研究をしていたのと、前職で深層学習モデルに電子透かし埋め込むという一発芸研究をしたので、ドメイン知識はあるだろうということで参加。

同僚の @kzykmyzw さんと一緒にやりつつ、最後はひたすらチームマージの誘いを送りまくって勝った!と思ったら、6位→21位にshake downしてしまいました。完全にtrust CVゲーでした。Trust CVを心で理解しました。

オーバーフィットして喜んでいる姿をご覧ください。


Lyft Motion Prediction for Autonomous Vehicles(2020年11月)

Lyftコンペ。自動運転車両が、認識した周囲の車両が今後どう動くかという軌跡を予測するタスク。ドメインがモビリティということで、同僚5人でチームを組んで参加しました。データ量が膨大で、またデータフォーマット等をちゃんと把握するのが大変でした。それぞれの車両に、3つまで確信度付きで軌跡を予測できるのですが、この順不同の出力をどうするかとか色々考えていたのですが、全く本質ではなかったです。ちゃんと大量のデータを使い切るところがスタートラインだったようで、後半その辺りを頑張り始めたが間に合わずという感じで銀メダル。

チームメンバーとワイガヤしてできたのは楽しかった一方、私はほとんど貢献できず申し訳なかったり、チーム内でのモチベーションやコミットが偏るところが、最初からチームを組んでやる際の難しいところだなと実感したコンペでもありました。

この辺りまでが私のKaggleの前半という感じです。2020年〜2021年は組織が別会社に承継されたり、下の子が生まれたりで上記のコンペも含めあまり参加できなかった時期です。


NFL 1st and Future - Impact Detection(2021年1月)

NFLコンペ。ナショナル・フットボール・リーグのプレイ映像において、プレイヤーのヘルメット同士がぶつかったタイミングを予測するタスク。年末年始の短期チャレンジで参加。久しぶりにガッツリ手を動かせて楽しかった。


Sartorius - Cell Instance Segmentation(2021年12月)

細胞コンペ。3種類の細胞のインスタンスセグメンテーションタスク。大晦日が最終日という非人道的コンペ。検出しなければならない細胞が小さく大量に存在し、mmdetのデフォルトconfigだとこの状況に対応できないので、通常あまりいじらない部分のパラメータを変更する必要があるのが特徴でした。逆にその辺りをちゃんと設定して、細胞の種類毎のモデルを作って適切にconfのしきい値を調整すると、モデル自体はmask_rcnn_r50_fpnとかで銀圏上位に行ける感じでした。

Pseudo labelから後処理まで色々やることがあり、ソロだと辛いと感じていたので終了1ヶ月前くらいに、@Ocha_Cocoa さん、@tnkcoder さん、@tereka114 さんのチームにマージしてもらいました。そこで主力で使われてたmmdetを直接魔改造したCBNetV2が単体で強かったので、segmentationモデルでrerankするアプローチを試したり、GTのマスクがぶっ壊れているのを投稿時にも再現する後処理をやったり、terekaさんが作られてたtwo-stageモデルをアンサンブルする部分のバグ取りとかをしていました。これまでのチーム戦で一番スコアへの貢献度が低かった気がしますが、賞金圏内かどうかぐらいの貢献はあったかなという感じです。大作の解法はこちら

1年ぶりくらいに真面目にKaggleやって金が取れたことで、今年は継続して頑張ってみようかなと思った瞬間でした。

 

TensorFlow - Help Protect the Great Barrier Reef(2022年2月)

ヒトデコンペ、あるいはGBRコンペ。珊瑚礁の海底映像から、珊瑚を捕食してしまうオニヒトデを検出するタスク。ちゃんとtime-series APIのコンペになっているのが良い。YOLOv5モデルで推論画像サイズを大きくしていくとどんどん精度が上がるという謎現象があったり、上位が何かしらmagicがあるようなLBスコアを出していたりしていたので、GBR何も分からんと言われていた。

そのmagicは結局、public testのデータセットのbounding boxが訓練データと比較してtightにつけられており、推論結果のbounding boxを小さくして投稿するとpublic LBが上がるということだったらしい。ひどい話だと思うのが、テストデータは5つのvideoから構成されており、public testは3番目と4番目のvideoのそれぞれ一部から構成されていることがprobingにより分かっていたので、private testも前述のtight bounding boxの傾向があるはず(少なくとも3番めと4番目のvideoのprivate testは)と予測されるのだが、どうやらpublic test部分だけこの傾向があったらしく、大きくshakeする結果となっていた。

私の取り組みとしては、評価指標がrecall重視のメトリックだったので、訓練動画を逆再生してトラッキングして、遠方の漏れているBBOXを自動で付加してアノテーションを増やすみたいなのをやったりしつつ、YOLOv5とmmdetのモデルを混ぜたりしていましたが、LBが全然上がらず、モヤモヤしたまま終わりました。ソロ銀。面白かったけど。

 

Happywhale - Whale and Dolphin Identification(2022年4月)

クジラコンペ第二弾。今回は対象にイルカも加わり、様々な種類のクジラ・イルカの個体識別を行うタスク。距離学習系のコンペは、最後は画像サイズとモデルを大きくして殴るみたいなところがあり、一度TPUをちゃんと使ってみようというモチベーションで参加。

結果的に、GPUデスクトップやGCPインスタンスはほぼ使わず、Colab Pro+のTPUだけで戦い切ることができました。現在はColabはポイント制になってコスパが悪くなっていますが、V100やA100といったGPUと比較してTPUは性能に対して消費ポイントは低いので、TPUを使うのであればまだColab環境は選択肢に上がると思います。
ひたすらクジラとイルカのBBOXをアノテーションしてcropの精度を上げて、TPUで効率的に大きなモデルを学習するという正攻法で1ヶ月前くらいまでに銀圏上位に到達し、また @tereka114 さんチームに入れて頂きました。

今回はちゃんとモデルでも貢献しつつ、捨てられそうになっていたSiamese Networkモデルを救い出す等の貢献ができました。最後はどんどん周りのスコアが上がって来てドキドキしましたがなんとか金圏に残り、4つ目の金を取ることができました。解法はこちら

 

Image Matching Challenge 2022(2022年6月)

IMCコンペ。2枚の画像が与えられ、それらの間の基礎行列を推定するタスク。Twitterでやるぜー!みたいな機運を感じたので入れて頂きました with @fam_taro さん、@mlaass1 さん、@arutema47 さん、@s_shohey さん!

スタート時点から社外の方とチーム組んでやるのは初めてでしたが、ゆるふわと言いつつみんなガンガンコミットするので、乗り遅れないように頑張ってました。

チームの方針としては、タスク自体は2枚の画像毎に処理をすることが想定されているのですが、データ上は同じsceneに所属する画像群が特定できるので、それら全ての画像集合をSfMで三次元再構築してしまうというものでした。決まれば一撃必殺なのではというワクワク手法でしたが、中々LoFTRベースの手法から精度が上げられず終了でした。めっちゃ楽しかったけど、悔しいのでリベンジしたい。@s_shohey さんがめちゃくちゃprobingしていたのが凄かった。

 

UW-Madison GI Tract Image Segmentation(2022年7月)

UWMGIコンペ。MRI画像から大腸、小腸、胃の部位をセグメンテーションするタスク。Public notebookでスコアが出てたのが2.5Dアプローチだったので、どこかでチームマージすることも考え、3Dモデルに注力していました。ちょうど渾身のモデルをsubするぞ!という凄いタイミングで、@inoichan さんから誘って頂いてチームマージしました。@inoichan さんがちょうどつよつよ2.5Dモデルだったので、計算通りです。

終了ギリギリまで計画的に2人でそれぞれモデルを強化していき、最後はちょっとshake upしての15位でした。最後の3subにprivate 8位相当のsubがあり、それまでのprobingで最後に選んだsubはpublicにoverfitしているのは実は分かっていたはずで、終了後はちょっとしょんぼりしていました。終了直前までLBがそこまで上がらず、半ば心で負けてしまっていたと反省。

このコンペ、MRIスキャンのボクセルの下部でアノテーションが良く分からない場所から途切れているという事象があり、全く現実の問題には貢献しないですが、この途切れを気にせずに全部セグメンテーションするモデルでセグメンテーションしつつ、別のモデルでこの途切れる位置を推定するという部分がキーポイントだったと思います。解法はこちら

 

RSNA 2022 Cervical Spine Fracture Detection(2022年10月)

頸椎のCT画像から頚椎のC1-C7部位それぞれおよび全体の骨折の有無の判定を行うタスク。骨折のラベル情報だけではなく、頚椎領域の3Dセグメンテーションや、骨折領域のbounding boxも与えられており、解法のパイプラインとして様々な可能性が考えられるという観点で非常に面白いコンペだと思いました。

私の解法は、頚椎部分を3Dモデルでセグメンテーションし、C1-C7の部位にそれぞれ2.5Dモデル+Attentionを適用するというものでした。先ほど色々な可能性が考えられると書きましたが、結果的には上位解法は大体こんなソリューションに落ち着いていました。UWMGIコンペリベンジとしてもかなり本気で取り組んでいたのと、パイプラインとしてはほぼ1st Place Solutionと同じだったので、精度を上げきれてないのが悔しかったコンペでした。

 

G2Net Detecting Continuous Gravitational Waves(2023年1月)

G2Netコンペ。レーザー干渉計 (detector) によって観測される信号から、中性子星が高速回転する際に発生する未観測の重力波の1種であるContinuous Gravitational Waves (CW) を検出するコンペ。まだ観測されたことがない信号なので、detectorの観測および人工的に作成されたノイズに、シミュレーションで生成されたCW信号を合成することで作成されたデータセットが提供されていました。

Testデータのノイズをなるべく模倣するデータを生成することに注力し、CNNベースの手法で中盤くらいにLB3位まで上がったのですが、そこからほとんど本質的な改善ができずに終了してしまいました。最終的な解法はこちら。なんとか金圏には残ることができ、Grandmasterになることができました。

上位陣は、matched filter的なアプローチで、signalのパラメータから決定される波形から、そこにsignalがあった場合のスコアを算出するというのを大量のテンプレートに対して行っていました。この大量の試行をどう効率的に行うかがチームごとに違って面白かったです。競プロというか、Heuristic Contest的な趣ですね。なお、コンペのトップページには最初から下記のように書いてあったのですよね!

Traditional approaches to detecting these weak and hard-to-find continuous signals are based on matched-filtering variants. 

 

終わりに

今後ですが、これまで、Kaggle Masterになってもソロ金ないしなぁと思い、ソロ金とってもGMではないしなぁと思いながらやってきて、ついにGMになることができましたが、悔いがない、やりきった、あるいは完全に勝ったぞと思えるコンペが正直ないので、まだまだやっていきたいと思います。後は、もう少しdiscussionやnotebookでも貢献していきたいです!一緒にやろうぜも募集しています!

おめでとうコメントを頂いた方々、ありがとうございました。中でも、昔書いた記事を参考にして頂いたという話が聞けたのがとても嬉しかったです。

 

参考文献

GMの方の記事ってあるのかなと思って検索して見つけた記事です。どれも面白いですね。他にもあれば教えて下さい!

 

@smly さん

ho.lc

 

@tereka114 さん

nonbiri-tereka.hatenablog.com

 

@hirune924 さん

zenn.dev

 

@NmaViv さん

nmaviv.hatenablog.com

 

@colun さん

zenn.dev

 

@aryyyyy221 さん

aryyyyy.hatenablog.com

 

@s_shohey さん

zenn.dev

 

@tnkcoder さん

tnkcoder.hatenablog.com

 

@junkoda さん

medium.com

 

@knshnb さん

blog.knshnb.com

 

@jy_msc さん

www.wantedly.com

 

@tattaka_sun さん

tattakaaqua.hatenablog.com

 

@monnu0621 さん

monnu621.hatenablog.com

 

 

 

zenn.dev

エンジニアからマネージャーに転生して2年経ちました

久しぶりのポエムです。2020年4月1日より、DeNAから株式会社Mobility Technologies移籍することになったので振り返りです。

これまでのお話

ちょうど3年ちょっと前にKDDI研究所(現KDDI総合研究所)からDeNAに転職し、研究者からエンジニアに転生しました。その時から2020年3月31日まで、AIシステム部という、全社横断で様々な事業ドメインに対して、AI技術による新たな価値提供を実現することを目的とした部署に所属していました。

 

転生してから1年経ったときのポエムです。

 

その後、2018年4月よりグループマネージャー(いわゆるGL)、その後2018年10月よりAIシステム部 副部長となり、初めてマネジメントにチャンレンジすることになりました。マネジメントをしながらも、プレイヤーとしても色々やっていた(つもり)ですが、このポエムではマネジメント部分にフォーカスして(抽象的に)振り返りたいと思います。

 

マネジメントと言っても一般的にその期待役割は幅広く、部門自体の役割や、その会社や部門のフェーズによっても何が求められるのかが大きく変わると思います。私自身、ちょうどメンバーを集めていく部の立ち上げ期から、様々な組織的な課題が発生し運営の比重が大きくなる時期まで関わることになったので、図らずも少しずつステップアップしていくような感じでマネジメントを学ぶことができたように思います。

 

マネージャーの役割については、下記の記事が参考になるため、項目をピックアップさせて頂きつつ振り返ります(エンジニアリングマネージャーではないですが)。

   

ピープルマネージメント

グループのメンバーとは隔週でone on oneをやっています。特にツールを使ってシステムマチックにやっているとかはなく、何か課題や相談ごとがないかというスタンスで、雑談だったり、取り組んでいるプロジェクトの具体的なディスカッションだったり、逆にこちらからの相談だったりをしています。

 

one on oneに関しては、色々改善の余地があると思いつつ、なかなか客観的に見るのが難しいです。格段相談ってほどじゃないんだけど…みたいなのをしっかり引き出せると良いなぁとか、コーチング的な能力身につけていきたいとか思ったり。引き出し方や整理が上手な人とone on oneすると、目を背けてきた自身の抱えている課題が明らかになったりするるので、そういうのできるようになりたい。

 

ピープルマネージメントでは、何か課題があるときに、それが各メンバー固有の事象として発生しているのか、根本的にプロジェクトや組織に課題があるのかを見極めることが重要だと体感しました。当たり前といえば当たり前なのですが、あるメンバーに特有の課題を大げさに組織として対応してしまうと変なことになるし、組織として解決しないといけない問題を各メンバーを個別にフォローするのでは筋が悪い。私の上司はそのあたりの見極めや、ふわっとした課題感からの具体的な課題の切り出しがとても上手だったので、勉強になりました。

 

育成という観点では、新卒のメンバーにはメンターがつくのですが、そのメンターで定期的にミーティングして、課題の共有や対応策のディスカッション、それぞれの取組内容のシェアみたいなのをやったのは、メンターとしてもミーティングのファシリテーターとしても勉強になりました。

 

プロジェクトマネジメント

新規案件の、相談ベースからフィージビリティスタディまでの段階のプロジェクトのマネジメントもどきをやっていました。大抵やらないほうが良いんじゃないですかねぇ…みたいになっちゃうのですが。

 

後は、入社当時からずっと関わっていたプロジェクトでは、初期メンバーという理由で(?)取りまとめ的なことをやっていたのがさすがに手におえなかったのを、プロの方が入ってきて綺麗にして頂いたのが、ちょっと前に諸事情によりそのPM業を引き継いでやっていたりします(規模が数倍になって戻ってきた)。この引き継ぎ前後2週間くらいはかなり脳汁が出ていた気がします。

 

テクノロジーマネジメント

個々の機械学習的なアプローチに関して色々言うことはあっても、技術選定というほどのことはしていません。コンピュータビジョン領域に関しては、現在各プロジェクトで取り組んでいないけれど、将来必要になりそうな技術を選定して、先行的に取り組むみたいなことをしていました。最近は機械学習のモデルよりも、やはりそれを組み込む際の技術選定や設計のほうが重要だと思っています。

 

社内の技術やノウハウの共有が行われる仕組みや風土に関しては頑張っていたつもりで、部内の技術共有会の運営をしていました。社内での取り組みですが、資料はなるべく社外公開するように推奨したり、そのための手続きの簡略化したのは良かったのではないかと思います。

 

結構悩んだのが、コンピュータビジョン系のメンバーの定例で、最初はメンバーも少なくプロジェクト進捗みたいなのをやっていたのが、メンバーが増えるにつれ破綻するのが目に見えたタイミング。そもそも進捗確認がしたいわけではなく、違うプロジェクトに参画しているがコアの専門性は共有しているメンバーが、技術共有やディスカッションを行うことを目的にしたかったので、そのための場としてどういうものが良いのか。20人とかを全員参加必須だと時間の無駄では?結果的には、参加も発表も必須ではなく進捗ではなく技術の話をしようということにしたのですが、みんなが色々共有してくれて盛り上がる会とそうではない会が出てしまったり。でも気持ちとしては持ち回り発表必須にはしたくない。ないかうまい方法はあるのだろうか。最近のZoom等でのカジュアルな参加形態は結構良い気もしています。

 

採用計画の策定

採用計画の策定といった大げさなことはしていませんでしたが、中途採用、新卒採用にはかなり関わりました。中途採用はどういう人が欲しいかを考えてjob descriptionを書いたり、アプローチの検討をしたり、アトラクト面談や会食したり。

 

新卒採用に関しては、HRの新卒採用の方と密に協力して、人材像のすり合わせ、採用フローやインターンの設計、課題作成、準備、運営、実際のメンターまで、一時期新卒採用しかしてないのではないかみたいな関わり方をしていました。HRの担当の方がとても優秀だったので楽しくやっていけたのがとても良かったです。学生の方々も、自分が学生の頃に比べると本当に優秀でメンタリングも学びが多かったです。

 

採用広報活動

色々やりました。デザイナーさんやHRの方にも協力していただいて、Shibuya Synapseというイベントの立ち上げとをやりました。採用ブランディングの一環としてやりつつも、DeNA色を出しすぎないようにしたり、イベント自体の存在意義をしっかり示しつつ、定期的にイベントを開催するのはとても難しいです。

 

勉強会系だとICLR2017読み会Deep Learning Acceleration勉強会ICLR2018読み会@PFN第46回 コンピュータビジョン勉強会@関東(前編)ICML2018読み会NeurIPS2018読み会@PFNICLR/ICML2019読み会といったイベントを、主催したり、共催したり、会場誘致したりしました。自社で開催するケースでは、運用の大部分をHRに完璧にサポートして頂いたおかげで、本当に満足度の高いイベントにできていたのではないかと思います。

 

自身の登壇も色々やっていたのですが、これは感覚としてはもはや自分が好きでやっているだけな気がします。イベント開催とかも実はそうなのかもしれませんが。思い返すと、teratailさんのMANABIYAでディスカッションさせてもらったり、自社イベントのDeNA TechCon 2018で登壇させてもらったり、ABEJAさんのSIX 2019に登壇させて頂いたり、ステアラボ人工知能セミナーに呼んで頂いたり。SSIIという学会でSSII'18はオーガナイズドセッションをやったり、SSII'19では企画側なのに登壇したりしてました。ほぼ学会活動ですが。

 

振り返って

思い返すと、組織やプロジェクトの成長に伴って、違うフェーズの業務やマネジメントを体験できたのは、まさに適度なストレッチになりつつ、業務としてもやりがいのある面白い経験でした。1つの部門にずっといたわりにはかなり多様なことを体験できました。

 

他の部門の方と関わる機会も多くあったのですが、本当にDeNAという会社はそこで働くメンバーがとても気持ちが良い会社でした。少なくとも自分の見てきた範囲では、部門間の壁とか、責任や仕事の押し付け合いとかは皆無で、DeNA Qualityの1つ、『こと」に向かう: 本質的な価値を提供することに集中する』が体現されていると感じました。

 

今後

4月から株式会社Mobility Technologiesに移籍となります。本当はプレイヤーとしての能力で生きていきたい気持ちはずっとあるのですが、一旦その気持を封印してマネジメントに徹するときが来たと思っています。これから気をつけたいと思っているのは実は透明性で、背景やそこへ至る途中経過が分からずに結果だけが降ってきたみたいな見え方にならないように気をつけたいです。後は適切に任せていくこと。苦手だと自覚しているし、メンバーからのフィードバックでもそこが一番弱い。ちなみに「コントローラー、プロモーター、アナライザー、サポーター」みたいな分類だとコントローラーだし、ストレングスファインダーだと指令性が1位なので何か自分の中でルールを作らないといけない気がしています。

 

蛇足

ふらっと雑談するみたいなのができないコミュ障な割にコントローラー気質なので、本質的にマネジメント(特にピープルマネージメント系)向いていないのではという葛藤はずっとあり、かといってプレイヤーだけのスキルで戦っていけるわけでもなく、この辺が自分の中で整理される日は来るのだろうか。今の自分の専門性並に、自信を持ってマネジメントが専門ですと言える日は来るのだろうか。

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を付加できる。
(できるかもみたいな情報しかなかったが、実際やってみたらできた)