研究素人のCVPRへのチャレンジ

筆者:鈴木智之

CyberAgent で研究員をしている鈴木智之 (@tomoyukun)と申します。

本記事では、自分が修士 1 年の時に産総研 Research Assistant (RA)・cvpaper.challenge のメンバーとして取り組んだ Anticipating Traffic Accidents with Adaptive Loss and Large-scale Incident DB という研究が CVPR2018 に採択されるまでの話を時系列に沿って書いていこうと思います。研究素人の修士学生が周りの協力を得ながら何とか形にした研究プロジェクトの裏側ストーリーとして楽しんでいただけたら幸いです。

cvpaper.challenge 参加前 | 2016/4 - 2017/4

cvpaper.challenge の創始者かつ主宰の片岡さんと初めてお会いしたのは研究を始めて間もない学部 4 年の頃でした。自分の所属していた慶應青木義満研究室の OB だった片岡さんが、所属学生向けに cvpaper.challenge の紹介をしてくださったことがあり、自分もその会に参加していました。当時は 2016 年だったので、cvpaper.challenge の活動としては 1 年目に CVPR2015 全論文読破を達成し、 2 年目に入っていた頃だと思います。自分は卒論の研究テーマがようやく決まり始めていたくらいのタイミングで、CVPR や論文読破というのも正直あまりピンときておらず、同期と「とにかくサーベイというものが大事らしいね」と話していました。また、この時に研究室の一つ上の先輩である鈴木哲平さん(現デンソーアイティーラボラトリ)が片岡さんから誘われて、産総研の RA を始めていました。自分はそこから卒業研究で初めての研究活動に取り組む中で研究が楽しいと思い始め「お金をもらいながら楽しいことができる RA って最高じゃないか。何か格好良いし。」と思い始めていました。その後、ViEW2016 に運営スタッフのアルバイトとして参加した際に片岡さん、哲平さんと (立ち) 話をしたのがきっかけで、次の年から産総研 RA として受け入れていただき、cvpaper.challenge の研究プロジェクトを進めることが決まっていきました。

cvpaper.challenge 参加 - アノテーション期 | 2017/5 - 2017/7

卒論を無事形にし、修士 1 年の 5 月から産総研の RA として cvpaper.challenge に参加し始めました。最初からテーマが決まっていたわけではなく、すでに進んでいた先輩 RA の研究の手伝いや cvpaper.challenge の論文まとめを作成をしながらやりたいことを探して行こう、という感じでした。産総研つくばセンターはとても広い敷地の中に木々が生い茂っていて、個人的にはこののどかな雰囲気で研究するのが結構好きで、当時住んでいた日吉からの片道 3 時間かかる出所もあまり苦ではありませんでした。

1 ヶ月くらいテーマ決めについて露頭に迷ったタイミングで、当時片岡さんが交通安全環境研究所と交通事故のニアミスシーンを含むドラレコ映像を収集し、その分析をしているということを伺いました。一般的に収集が困難なデータであったことから、このデータを起点に何か考えてみてはどうかという提案をいただき、未着手だった分析項目の「危険シーンの検出( = 動画全体を見て動画中のどのタイミングで危険が生じたかを当てる問題)」を進めてみることにしました。とはいえ、元のデータは長い動画の中に危険シーンを含んでいる、というだけでどこに危険シーンが存在するかは動画によって異なります。そこでまずは危険シーン区間のアノテーション作業から入りました。最初にアノテーション効率化のために動画の再生とタイムスタンプの記録をキーボードでコントロールできる簡単なツールを作成し、1 万件近い動画に目を通していきました。アノテーションの質を担保するために片岡さんにも貴重な時間を割いて目を通していただきました。

