今年の夏, MIRU 2023 チュートリアルにて「CVPR 2023 速報」[Full ver.] [MIRU ver.]を発表させて頂きました. MIRU2023会期中, 非常に辛(から)かった飲み会の席にて偶然にも面白いB4の学生さん(Oさん)とお話する機会がありました.その出会いをきっかけに, Oさんとは共同主著を前提として共同研究を実施させて頂くことになりました. もちろん, OさんはB4の学生さんということもあり, 初めての研究でコーディング未経験という状態からのスタートです.
かねがね, cvpaper.challenge研究メンバーとしても, 極めて変化の激しいコンピュータビジョン分野にてトレンドを創出するためには, どのように効率的に研究を進めていけば良いのか, 研究メンバーのプレゼンスを最大化するための方法論については片岡さんとも相談を重ねていました. また, 私個人としてもcvpaper.challenge アドベントカレンダー 2021の「産総研XX館における缶詰研究」[Link] 記事にて紹介させて頂いた, 極めて優秀な後輩学生とのICML 2019 / ICCV 2019 への投稿以降, 久しぶりの共同主著レベルでコミットする研究となりました.
これを良い機会と考えて, 2023年現在における研究フローの各ステップにおいて有用なツール群をまとめてOさんに共有しながら共に研究を進めています. この記事はその内容をベースに多くの方に有用な可能性がある部分をピックアップしたものになります. 少しでも皆さんの参考になれば幸いです.
論文サーベイ・研究アイデア考案
cvpaper.challengeでは,「コンピュータビジョン分野の今を映し, 新しいトレンドを創り出す.」をスローガンに掲げ, 研究アイデア考案のため, CVPR / ICCV / ECCVなどのコンピュータビジョン分野の主要な国際会議論文についての完全読破 / 網羅的サーベイに取り組んでいます. 2015年発足以降, いまもなお継続して取り組んでいます. 以下は2015年から2023年までのCVPRに採択された論文数になります.
CVPR2015: 602
CVPR2016: 643
CVPR2017: 783
CVPR2018: 979
CVPR2019: 1,294
CVPR2020: 1,466
CVPR2021: 1,660
CVPR2022: 2,063
CVPR2023: 2,359
いわずもがな, 研究を始めたてのB4の学生どころか, 一人の研究者でさえも最新情報を収集するのにはかなり難しい状況です. 論文数どころか研究トレンドもとてつもないスピードで変化しています. このような状況下でcvpaper.challengeではこれらのサーベイを人海戦術による数の力で行ってきました. それでもなお限界があります. そんななか, 2022年以降OpenAIがリードする形で始まったLarge Language Model (LLM)を使用したサービスの普及によりサーベイについても効率化が可能になりました.
ResearchPortが報告[Link]しているCVPRの統計情報. 「日本人研究者の活躍」によると, CVPR 2023における日本人著者比率は0.90%となっており, 世界におけるプレゼンス低下が止まらない状況です. このような背景からも知識の底上げという側面において, LLMとの連携により膨大なサーベイを促進することの価値は高いと考えています.
以下では, 効率的なサーベイを可能とする代表的なサービスについて紹介します.
GPT Assistants API / GPTs (Paper Interpreter etc.)
OpenAI Dev Day [Link] で発表されたAssistants API [Link] によって学術論文の解説に特化したカスタムのChatGPTが複数公開されています. 特にPaper Interpreterは公開が早かったこともあると思いますが,「全世界のアクセス数でも6位*」と非常に多くの方々が論文解説AIとして使用しているようです.
*開発者 紺野さんのXより抜粋: https://x.com/_daichikonno/status/1726016253868085275?s=20
Crux
Cruxは論文サーベイ・アイデア考案の用途で使用するためにcvpaper.challengeコミュニティの有志メンバーで開発をしているRAG (Retrieval Augmented Generation)のツールです. 論文群をチャンクに分割したものをOpenAIのEmbedding API [Link] で埋め込み, FAISS [Link]に格納して, LangChain [Link] 経由でLLMへのアクセス可能にするというシンプルな構成になっています. 今となってはAssistants API [Link] を使用してもほぼ同様のことが出来るようになっていますが, 他のサービスと繋ぎこむ必要がある際などにはよく使用しています. 例えば, 私はこちらの記事 [Link]と同様の方法で毎朝arXivに投稿された新しい関連論文のCruxを使用した自動要約がSlackに送信されるようにしています.
実装・実験
アイディアを具現化するための実装と, アイディアの検証するための実験を高速に回すことが研究においては重要な要因の1つだと思います. つまり限られた時間で如何に試行回数を最大化できるか [Link]ということで, 実装・実験の効率化についてはcvpaper.challengeの発足初期から課題があった部分でした. cvpaper.challengeでは, 各プロジェクトにてチームを形成して研究を進める性質上, 共同開発の容易さやコードの再現性等がチームの生産性に大きく影響してきます. 以前までは, コード管理や記述が属人的になりすぎており, 再現性が低いという問題がありました, そこで, 自らプロジェクトテンプレート開発を行い再現性が高い状態で, 試行回数を増やせるように工夫をしてきました.
以下では, 効率的に実装・実験を進めるために効果的なツールを紹介します.
Ascender
AscenderはPython を用いた研究プロジェクト向けのGitHubリポジトリテンプレートです. cvpaper.challengeではグループで研究活動を行っているため, グループメンバーがそれぞれの環境で1つのプロジェクトのための実験コードを開発する機会が頻繁にあります. しかし, 2022年以前は共通のテンプレートやコーディング規約が存在していなかったため, コードの共有や再利用, チームでの同時開発はあまり上手く出来ていない状況でした. そこで, MIRU メンターシッププログラムと cvpaper.challenge の連携研究グループである XCCVグループのメタサーベイ活動の一貫として2022年の7月にプロジェクトテンプレート Ascender を開発, 公開しました. 昨年のアドベントカレンダーではAscenderの紹介記事を書きましたが, この1年でスター数も140から375まで増えています. Ascenderは直近では開発のペースを落としていますが, linterを高速化および統一するためにRuff [Link] に置き換える検討やrye [Link] とpoetry [Link] の比較など, 使いやすさを向上させるために継続的な開発を行っています.
GitHub Copilot
https://github.com/features/copilot
State of AI Report [Link] でも報告がされているように, LLMが最も得意とする作業の1つはコーディングであり研究者もLLMとの協調作業によって実装の効率を大きく向上させることが出来ます. ロジックの実装を補助してくれるだけではなく, docstringや型ヒントも補完してくれるところも, スピードを重視した結果, 可読性や再利用性が低くなりがちな研究のためのコーディングには嬉しいポイントです. 特に, AI Native Development Guild [Link] はGitHub Copilotを使用してLLMと協調作業する際に頻出のパターンをハンズオン形式で学べるため, 一度目を通しておくと良いと思います.
Hydra
HydraはMeta (旧Facebook) が開発をしているパラメータ管理ツールです. Hydraを使用するとパラメータに容易に階層構造を持たせることが可能で, コードベースが大きくなってパラメータの数が増えても認知不可を低く抑えることが出来ます. また, 使いすぎると可読性を下げてしまいますが, instantiate関数 [Link] は上手く使用することでYAMLファイル側に変動する可能性の高い部分を記載して, コードをシンプルに保つことが出来ます. 例えば, こちらのブログ [Link] に記載されているように, データ拡張の際にどのようなクラスを使用するかといった内容はHydraのYAMLファイル側に記載しておき, instantiate関数でインスタンス化します. このようにすると, train / val / testのときにそれぞれif文で分岐してtransformを作成する必要がなくなり, 処理をすっきりさせることが出来ます.
VS Code Live Share / AWS Cloud9
共同作業はペアプロの形で行うことも多いためVS CodeのLive Shareを頻繁に使用しています. また, 特にAWSのリソースにアクセスする必要がある場合, AWS Cloud9を使用したペアプロも非常に便利です.
論文執筆
日本語が母語である我々にとって, 英語での論文執筆はどうしてもネイティブスピーカーの方と比較すると速度や質の面で不利であり, 悩ましいポイントだと思います. しかし, 論文の執筆についても近年のLLMの普及によって大幅な効率化が可能になってきています.
以下では, 効率的に論文を執筆するために効果的なツールを紹介します.
Overleaf / Overleaf Workshop
Overleafを論文執筆の際に使用している方は非常に多いと思いますが, VS Codeの拡張であるOverleaf Workshopを使用することでVS CodeからOverleafを編集できるようになります. この拡張とGitHub Copilotを組み合わせることで, Overleaf上での論文の執筆をLLMに補助してもらうことが出来, 執筆の効率を上げることが出来ます. 非常に便利なツールである一方で, ICMLなど一部の学会ではLLMを使用した論文の執筆に対するポリシー [Link] が公表されているため, 使用の際はそれらに抵触しないように注意して下さい.
Project Page 公開
研究は論文が採択されて終わりではありません. 自身の研究成果のアウトリーチについても非常に重要な要素となります. 近年では, CVPR / ICCV / ECCV論文は研究に関するプロジェクトページを作成することが慣習となってきています. 論文には記載が難しいコンテンツをプロジェクトページに記載することで効果的にアピールすることにつながります. CV / CG分野におけるトップラボの1つであるMax-Planck研究所のマイケル・ブラック率いる研究室では,
https://ps.is.mpg.de/whyWe also have web support to help researchers develop research webpages for disseminating results or for data collection.
というようにプロジェクトページ含めた開発サポートもあることが公式に宣伝されています.
Ascender (master-project-page branch)
https://github.com/cvpaperchallenge/Ascender/tree/master-project-page
実装・実験の章で既に取り上げたAscenderですが, 実はmaster-project-pageというブランチではプロジェクトページのテンプレートの開発を進めています. こちらはまだ開発途中の段階ですが, Webスタックの知識があまりない方でも編集が出来るように, HTML, CSS, JavaScriptのみで構成されています. 一方で, CSSのテンプレートはSaasからビルドされており, レスポンシブデザインが可能になっています.
以下のECCV 2022に採択されたNeural Density-Distance FieldsのプロジェクトページはこのAscenderに含まれているプロジェクトページのテンプレートを使用して作成されています.
nerfies/nerfies.github.io
NeRF関連の研究では, 多くのプロジェクトページがこのNerfiesのテンプレートを活用しています. また, このプロジェクトページを使用したページにはGUIを使用したインタラクティブなものが多くなっています.
最後に(全フローで有用なツールはやっぱり体力)
ここまで研究フローの各ステップにおいて有用なツール群を紹介してきました. 振り返ってみると, 私がはじめて研究活動に取り組んだ2016年当時と比べて, ツールが大幅に改善され効率化が進んでいると改めて感じました. しかし, 一方でやはり私個人としては様々な側面で効率が上がっても, 頑健な身体 (体力) は依然として重要だと日々感じています. 実際に, 私は平日は機械学習 / MLOpsエンジニアとして9:00-18:00で仕事をしているため, 研究活動はそれ以外の時間に行っています. 結果として8月以降の5ヶ月にわたって平日は大体 21:00-3:00の6時間, 土曜日は13:00-20:00の7時間, Slackのハドルをつなぎっぱなしにしてペアプロなどの共同作業をしています. つまり, 結局のところ, 生活におけるトータルの作業時間は2019年の缶詰研究 [Link] のときと何ら変わらない状態です. CVPR 2023速報の中にも「トップ研究者の体力・筋肉はヤバい!」という項目がありましたが, ツールが進歩しても最終的に体力と筋力で押し切る力を同時に養うことも重要だと思います.