動機
私は修士課程では、いつも英語を使って研究を行っていました。でも最近は、日本語で自分の研究を説明する場合がほとんどあります。そのために、自分の研究テーマと研究内容を他の人にきちんと伝えたいと思います。そして、この文章を書くことで、この2年で何に取り組んできたのか、何に興味があるのかを、きちんと説明したいと考えています。
研究テーマ選択の背景
修士一年のとき、基本的に姿勢推定という分野を研究していました。姿勢推定は画像認識の一部に属します。このテーマを選択するきっかけは、研究室探しのときに作成した研究計画書と関係があります。最初は、気になっていた研究室のウェブサイトを見るとき、数人の学生は姿勢推定に関する研究をしていました。そのとき、実は私はVR技術に興味がありました。特に、Hand Tracking という技術は魔法みたいだと感じました。VR ヘットセットをかぶるとき、自分の手の動きはバーチャル環境にはっきり反映されます。そしてグーグルに調べみると、Hand Trackingは実際にPose Estimation というモデルをデバイス上で実行していることが分かりました。でも、VRの場合はモデルの推論速度への要求が高いと思います、できるだけReal-timeに近いのが一番いいと思います。そこで、軽量姿勢推定というテーマを選び、時間をかけて取り組んできました。
研究内容
モデルの軽量化というトピックには、実はいろいろな手法があります。例えば、知識蒸留と量子化があります。知識蒸留は、簡単にいうと、より大きくて精度が高いモデルから、それほど大きくない小規模なモデルへ知識を移すということです。その際に一番重要なのは、損失関数です。知識蒸留では、教師モデルの予測結果と学生モデルの予測結果の差を計算し、その差が小さくなるようにモデルを学習させます。
本研究は知識蒸留を用いて、軽量姿勢推定を行います。
では、具体的にどのような手法を提案したのかを説明します。
実はこの研究は、二つの要素から構成されています。
第一は、教師モデルと学生モデルの選択です。
私の考えでは、一般的に姿勢推定モデルの設計では、精度向上のために内部の機能的モジュールを何度も繰り返し使うことがよくあります。でもその一方で、モデルのサイズは大きくなってしまいます。そして私は、こうした複数モジュールの使用は必ずしも必要ではないと思います。もし複数のモジュールが持つ知識を一つのモジュールにまとめられたら良いのではないかと考えました。そこで、新しい手法を提案しました。複数モジュールを持つモデルを教師モデルとして、単一モジュールを学生モデルとして学習させます。このモジュールはRSNという既存手法から採用しました。
第二は、損失関数の計算
総合損失関数は二つの部分から成り立っています。一つは蒸留損失、もう一つは学生モデル自身の損失関数です。蒸留損失は教師モデルの予測結果と学生モデルの予測結果の差です。学生モデル自分の損失関数は学生モデルの予測と正解データの誤差を計算します。この二つの部分を組み合わせて、最終的な損失関数を構築しました。
説明のために、以下の図をご覧ください。

より詳しく知りたい方は、この論文をご覧ください。
最後
この研究は、修士1年のときに取り組んでいました。でも、修士2年からは新しい研究方向に変えました。そのテーマは、姿勢誘導型人物画像生成です。もし興味があれば、ぜひ次の記事も楽しみにしてください。お読みいただき、ありがとうございました。