ここからしばらくの間は往復 6 時間かけて筑波にアノテーションをしに行く人になっていました。ひたすらにアノテーションを続けていくと「早く危険シーンが来ないかなあ」と思い始めます。そして徐々に動画を見ながら「そろそろ危険が起こりそう」という感覚が何となく身についてきます。これは恐らく走っている場所や周囲の車両・歩行者の状況から判断していて、当然予感が外れることもあります。こうしている内に「危険シーンは事後に生じたタイミングを検出するよりも事前に予測できた方が実用的だし、数千件の動画を見た自分の感覚として不可能な問題ではないのでは?」と考え始めます。動画中のイベント検出の研究はレッドオーシャン気味だったので、その特殊なケースとして捉えられる危険シーンの検出というテーマで戦うことに少し不安を感じていたこともあり、「危険シーンの予測」という問題にシフトしました。当時、ちょうど自分がこの辺りのことを考えながらアノテーションに従事していた頃の、片岡さんとの Twitter でのやりとりが残っていたので貼っておきます。

実験開始 | 2017/7

アノテーションを完了し、問題が定まってからはいよいよ本格的に解法を考えていきます。まずは既存手法を調査していきますが、幸い全く同じ設定で適用可能なものは多くなく、その中で最新の手法をベースラインとして実装することにしました。実装していく中で、論文を読んだときにはあまり気にならなかった危険予測の学習に使われている損失関数について気になり始めます。簡単にいうと危険シーンに近づくにつれて重みが大きくなる損失関数で、危険の兆候が現れやすくなるほど重視して学習するという意味では頷けるのですが、どのようなペースで重みを大きくするべきか(危険シーンからの時間的距離に対する重み関数の設計)は自明ではありません。特に、危険の直前のみを重視する重み設計のため早期の予測が学習されない点に違和感を感じていました。

実装の変更が楽だったということもあり、しばらくここの重み関数のパラメータをいじったときの挙動を網羅的な実験を通して確認していました。すると、ここのパラメータの変更によって、学習されるモデルの挙動が大きく変わっていくことがわかってきたのです。危険予測の問題は予測の「正確性」と「早期性」の二つの観点で評価されるのですが、重み関数をいじるとこれらの間にあるトレードオフの関係を辿るようにモデルの出力が変わっていきます。

これを見ながら「確かにアノテーションのとき、危険シーンから離れていると予測は難しかったけど直前になると比較的高い精度で予測できたなあ」と思い出しつつ、正確性を担保した上で早期性を向上させる(あるいはその逆)ことが危険予測の目指すべき方向なのではないかと考え始めました。また、既存の研究ではこれら二つの指標のトレードオフの関係についての議論はあまりされておらず、損失関数に焦点を当ててトレードオフの改善を試みたものもなかったので、ここにアプローチできると研究としての新しさが出そうだと考えていました。ここから損失関数の再設計に深入りしていきます。

​損失関数の構築 | 2017/8 - 2017/9

まず、早期の予測ほど難しい、という観点から学習が進むにつれて徐々に早期の予測に重点を置くように損失重みをスケジューリングできないかと考えました。これは、アノテーションの際に徐々に早期に予測ができるようになった感覚と研究を始めたての頃に読んで強く印象に残っていた Curriculum learning (学習初期は易しいサンプルのみで学習し、学習が進行するにつれ難しいサンプルを増やしていくことで全体としての精度を改善する手法) から着想を得ていて、Curriculum learning と近い枠組みで早期の予測がうまく学習できないかという目論見でした。学習のエポック数に応じて徐々に早期予測を促すように重みを変更する損失関数を Loss for Early Anticipation (LEA) と名付けて、最初の提案手法として評価を行いました。結果としては全体で見ると微妙に性能は上がるものの、大きく失敗するサンプルが増えたり学習のばらつきが大きいなどの課題が出てきました。個人的にもエポック数を元に学習の進行を測るというのがかなりヒューリスティックであまりしっくりきていませんでした。最終的に共著者になっていただく当時産総研の所属グループのリーダーであった佐藤さんにもこの辺りを指摘いただいたのを覚えています。そこから細かいパラメータを調整して学習の安定化を試みましたが、あまりうまく行かずという感じでした。その後、他のインターンシップに参加していたこともあり、しばらくあまり研究に時間を割けない日々が続きました。

