大学1年生が何もわからないまま研究をする話
筆者:大西達也
はじめに
こんにちは!研究コミュニティ cvpaper.challenge 〜研究成果を世に送り出すまでのストーリー〜 Advent Calendar 2021の16日目を担当する,大西達也と申します.絵を描くことが好きです.現在私は,大阪大学工学部 電子情報工学科の学部1年生(B1)として過ごす日々を送っています.私の記事では,どうして学部1年が研究発表をすることになったのか?という経緯と,その内容についてB1目線で振り返っていこうと思います.
ギリギリ通った情報オリンピック本選,そして情報科学の達人との出会い
与えられた問題を解決するプログラムを制限時間内に書くーー.競技プログラミングという競技があります.「なんかすごそう!」という理由で競プロを始めたのは高校1年の10月でした.高校生以下が参加できる競技プログラミングの全国大会,日本情報オリンピック.高校2年になっていた私は部分点の差で本選ボーダーに乗り,最初で最後の本選出場の権利を勝ち取りました.本選招待者一覧のページを見ると自分の出身校が灘と筑駒に挟まれていて,ニヤニヤしていました.あと無料で東京に行けるのが純粋に嬉しかったです.
情報科学の達人を知ったのは,つくば国際会議場での本選を終えたあとでした.本選出場者は応募する際に情報オリンピック日本委員会からの推薦が受けられます.会場で仲良くなった人が「参加するぜ!」と言っていたので,私も「無料で貴重な経験ができるなら……!」という気持ちで応募することにしました.高校2年の3学期のことでした.
受験生,コロナに助けられる
情報科学の達人では,学生2人程度に対しメンターという「頼りになる先輩」のような人がつき,メンターの方と定期的にZoomで話します.第1段階でのメンターは組合せ最適化が専門の山口勇太郎准教授で,私はメンターの圧倒的社会性の高さに感銘を受けました.大学の志望理由書にも「メンターの社会性高すぎ!」という内容を書いた覚えがあります.Zoomで山口さんが競技プログラミングを始める,と話していて「(組合せ最適化を専門にしているので)一瞬でAtCoder黄色になりそうですね…」と言った記憶があります.
10月から始まる第2段階育成プログラムへ進むためには選抜で選ばれる必要があります.「第1段階だけでも十分かな…?」と思っていたところに舞い込んだのは「新型コロナで研究室訪問ができないため,希望すれば全員第2段階に進むことができる」という話でした.「最後の高校生活,楽しまないと面白くないよね!」と,大阪大学への受験勉強をしながら文化祭のクラス劇の総監督&脚本を同時並行でこなしていた私は,第2段階に進むことを選びました.
圧倒的詰め込みで出す進捗
2020年の末,情報科学の達人は第2段階に,そして高校の3年は受験シーズンに入っていました.大阪大学の推薦入試を終えた私は,高校の卒業アルバムの裏の見開きに使うイラストを描いていました.理系教科はめちゃくちゃ得意という訳ではありませんでしたが,美術の成績だけは学年1位になったことがありました.
第2段階でのメンターはCVが専門の産総研の片岡裕雄さんでした.コンピューター上で折り紙の折られ方をシミュレートできるOrigami Simulatorというサイトを事前学習に使ってみる,という内容の研究をするため,半手動で77595枚の画像を集め,爆速で発表用のスライドを作成し,なんとか発表当日を乗り切ることができました.
情報科学の達人で得た経験は,単に知識的な部分だけではありませんでした.研究者の圧倒的社会性の高さ,アイデアの生み出し方,スライド作成テクなど……大学に入ってから「役に立ってるなぁ…」と思うことが何回もありました.
入学,そしてcvpaper.challengeへの参加
無事推薦入試に受かり,大阪大学に入学することに.入学までの期間は合格祝いに買ってもらった液晶タブレットで絵を描いたり古典ギリシア語の勉強をしたりしていました.そんな中,情報科学の達人のSlackで,片岡さんから「cvpaper.challengeに入るのはどうでしょう?」との提案を受けました.情報科学の達人を通して得た経験は非常に多く,その繋がりを大学入学で終わらせてしまうのは勿体ないと思い,参加することにしました.
cvpaper.challengeではメンバーがそれぞれの研究グループに割り当てられます.私は情報科学の達人で行った発表の流れから,FATE/FDDBグループに入ることになりました.当時の私は「(FATE/FDDBってなんだ…?)」となっていました.グループ内では,週1ぐらいの頻度で進捗報告会を行います.議事録にB1と書かれているのを見て「やば…」と感じていました.
何も分からないまま,手探りの研究スタート
情報科学の達人のその他の受講生はkaggleや電子工作,アプリ開発をする人もいました.しかし,私自身は競技プログラミングの分野以外,ほとんど無知でした.CIFAR-10がデータセットの名前であることもその頃学びました.進捗報告会では「FDSL」「ACM」「ViT」「fine-tuning」「Grad-CAM」「ABCI」「NeRF」などの単語が飛び交い,「(なにも分からない……!!)」となっていました.
毎週の進捗報告会,毎回進捗がないのは申し訳ないということで,ググりながらPyTorchでGrad-CAMをGoogle Colaboratoryで動かしてみました.PyTorchもColaboratoryもそのとき初めて使いました.そのときは「なんかコピペしたら動きました!」というテンションでした.するとメンバーから「FractalDBを事前学習したモデルのパラメータを使ったらどうなるんだろう?」というアイデアが出てきました.これが国内シンポジウムで発表するに至った「実画像を見ない事前学習による前景領域抽出」の出発点になりました.ここから手探りの研究が始まりました.
積み重ねる試行錯誤
さて,コードを書くにもPyTorchの実装を何も知らない私は「PyTorchチュートリアル(日本語版)」を進めることで実装の流れを理解していきました.以前一度このチュートリアルを進めようとした際は,途中で何をしているのかが理解できなくなり断念してしまいましたが,「ゼロから作る Deep Learning 1」をざっくり読んで機械学習の実装の流れを理解したあとはなんとか理解が追いつきました.
それからはGitHubから引っ張ってきたパラメータを用いてGrad-CAMを適用.可視化手法を模索するうちにPyTorch用の可視化手法をまとめたライブラリであるCaptumを使うことになりました.前景と背景を切り分けるため,PyTorchのテンソルの扱い方を調べたり,データセットを使う為にTorchVisionを使ったり,VOCデータセットを使えるようにしたり,精度を求めるためのIoUを計算したり…で,「画像を読み込んで推論→可視化手法を用いてマスク生成」の基本的な流れを一通り実装することができました.
しかし,一向に生成される前景マスクがあまり良くならず,複数枚の画像に対して生成した前景マスクを観察しても,「物体の部分があまり選択されていないな…?」という問題が残っていました.しかし一部の画像を観察してみると,かなり背景側が選択されていることに気づきました.生成されたマスクの前景と背景を切り替えると,想像していた以上の精度が出ました.
はじめてのスパコン:ABCI入門
プログラムをGoogle Colaboratoryで動かすには少し窮屈になる,ということでABCIというスーパーコンピューターでプログラムが実行できるように実装の調整などを行いました.スーパーコンピュータが使えるということで私は「(数え上げおねえさんが使ってたやつだ…!)」という気持ちでした.ABCIの使い方が何もわからず「SSHって何だ…?」となっていましたが,既にABCIを使っている山田さんに教えてもらうことでなんとかプログラムが動かせる状態まで持っていくことができました.
ある程度研究が進んだころ,これまでGPUを使っていなかったことに気づきました.なんとなく「GPUオンにしてたらGPUで計算してくれるでしょ!」と思いGPUを使う設定で実行していましたが,プログラムを書いてモデルやテンソルをGPU上に移動させる必要があることに途中で気づき,実装を一部変更することになりました.その後実行すると以前は何時間もかかっていた計算が数十分で終わり,GPUの凄さを体感しました.
原稿,カメラレディ,発表動画,発表
9/10締め切りのViEW2021に原稿を提出する必要がある,ということで,片岡さん,中村さんや山田さんに共著に入ってもらい,原稿執筆へ.書く際に新規性などについての会話をしたときは心の中で「(Twitterで散々ネタになってる卒論の新規性のツイートで聞いたことある…!)」のような気持ちになっていました.めちゃくちゃサポートに入ってもらい,なんとか書き上げ提出しました.カメラレディ提出,発表動画作成でも同じ様に締め切り直前にスパートをかけていました.
「全部手伝われてしまうと経験にならない」という理由で,原稿やカメラレディ,発表スライドもVer.1は自分で作成しました.8割がた手伝ってもらった…部分もあるかもしれませんが,作成を通して得られた「論理構成をわかりやすく」「何を一番伝えたいかをはっきりさせる」などの話は,単に論文執筆だけではなく,その他のことにも応用が効くなと感じています.
大学の中間考査で忙しくなり,気づくとViEWでの発表の前日になっていました.なんとか発表の形まで持っていくことができたという状態で,「問い詰められたりしないかな…?」と心配になっていましたが,いざ当日になると吹っ切れてどうにかなりました.Zoomでのポスター発表は誰も反応がないと寂しくなるので,自分が聞く側になった際には簡単なことでも良いので質問しよう…と深く感じました.
おわりに
「大学1年が見る研究の現場はどんなものなのか?」という観点からこの記事を書くことになりましたが,いかがだったでしょうか.私としては情報科学の達人やcvpaper.challengeでの研究を通じて「(新規性…ポスター…Twitterで聞いたことある!)」とあたかもアニメの聖地巡礼をしているかのような楽しみ方をしながら,研究の難しさ,そして楽しさを感じることができました.
この数年を通じて学んだのは「とりあえず手を挙げてみる」ことの重要さです.競技プログラミングを始めたのも,情報科学の達人に応募したのも,cvpaper.challengeに入ったのも,全て「とりあえず」から始まりました.私は現在イラストの勉強も同時並行で進めていて,大学・絵・勉強と普通の学部1年生より濃い生活を送っていますが,これからも「とりあえず」の精神を大切にしていきたいと思います!
この記事が気に入ったらサポートをしてみませんか?