少しの間研究と距離を置いて、再度実験の学習曲線を眺めていると「学習の進行度はエポック数ではなく、予測の評価値で測るべきでは?」と思い (今思うと当然ですが頭が固くなっていた気がします) 予測の評価値を元に徐々に早期の予測に重点を置くようスケジューリングされる損失関数を設計しはじめました。細かいチューニングのフェーズはありましたが、設計した損失関数はある程度期待通りに動き、性能面・学習の安定性の面で LEA に勝るものになりました。この損失関数を、学習の進行に応じて適応的に変化することから Adaptive Loss for Early Anticipation (AdaLEA) と名付け (略称は片岡さんにアイディアをいただきました) 、これを提案手法に 11月締め切りの CVPR にチャレンジしようとなりました。この辺りで片岡さんから「cvpaper.challenge で初めて CVPR に通した人になってください!」と言われたのを覚えています。

論文執筆 | 2017/10 - 2017/11

提案手法が定まり、ここから論文を執筆していきます。実は 9 月頃に VIEW2017 に研究の途中経過をまとめて投稿しており、この原稿を起点にすることができました。質はともかく何となくでも形になっているものを作っておくと作業開始のハードルをかなり下げられるので大事ですね。とはいえ、英語論文を執筆したことがない研究初心者だったので、当然かなり苦労しました。修正をお願いする以前にそもそも初稿がなかなか作れず、手法や実験の章を自分が執筆するのと並行でイントロやアブストを片岡さんに執筆していただきました。初稿完成後も、片岡さんと修正を繰り返し、最終的に原稿のファイル名に付与されていたバージョンは 20 をこえていたのを覚えています。同時に論文の質を上げるために追加の実験も進めていましたが、特徴抽出など手分けができる部分は片岡さんに手伝っていただきました。

論文が形になってきてから、同じく CVPR 投稿予定だった産総研研究員の原さん、片岡さんと 3 人で印刷した原稿を机に広げてチェックしていました。その時片岡さんは自分と原さんの研究に加えてさらに 2 つの CVPR 投稿論文を準備していて、1 本でもこんなに大変なのに凄まじすぎる!と本当に驚いたのを覚えています。

実はこの時期、当該研究以外の面でも色々と大変な時期が重なり、精神的にきていた部分もあったのですが、自分を奮い立たせ作業をしていました。共著者の方々の強力なサポートもあって何とか投稿に行き着くことができました。

Rebuttal - Final Decision | 2018/1 - 2018/2

11 月の投稿から 1 月中旬に査読結果が返ってくるまでは、ViEW2017 で 9 月に投稿した内容で発表したり(最優秀賞の次点に選出していただきました)次の研究テーマのためにサーベイをしていました。個人的には就職活動などもぼちぼち始まっていた時期で、それなりに忙しく過ごしていました。

ついに査読結果が返ってくる日は、ちょうど産総研への出勤日で、早朝満員電車の中で結果を確認したのを覚えています。結果は Poster, Poster, Borderline でした。CVPR2018 は Oral, Oral/Poster, Poster, Borderline, Weak Reject, Strong Reject の 6 段階評価だったので、アクセプト寄りではあるものの、覆る可能性もある安心しきれない結果でした。ただ個人的には、段階評価の結果よりも査読コメントを読んで「査読者が自分の提案や主張を(部分的だとしても)理解し認めてくれたこと」の嬉しさが何より大きく、ここまでの頑張りが肯定されたようで感動しました。「結果はどうなるか最後までわからないけど、とにかく最後まで向き合ってやりきろう」と電車の中で思っていました。

産総研の研究室に着いてからは片岡さんとレビューの詳細をみながら作戦会議をしました。基本的にどの査読者も novelty は限定的で細かいツッコミどころはあるけれど提案の大枠は認められる、というものでした。正直自分でも novelty は大きいとは言えないと思っていたので、3人目の査読者 (Borderline) を中心に指摘していた実験設定の詳細や実験結果の解釈についての回答を中心にリバッタルを作成しました。この辺りは紙面の都合上提出論文では省略した部分も多かったため、回答作成にはあまり苦戦しませんでした。もう一つ、全ての査読者に共通したコメントは「 (英文的な意味でも構成的な意味でも) ライティングがひどい」というものでした。最後までブラッシュアップはしたつもりでしたが、確かに自信があったわけではないので情けない気持ちになりつつ「コメントを参考にしつつカメラレディでは修正します...」と謝りを書いておきました。なんだかんだリバッタル作成もギリギリになってしまい、産総研から自宅までの終電を逃して千葉の実家に帰るハプニングなどもありましたが、何とか悔いのない形で提出を完了できました。

リバッタルからさらに 1 ヶ月後、最終結果は自宅で確認しました。リバッタルによって評価自体は好転しませんでしたが、採択されていました。前日寝られず昼頃起床したので、最初は夢か現実かわからない感覚でしたが、共同主著の片岡さんや共著者の方々、 cvpaper.challenge のメンバーと連絡を取り合う中で徐々に実感が湧いて嬉しさがこみ上げてきた記憶があります。その日は午後に別の研究について指導教員の青木先生とミーティングがあったのですが、ミーティングの後に採択の報告をし、握手を交わしたのを覚えています。

振り返ってみて

ここまでは自分が修士 1 年の時に進めた研究が CVPR に採択されるまでのエピソードを時系列に沿って書いてきました。結構前のことだったので色々と記憶を辿りながら書いたのですが、今になって改めて「なぜこの研究プロジェクトがうまくいったのか」ということを考えたので (自分のためにも) 書いておこうと思います。

査読者との相性や各タイミングが良かった、筋の良い仮説を引いたなど運の要素は間違いなく大きかったと思います。その上で、次のような点がうまく機能して採択の確率を上げたのかなと思いました。まず、自分は良くも悪くも研究の素人でした。研究歴は 1 年で、やる気はあったつもりですが、英語論文は書いたことがないし、良い研究や目指したい研究のイメージも今よりかなりぼやけていました。一方で、危険は事前に予測されるべきという発想で危険シーンの予測にいきなり問題を変更したことや、アノテーションのときの感覚を元に既存手法からの改善の方向性やアプローチを考えられたのは、既存の研究や自分のこだわりに囚われすぎず目の前の考え事に集中したことが大きな要因だった気が今はしています。また、自分の仮説や手法を必要以上に疑わずに、ひたすら実験や改善にエネルギーを注げたのも同様の理由があるかなと思います (あくまで個人的な感覚ですが、中途半端に知識や経験が増えてくると逆に頭が凝り固まって悪い地点から抜け出せなくなることがある気がしていて、改めて気をつけたいと思いました) 。

しかし、当然このようなスタイルで一人で研究をしていたら、英語論文は書ききれなかったし、一度おかしな方向に進んだら戻れなくなって何も成果が出ずに終わっていた可能性もあります。幸い自分以外の共著者の方は全員プロの研究者で、自分が伸び伸びと研究ができるよう配慮していただきながら、研究の起点作りや大枠としての方向性が間違わないようなコントロールを常にしていただいていました。また、cvpaper.challenge のメンバーや RA の先輩方から多様な視点の意見をいただけたことが、自然と客観的な視点で研究を俯瞰する機会を作っていたのだと思います。「素人のように考え、玄人として実行する」という金出先生の言葉がありますが、それが共同主著者の片岡さんをはじめとする共著者の方々や周りのメンバーのおかげでできていたイメージかもしれません。研究者としては一人でこれができるようになりたいものだと思いつつ、ここに気づけたことは成長かなと思いました。

おわりに

本記事では自分が修士 1 年の時に進めた研究プロジェクトが CVPR2018 に採択されるまでのエピソードと、振り返って今思うこと書いてみました。最後まで読んでいただいた方、ありがとうございました!少しでも楽しんでもらえたり、一例として参考になれば幸いです。また、自分としても振り返ることで得たものがありました。この記事を書かなければここまでちゃんと振り返ることもなかった気がしているので、お話を下さった方々には感謝です。ありがとうございました!

この記事が気に入ったらサポートをしてみませんか?