Quantcast
Channel: ALBERT Official Blog
Viewing all 191 articles
Browse latest View live

映像に自然な音をつける技術 ~用途と技術例~

$
0
0
アイキャッチ画像

はじめに

こんにちは、2020 年入社のプロダクト開発部に所属しております、渡邉です。このたび新卒研修の課題として「動画から自然な音をつける技術」というテーマで技術調査を行い、その結果をこのようにブログという形でアウトプットすることになりました。ここでは技術の詳細には立ち入らず、「この技術が現在どれぐらいの精度が出ており、現在あるいは将来的にどのような場面に応用できそうか」という点を中心に議論していきたいと考えています。どうぞよろしくお願いします。

“映像に音をつける”とは

図1. “映像に音をつける”とは
まずはじめに以下の議論を円滑に進めるために、映像に音をつけるということを以下のように定義します。 “映像に音をつける” とは
  • ある音のない映像が与えられた際に、なんらかのプロセスを通して与えられた映像と調和する音を付与すること。
この調和する音を付与するということがポイントであり、図1の例では電車の動画に対して「ガタンゴトン」(厳密には文字列ではなく音)というように、実際に電車が線路を通過する際に発生しうる音を付与しています。反対にこの電車の映像に対して調和しない音というのは、例えばホワイトノイズのような音を付与することです。要するに「ちゃんと映像に合うような音をつける」ということです。

なぜ映像に音をつけるのか

映像に音をつける技術と聞いて私が一番気になったのは、「どうしてわざわざ映像に音をつける必要があるのか」ということでした。チャップリンの映画などを代表とする 100 年以上前に撮影されたような映像を除いて、大半の映像には音がついていることが一般的かと思います。ましてやこの 21 世紀、もうすぐ 5G 通信網がサービスインしようとしているなかで音のない映像を利用しなければならない理由とはなんなのか。そして、その映像へ音を後づけするとどんなメリットがあるのか。とても気になりました。
そこで少し調査を行うと、映像に音をつける技術が有用である候補として大きく 2 種類の利用者が浮かび上がってきました。その 2 種類の利用者というのが、
  • コンテンツ製作者
  • 視覚障がい者
です。以降ではこれら2種類の利用者に関して、それぞれが抱えている課題とその解決策を考えていきます。

コンテンツ制作の場合

まず映像や Virtual Reality (VR) などのコンテンツ製作者の現場に注目します。結論から申しますとコンテンツ制作の場合において、課題と解決策は以下になります。
  • 課題:編集作業にかかる時間の増加と求められる質の向上
  • 解決策:音の候補を提示することで制作工程を削減し、編集作業に集中させる


図2. コンテンツ制作の昔と今
ひとつの映画を完成させるにあたって、必要なプロセスは大きく
  1. 撮影
  2. 編集
にわけられます。ここでコンピュータが台頭する前の時代では、爆発などの仕込みを行った上で撮影を行い、その後の編集に入ります。しかしその編集作業というのは、ほとんどフィルムを切り貼りするのみであったのではないかと思います(その切り貼りがとても大変だったのかもしれませんが…)。一方で現在は Computer Graphics (CG) の台頭などから、昔とくらべて編集の比重が高くなっていると推測されます(図2)。

図3. CG 使用量と製作者への負担
また CG などのコンピュータを使った映像編集は非常に様々な効果を映像に付与することができる一方で、その映像効果に対応する音も同様に付与する必要があり、その編集を行う製作者への負担も大きくなっていると考えられます(図3)。実際に九州大学の岩宮眞一郎 名誉教授は
映像コンテンツの良し悪しは音と映像の調和度と高い相関がある[1] 1. 岩宮眞一郎:”「音」 がないと映像はつまらん!”, 日本人間工学会大会講演集 日本人間工学会第 50 回記念大会. 一般社団法人 日本人間工学会, pp. 110-111, 2009.
と発言しており、これによると製作者に期待される音の質は、その映像の質とともに向上するため、製作者への負担増加を更に後押ししていると推察されます。また音に限った話ではありませんが、動画投稿サイトYouTubeへ動画投稿を行っている YouTuber のひとりである HIKAKIN さんは、2018 年 3 月 19 日放送の「プロフェッショナル 仕事の流儀」(NHK)にて
7分の動画を完成させるため、編集作業に6時間かけている 2018年3月19日放送の「プロフェッショナル 仕事の流儀」(NHK)
と発言しており、個人レベルにおいても編集作業の負担の大きさがうかがい知れます。

図4. 映像に調和する音素材の有無による制作作業工程の違い
そのような非常に重たい負担である編集作業のひとつである音の付与を代替してくれるような、あるいはその候補をいくつか挙げてくれるようなシステムがあれば、その作業負担を減らすことができると考えます。
図4では音を付与するために必要な工程として、YouTube: ハリウッド映画特殊効果音の作り方を大公開!を参考にして
  1. 音がなる物を探す
  2. それを使った録音
  3. 編集
を挙げています。これらの工程のうち、音の候補を挙げてくれるようなものがもしあれば、その工程は
  1. 編集
のひとつにまで絞り込むことができます。製作者はコンピュータから離れて、わざわざ素材を探したり音を録音したりする必要がなくなるのです。

視覚障がい者の場合

次に視覚障がい者の場合について考えていきます。結論から申しますと、この場合における課題と解決策は以下が挙げられます。
  • 課題:他の感覚で代用するための訓練が必要
  • 解決策:訓練の必要がなく、かつ自然な音を提示し、ストレスのない生活を実現する


図5. ダニエル・キッシュさんの TED トーク
視覚障がい者にとって使うことができない視覚を代替するような音を出力できれば、目が見えない彼らを救うことができそうです。しかし、本当にその必要があるのでしょうか。図5に記載の YouTube リンクでは、視覚障がい者であるダニエル・キッシュさんの TED トークが再生されます。彼は口で舌打ちをし、その直後に周囲の物体から帰ってくる反射音を聞くことによって、周囲の環境を把握できるといいます。これはエコーロケーションと呼ばれる技術であり、視覚障がい者のなかには既にこうして視覚を使わずとも他の感覚によってそれを代替できている方も存在します。

図6. 点字と点字ブロックによる視覚の代替
このエコーロケーションでは聴覚を用いていますが、他にも点字や点字ブロックなどのように触覚を用いた方法も存在します(図6)。しかしこれらを自在に操るためには、大きな問題があります。それはこれらの感覚を磨くための、十分な訓練です。

図7. Sight(http://thesight.jp/press/SightLeaflet201510.pdf より引用)
そこで開発されたものが、Sight です(図7)。Sight は視覚障がい者の把握することが困難な周囲の環境を 3D カメラを使って計測し、その環境に関する情報を音に変換することでユーザに伝えます。Sight はエコーロケーションの役割を肩代わりしてくれるため、訓練負担を大幅に下げることが可能です。

しかし一方で、変換された音は目立つためにあえてあまり快適とは言えないような「グワングワングワン」というようなゲームの効果音のような音になっています。(2020 年 4 月初旬時点では YouTube にデモ動画があり、音を聞くことができたのですが、現在は限定公開に設定されているようです。) このような音は障害物などに接近しており、危機に瀕する際には有効だと思いますが、普段からこのような音を聞いて生活を行うことはあまり現実的ではないと推測されます。 そこで私はこのような音を、その機能を保ちつつ、少しでも人間にとって心地よい音に変えられると良いのではないかと考えています。そのもっとも類似した例として、電車の発車メロディが挙げられます。これは
発車メロディには、乗車を促し、注意を喚起するだけではなく、心地よさを演出するという役割も求められる
ITmediaビジネスONLiNE 近距離交通特集:向谷実氏が考える鉄道と音楽(前編)――発車メロディ3つのオキテ (1/3)
という見方に基づいて設計されているそうです。 私はこの目標を達成するための第一段階として、まずは映像から自然な音を付与する技術が必要だと感じています。

映像に音をつける技術

ここまでで、映像に自然な音をつける技術の需要と用途を説明しました。そこでここからは、実際に映像に音をつける技術について少し掘り下げていきます。今回の調査で発見した文献で提案されている技術を表1に箇条書きでまとめました。それらの技術は大きく音を生成する技術音を検索する技術に分けられます。

表1. 映像に音をつける技術例

技術例音への変換方法考えられる応用場面
いくつかのシーンにおける”自然な音”を生成[2]生成– 映像・VRコンテンツ製作者のための音源制作支援
– 視覚障がい者のための周辺環境把握支援
人が積極的に鳴らしたときの”音”を生成[3]生成– 映像・VRコンテンツ製作者
人が話している映像から”音声”を生成[4]生成– 視覚障がい者のための会話支援
映像から関連する”音楽”を検索[5]検索– 映像・VRコンテンツ製作者のための音源制作支援
ここでは「コンテンツ製作者支援と視覚障がい者支援の双方を達成するために、映像に”自然な音”をつけること」が目的であるため、今回は「いくつかのシーンにおける”自然な音”を生成[2]」する技術に着目します。

映像から自然な音を”生成する”技術

まずはこの技術の紹介ビデオを見て頂けると何をしているのかが、わかりやすいと思います。ビデオはまず Visual to Sound というタスクの説明から始まります。次に映像は同じで音が異なる 2 つのビデオ流し、どちらが生成された音なのかを尋ねるクイズ形式になっています。最後に失敗例をいくつか紹介して終了という流れです。ちなみに私が一番好きな失敗例は、最後のドラムを叩いているのにお鍋の蓋を叩いたときのような音が流れてしまった例です。このように映像から音を生成することができるようです。次にこの技術の入出力構造について簡単に見ていきます。

入出力構造

図8. 映像から音を生成するニューラルネットワークの構造([2] Figure 3. を元に著者が手を加え作成した)
この技術は Zhou らが執筆した論文のなかで提案されたニューラルネットワークをベースとした推定技術です[2]。その論文の中では推定技術に関して3つの DNN の構造を提案していますが、ここでは最終的な評価結果が比較的良好であった RNN を用いたものについて説明します。少しその中身を展開すると、ニューラルネットワークの中でも画像を得意とする畳み込みニューラルネットワーク(Convolutional Neural Network: CNN)と時間が関わるデータが得意な再帰型ニューラルネットワーク(Recurrent Neural Network: RNN)の組み合わせで構築されています。対象が映像という時間的な関係をもつ複数枚の画像であることを考えると自然な構造だと思います。 図8にはこの技術の入力と出力である映像と音に加えて、簡単なニューラルネットワークの構造を示しています。このニューラルネットワークでは、動画の一部分を複数の画像に切り出し、対応するオプティカルフローとともに DNN を利用して音声の生成を行っています。DNN とは、一般的なニューラルネットワークの中でも多くの層を用いたニューラルネットワークを指します。この技術の場合、その内訳は前段に画像から音を生成するための特徴を抽出する CNN と、後段にその特徴を使って音の波形を生成する SampleRNN が続く形になっています。ここで SampleRNN [6] というのは RNN を応用した技術のひとつであり、音声信号などのサンプル点が非常に多く、かつ長期的な特徴と短期的な特徴の両方を持つような信号を生成するための工夫がなされています。 また特徴的な点がもうひとつあります。それはオプティカルフローを入力に加えている点です。論文内ではこのオプティカルフローをわざわざ事前にすべて計算を済ませた後に、通常の画像とあわせて入力に用いています。なぜ事前計算をしてまで、このオプティカルフローを導入したのでしょうか。

オプティカルフロー

オプティカルフローに関する説明を行っているWebページを引用すると
オプティカルフローとは物体やカメラの移動によって生じる隣接フレーム間の物体の動きの見え方のパターンです
鳥取大学 小山田研究室 > OpenCV-Python Tutorials 1 documentation > OpenCV-Python チュートリアル > 動画解析 > オプティカルフロー(Optical Flow)
と説明されています。ざっくりいうと「映像内における画素の動く方向と量を表すもの」と考えて良さそうです。

図9. オプティカルフローの簡単な例
簡単な例を図9に描きました。図9では、時刻 1 のときには画像の真ん中にあった太陽が、時刻 2 では右側に動いていることがわかります。このときのオプティカルフローは右方向という方向と、動いた距離のことをいいます。

図10. 動画を用いたオプティカルフローの実例
オプティカルフローの例として、実際の映像に対応するオプティカルフローを表示した動画を図10に示しました。この動画では、上が紫、右が赤、下が黄緑、左が水色といったように、方向が色で表されており、またその距離が彩度で表されています。ただし、映像の中でどの方向に動いているかを表しているに過ぎないので、カメラ自体の動きは考慮されておらず、実際に動画内の鳥が飛行している方向と必ずしも一致するわけではないことに注意してください。 ここで普段の生活を思い返してみると、音が鳴るような場所では多くの場合において物の動きが大きいように思います。そこでこの画素の動きを表現できるオプティカルフローを画像とあわせて入力することで、音が鳴る場所がわかることが期待されます。

出力する音の妥当性

最後に論文内で報告されている音の評価について言及します。評価方法は「ひとつずつ動画を人間に見せ、作られた音なのかどうかを2択で判断してもらう」というものです。評価尺度は「作られた音を本物と判断した割合」です。ここでは、オプティカルフローを入れた場合の DNN での評価値と、オプティカルフローを入れない場合の DNN での評価値を、それぞれ表2に示します。

表2. 映像から音を生成する技術の評価結果

また、この DNN の学習・評価に用いたデータセットには合計 10 カテゴリが存在し、表の上段にはそのそれぞれのカテゴリごとに DNN を別々に学習・評価した結果を示し、下段には 1 つの DNN で全 10 カテゴリを学習・評価した結果を示しています。具体的なカテゴリ名は「赤ちゃんの泣き声、人のいびき、犬の鳴き声、etc…」の全 10 カテゴリです。どれも特徴的な音を出すものと見受けられます。

表2上段をみると、それぞれのカテゴリにおいて学習・評価を行った DNN はオプティカルフローを導入する場合「特定の 1 カテゴリにおいて 73.36 % で人間を騙せるほどのクオリティの音を生成できた」ということになります。

一方で、オプティカルフローを導入しない場合は 72.63 % と報告されています。オプティカルフローの有無であまり変化がないように見受けられますが、Drum カテゴリのみの結果に着目すると、オプティカルフローありでは 70.83 % 、なしでは 64.58 % となっており、音のタイミングがシビアなカテゴリにおいて特に良い結果をもたらしているようです。

しかし私個人的には、この実験設定はあまり実用的ではないと考えています。なぜならば、将来的にあらゆるカテゴリの音を生成できるような DNN を構築するとなれば、この実験設定のままでは、そのすべてのカテゴリの数だけの DNN が必要となるからです。その上、どの DNN に映像を入力するかを別途判断する必要があります。 一方表2下段では1つのDNNで全 10 カテゴリを学習・評価した場合の評価値を示しています。この値は提案論文の 5.5 節 Additional experimentsのなかで言及されており、「特定の 10 カテゴリにおいて 46.29 % で人間を騙せるほどのクオリティの音を生成できた」ということになります。紹介ビデオでの結果を聞く限りは少なくとも明らかに理解不能な音ではなかったため、私の直感とも一致する評価結果であると感じました。

しかし「本物の音のうち本物だと判断された割合が 91.43 %」であることも論文内では報告されており、まだまだ本物の音には遠いのかもしれません。また論文が対象としたデータセットに含まれている音のカテゴリはどれも特徴的であり、生活音の中では大きな音の部類に入るものを対象としているようにも感じます。このため、より音のカテゴリを増やすと、この評価指標値は下がってしまうと考えられます。

これらを鑑みると現状では
  • 視覚障がい者支援などの音の忠実さが求められる用途には不向き
  • コンテンツ制作支援などの人間による補正が可能な用途には、カテゴリを絞ることで利用は可能
といった結論に落ち着きます。

まとめ

映像に自然な音をつける技術に関して、前半ではその必要性を、後半では現在存在する実際の技術例を紹介させて頂きました。より詳しく述べると、この技術を必要としている方は VR や映像制作などに関わられているコンテンツ制作者や、周囲の環境を視覚以外から把握する訓練に苦労している視覚障がい者でありました。その中で現在存在する技術として DNN とオプティカルフローを組み合わせた方法が提案されており、一定の能力を持ちつつも、あらゆる映像から正確な音を再現するまでには至っていない状況であることを説明しました。このため現在応用可能な領域は、コンテンツ制作支援などの忠実さがあまり求められない用途に限るのではないかと考えています。これを箇条書きにまとめたものを以下に示します。
  • 考えられる用途
    • コンテンツ制作支援(Virtual Reality: VR、映像制作など)
    • 視覚障がい者支援
  • 技術の現状
    • DNN とオプティカルフローを組み合わせた方法が提案されている
    • 現状コンテンツ制作支援などの忠実さがあまり求められない用途には応用できる可能性がある

感想

ALBERT に入社しておよそ 3 ヶ月が過ぎました。リモートでの研修ということではじめは不安ではありましたが、徐々にそのような環境にも慣れていき、現在もリモートでこのブログを書いています。研修ではデータ分析に必要な Linux, Python の基本、機械学習や統計を用いた分析手法を満遍なく教わりました。私はプロダクト開発部所属ですが、データサイエンティストとして一通りの分析の流れを体験した非常に貴重な機会でした。 同時にデータサイエンティストが抱える課題も研修の中で少し垣間見れたと思っています。例えばデータサイエンティストは基本的に Jupyter Notebook を使って分析コードを書き、その結果をグラフや文章として残します。一方で分析作業は非常に多くの試行錯誤の繰り返しです。そのため、その中で書かれたコードというのは、私も含めてですが、たとえ分析者が意識していたとしても自然と読みづらいコードとなってしまうことが少なくないようです。プロダクト開発部では、そのような課題を解決できるようなお手伝いができればと考えております。

ALBERT では、データサイエンティストを募集しています。ぜひ採用​ページをご覧ください。

参考文献

  1. 岩宮眞一郎:”「音」 がないと映像はつまらん!”, 日本人間工学会大会講演集 日本人間工学会第 50 回記念大会. 一般社団法人 日本人間工学会, pp. 110-111, 2009.
  2. Yipin Zhou, Zhaowen Wang, Chen Fang, Trung Bui, and Tamara L. Berg. “Visual to sound: Generating natural sound for videos in the wild.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.
  3. Andrew Owens, Phillip Isola, Josh McDermott, Antonio Torralba, Edward H. Adelson, William T. Freeman. “Visually indicated sounds”, Proceedings of the IEEE conference on CVPR,  pp. 2405-2413, 2016.
  4. Konstantinos Vougioukas, Pingchuan Ma, Stavros Petridis, Maja Pantic. “Video-Driven Speech Reconstruction using Generative Adversarial Networks”, arXiv preprint arXiv:1906.06301, 2019.
  5. Sungeun Hong, Woobin Im, Hyun S. Yang. “Content-Based Video-Music Retrieval Using Soft Intra-Modal Structure Constraint”, arXiv preprint arXiv:1704.06761, 2017.
  6. Soroush Mehri, Kundan Kumar, Ishaan Gulrajani, Rithesh Kumar, Shubham Jain, Jose Sotelo, Aaron Courville, Yoshua Bengio. “SampleRNN: An unconditional end-to-end neural audio generation model.”, arXiv preprint arXiv:1612.07837, 2016.

深層学習を用いた数値シミュレーション

$
0
0
こんにちは。2020年に新卒としてALBERTに入社した、プロジェクト推進部の曾怡庭(チェン イーティン)です。今回で新卒研修の技術調査に関するブログは4件目になります。本稿では、「深層学習を用いた数値シミュレーション」について紹介していきたいと思います。私がこの課題を選んだのは、大学・大学院で環境科学を専攻し数値シミュレーションに触れ合う機会があり、最新の動向を知りたかったためです。

こうした深層学習と数値シミュレーションの融合はまだまだ新しいテーマです。この手法は、数値シミュレーションの解釈可能性と深層学習の汎用性を融合させるため、これから広く応用されることが期待されます。

1. はじめに

1.1 なぜ数値シミュレーションが必要か

現実世界の現象を解析するために、そのパターンとメカニズムを要約し、数理モデル化します[1][2]。物理的もしくは時間的変動を伴うほとんどの現象は変化量で表せるため、微分方程式で記述できます。例えば、流体の運動を示すNavier-Stokes方程式、流体における物質の輸送過程を表す移流拡散方程式、人口成長を表すマルサスモデル、感染者数を表すSIRモデルなどがあります。

微分方程式を解くには、実際の解(厳密解)を解くか、数値シミュレーションを用いて近似解を算出するかの二つの手法があります。数値シミュレーションは、微分方程式で表される数理モデルを、離散化により計算機で取り扱える形式の数値モデルにし、拘束条件のもとで反復計算により近似解を求めるプロセスです。

現実には、多くの事象が複雑で、解析解(厳密解)を求める手段がないため、数値シミュレーションを用いる必要があります。計算性能が飛躍的に伸びた現在は、膨大な計算を行えるため、医療や製造、防災分野にて、数値シミュレーションは幅広く使用されています。

1.2 数値シミュレーションの限界

一般的に、分析対象のシステムをよく理解するため、数理モデルを用いて、以下二つの解析を行います図1

図1 分析対象のシステム、数理モデル、データの相互関係[3]
1)対象となる現象を模倣したモデルを設計し(いくつかのパラメータからなる)、未知のデータに対して予測あるいは推定を行う。 2)観測データから対象となる現象のメカニズムを解明する。

数値シミュレーションを使用すれば、1)の基礎方程式や拘束条件や説明変数などのパラメータによりデータを生成でき、いわゆる「順問題」を低コストで解けることができます。また、既知の物理法則をもとにシミュレーションを行うため、なぜそのような結果になったのかを説明できます。しかし、2)の観測データからパラメータを推定する「逆問題」はまだ効率的に対処されておらず、データから直接的に対象となる現象の生成ルールなどの情報を抽出することは困難です。通常は、パラメータスタディによりパラメータを推定しますが、パラメータスタディの過程にて、あるパラメータが出力に与える影響を比較するためには、段階的にパラメータを変化させて複数回のシミュレーション実験を行わないと、パラメータを推定できません。

逆問題における困難だけでなく、数値シミュレーションを行う際には、形状定義、拘束条件設定などの作業にも手間がかかります。また、計算時間がかかるため、リアルタイム分析は不可能になっています。例えば、CAE解析( Computer Aided Engineering )は、製品の設計段階で行う性能の仮想的な試作・試験です。結局のところ、一連の過程(形状作成→メッシング→境界条件→計算実行→計算結果)を通すには、多くの手間や時間がかかってしまいます(図 2)。

図2 数値シミュレーションの解析過程(CAEの例)

1.3 深層学習を用いた数値シミュレーション

1.2には、数値シミュレーションの限界について述べました。本稿のタイトルにあるもう一つの手法ー深層学習ーのデメリットも簡単に説明していきます。

深層学習は、人間の脳を模倣した機械学習の一種です。中間層(入力と出力の間の隠れ層)を深めれば深めるほど、深層学習モデルによる複雑な現象の表現が可能になります。

しかし、1.2で述べた物理法則に基づいた数値シミュレーションとは対照的に、深層学習はブラックボックスであるため、モデルは全て得られたデータに依存し、解釈可能性は低くなります。

そこで、本稿のテーマの通り、物理問題の数値シミュレーションを深層学習で実行できる研究がなされてきました。 これら二つモデルの相互補完性をいかすため、深層学習を用いた数値シミュレーションはより効率的で汎用性のあるモデルです。また、逆問題をより効率的に解けるため、科学的発見スピードを加速することが期待されています(図 3)。

図3 数値シミュレーションと深層学習を用いた数値シミュレーションの比較

深層学習を用いた数値シミュレーションは大きく二つのカテゴリーで分けられます。物理法則に基づいた深層学習(PINN: Physics-Informed Neural Network)と、物理法則に基づかない代理モデルの二つです。本稿では、これら二つのモデルについて、主にPINNの先行研究と応用例、現在の限界について調査した結果を紹介していきたいと思います。

2. 物理法則に基づいた深層学習
(PINN: Physics-Informed Neural Network)

まず、全体像を頭に入れるために、PINNによって解決できる三つのタイプの問題(2.1順問題の偏微分方程式求解、2.2 逆問題の偏微分方程式パラメータ探索および2.3観測値による潜在物理量の探求)における既知条件、求める対象、損失関数を表1にまとめました。

表1 PINNで解決できる三つのタイプの問題

2.1 偏微分方程式の求解[4]

第一に、PINNでは偏微分方程式問題を最適化問題に変換することで解くことが出来ます。
深層学習で偏微分方程式を解く動機としては、以下の二つがあります。
  • 万能近似原理[5]により、深層学習が任意の関数を近似できること。
  • 自動微分[6]により、出力変数の入力変数に対する全ての微分項が得られること。

以下にBurgers 方程式を例として挙げます。Burgers 方程式は、流れの基礎方程式であるNavier-Stokes方程式から圧力項を省略した一次元偏微分方程式です。

この問題では、数理モデルの構造、パラメータ、初期および境界条件は既知で、モデルの解を求めるものとします。

Burgers 方程式: u_t + uu_x - \left(\frac{0.01}{\pi} \right)u_{xx} = 0

初期条件: u\left(0, x\right) = -\sin(\pi x)

境界条件: u\left(t, -1\right) = u\left(t, 1\right) = 0

ここでは、 uは流体の速度、 t は時間、 x は位置を表します。

M. Raissiらが提案する解決策は以下の通りです(図 4)。

図4 PINNを用いたBurgers 方程式の求解 [4]
  1. 入力値 x t 、出力値 \hat{u} のニューラルネットワークを作成する。
  2. 学習データは、 t=0 の初期データ u\left(0, x\right) x= -1 ,\ 1 の境界データ u\left(t,-1\right) u\left(t,1\right) とし、定義域内の選点 u\left(t, x\right) はオプションのデータとする。
  3. 損失関数は、①微分方程式における平均二乗誤差(各選点f{loss}_fより)と②初期および境界条件における平均二乗誤差(初期および境界条件における各点u{loss}_uより)を加算したものとする。

    {loss}_f = \left[\hat {u}_t+\hat{u}\hat{u}_x-\left(\frac{0.01}{\pi}\right)\hat{u}_{xx}\right]^2

    {loss}_u = \left[\hat{u}-u\right]^2

    この\hat{u}は、ニューラルネットワークで得られた予測値である。
    また、 \hat{u}_t\hat{u}_x \hat {u}_{xx} は出力値 \hat{u} の入力値 x t に対する自動微分により得られた値である。
  4. 構築したモデルにより、\hat{u}(t,\ x) を予測できる。

2.2 偏微分方程式パラメータの探索[7]

第二に、PINNを用いると適切なパラメータを探索することができます。
先の2.1では、既知な基礎方程式に基づき解を求めました。2.2では、観測値に基づき、偏微分方程式において最適なパラメータを探索することを目的とします。

こちらもBurgers 方程式の例を挙げます。
2.1とは違い、ここでは、数理モデルの構造は既知ですが、パラメータ \lambda_1 \lambda_2は未知です。問題設定は、パラメータ \lambda_1 \lambda_2とモデルの解を求めるものとします。

Burgers 方程式:

u_t + \lambda_1 u u_x - \lambda_2 u_{xx} = 0

M. Raissiらが提案する解決策は以下の通りです(図 5)。

図5 PINNを用いたBurgers 方程式パラメータの探索 [7]
  1. モデル構造は2.1と同じく、入力 x t 、出力値 \hat{u} のニューラルネットワークとする。
  2. 学習データは、定義域内の選点 u\left(t{,} x\right)とする。
  3. 損失関数は、①微分方程式における平均二乗誤差と②予測値の平均二乗誤差の和とする。つまり、下記の式により算出した各点のlossの平均をとる。

    loss =\left[\hat{u}_t + \lambda_1 \hat{u} \hat{u}_x - \lambda_2 \hat{u}_{xx} \right]^2 + \left[ \hat{u}-u\right]^2

  4. 構築したモデルにより、 \hat{u}\left(t{,} x\right)もパラメータの \lambda_1 \lambda_2も推測できる。
また参考までに、このリンクでは2.1、2.2の例を含め、他の偏微分方程式の例も公開されています。

2.3 観測値による潜在物理量の探求[8]

最後に、PINNを用いれば、観測データを支配する物理量を探求できます。
2.1と2.2に続き、2.3では、受動スカラー(煙や染料)濃度分布の経時変化により流体の物理量(速度、圧力)を推測する手法hidden fluid mechanics (HFM)を紹介します (図 6)。

図6 受動スカラー(煙や染料)濃度分布の経時変化による流体物理量(速度、圧力)の推測 [8]
従来の流体解析では、数値計算を用いて、移流拡散、Navier-Stokes方程式、連続方程式などの非線形偏微分基礎方程式に基づき流体の物理量を求めます。

移流拡散: 
c_t + uc_x + vc_y = {Pec}^{-1}\left(c_{xx} + c_{yy} \right)

Navier-Stokes方程式: 
u_t + uu_x + vu_y = -p_x + {Re}^{-1}\left(u_{xx} + u_{yy} \right)
v_t + uv_x + vv_y = -p_y + {Re}^{-1}\left(v_{xx} + v_{yy} \right)

連続方程式: 
u_x + v_y = 0

ここでは、c は濃度、u vx y 方向においての速度、Pec はペクレ数、Re はレイノルズ数、p は圧力を表します。

この問題では、濃度分布の経時変化c\left( t, x, y\right)は既知で、速度uv 、圧力p の経時分布は求めるものとします。
M. Raissiらが提案する解決策は以下の通りです(図 7)。

図7 PINNを用いた観測値による潜在物理量の探求[8]
  1. HFMのモデルでは、ニューラルネットワーク項、微分項、物理法則項が縦列に並んでいる。
    ニューラルネットワークの入力値はt x y で、出力値は流体の濃度\hat{c} 、濃度の補助変数\hat{d} = 1 - \hat{c} 、速度\hat {u} \hat {v} および圧力\hat{p} とする。
    それらの出力値を入力値のt x y に対して微分をし、物理法則項における誤差e_i を算出する。
  2. 学習データは訓練ドメイン(図中の桜型)内の点c\left( t, x, y\right)とする。
  3. 損失関数は①濃度の二乗誤差と②微分方程式の二乗誤差の和とする。つまり、下記の式により算出した各点の loss の総和をとる。

    loss = \left[\hat{c}-c\right]^2+\left[\hat{d}-d\right]^2+\sum_{i=1}^{5}e_i

    e_i は予測した値を微分し、移流拡散、Navier-Stokes方程式、連続方程式に代入した値である。

    e_1 = {\hat{c}}_t + \hat{u}{\hat{c}}_x + \hat{v}{\hat{c}}_y - Pec^{-1} \left({\hat{c}}_{xx} + {\hat{c}}_{yy}\right)

    e_2 = {\hat{d}}_t + \hat{u}{\hat{d}}_x + \hat{v}{\hat{d}}_y - Pec^{-1} \left({\hat{d}}_{xx} + {\hat{d}}_{yy}\right)

    e_3 = {\hat{u}}_t + \hat{u}{\hat{u}}_x + \hat{v}{\hat{u}}_y+\hat{p}_x - Re^{-1} \left({\hat{u}}_{xx} + {\hat{u}}_{yy}\right)

    e_4 = {\hat{v}}_t + \hat{u}{\hat{v}}_x + \hat{v}{\hat{v}}_y+\hat{p}_y - Re^{-1} \left({\hat{v}}_{xx} + {\hat{v}}_{yy}\right)

    e_5={\hat{u}}_x+{\hat{v}}_y

    ここでも、ニューラルネットワークで得られた予測値を ” \hat{} ” にし、観測値と区別するようにしています。

  4. 構築したモデルにより、濃度\hat{c} 、速度\hat {u} \hat {v} 、圧力\hat{p} の経時分布を予測できる。
HFMの利点
  • 拘束条件が分からない状況でも、対象流体の速度、圧力を推測できる。
  • 境界壁に囲まれている内部の流れの速度や圧力なども正しく形状を定義せずともに、算出できる。
期待される応用

HFMは非侵襲な手法であるため、医療で広く応用されることが期待できます。
例えば、画像診断技術の進歩により、狭心症や心筋梗塞を診断するために必要な情報は、造影CT検査(コンピューター断層撮影)で得られるようになりましたが、内部の流れの速度や圧力などを推測するためには、正しく形状、拘束条件を定義しないといけません。

このHFMを使うことで、速度、圧力の推測が簡易になります。また、推測した速度、圧力を用いれば、応力と剪断応力が計算できるため、血管内面の壁面応力、剪断応力などを即時に判断できます。
参考までに、著者のスクリプトがこちらで公開されています。

3. 代理モデル

深層学習の一つのメリットは、機械自身が問題の最適な表現方法を探索できること、いわゆる表現学習です。深層学習を数値シミュレーションの代理モデルとすることで、「様々な条件からシミュレーション結果への振る舞い」を学習できるため、数値シミュレーションは単に説明変数から目的変数を予測するモデルになります。

ここでは、深層学習をCAEの代理モデルとして頭部傷害基準(HIC)計算の効率化[9]に用いた事例を紹介していきます。

背景

交通事故死者数のデータによれば、頭部傷害で死亡した歩行者が最も多いため、歩行者への傷害を最小化するための自動車フードを設計する必要性がありました。
現在、傷害を定量化する指標すなわちHIC (Head Injury Criterion頭部傷害基準)はありますが、従来のCAE解析では、一連の解析過程(形状作成、メッシング、境界条件、計算実行)で、多くの手間・時間がかかります(図 8)。

図8 従来のCAE解析でHICを算出する際の手間と時間の多さ[9]
CAE代理モデル
本田技術研究所では、畳み込み深層学習LeNet-5をCAEの代理モデルとして用い、画像情報とHICの関係を学習させています。
その結果、CAE解析を用いなくてもHICの判断ができるようになりました(図 9)。

図9 畳み込み深層学習LeNet-5をCAEの代理モデルとして用いた画像情報からのHICの効率的算出[9]
期待される応用
CAE代理モデルは、特に製造業に広く汎用できると期待されます。

4. 現在の限界と展望

PINNと代理モデルが現在直面している問題はデータセットのラベル付けに関するものです。教師あり学習の領域にあるため、学習データを蓄積することが必要になります。

また、データサイエンスモデルのような損失関数ではなく、物理学ベースの損失関数がまだ不明確で、サンプルの複雑さや収束を考慮しないといけません。
最後に、理論駆動の数値シミュレーションとデータ駆動の深層学習をうまく結合するために、結果の説明方法を検討するべきだと示唆されています。

5. おわりに

図 10に示すように、従来の数値シミュレーションと深層学習は、科学理論かデータのどちらによってモデルが構成されます。そのため、数値シミュレーションは、解釈可能性が高いですが、汎用性が低いです。反対に、深層学習は解釈可能性が低いですが、汎用性が高いです。

今回の記事では、物理法則に基づいた深層学習(PINN)の先行研究とCAE代理モデルの事例を紹介しました。
数値シミュレーションと深層学習を組み合わせることによって、PINNは、高説明性、高汎用性などのメリットを持つことが可能となります。一方で、CAE代理モデルでは、数値シミュレーションは説明変数から目的変数を予測するモデルに置き換えることができるため、手間や時間がかかるといった問題を解消することが可能となります。

上記により、深層学習を用いた数値シミュレーションは効率よく研究対象の動態を計算することができるようになり、科学的発見のスピードを加速させることが期待されます。

図10 数値シミュレーション、物理法則に基づいた深層学習(PINN)、深層学習(代理モデル)の比較[10]
ALBERTではともに最先端の課題に挑戦するメンバーを募集しています。興味をお持ちいただいた方は、こちらまでお問い合わせください。

6. 参考文献など

[1]      久保拓弥, データ解析のための統計モデリング入門: 一般化線形モデル・階層ベイズモデル・MCMC. 岩波書店, 2012.
[2]      川島茂人, 大気生物学入門. 朝倉書店, 2019.
[3]      江崎 貴裕, データ分析のための数理モデル入門 本質をとらえた分析のために . ソシム, 2020.
[4]      M. Raissi, P. Perdikaris, and G. E. Karniadakis, “Physics Informed Deep Learning (Part I): Data-driven Solutions of Nonlinear Partial Differential Equations,” Nov. 2017, Accessed: Jun. 12, 2020. [Online]. Available: http://arxiv.org/abs/1711.10561.
[5]      K. Hornik, M. Stinchcombe, and H. White, “Multilayer feedforward networks are universal approximators,” Neural Networks, vol. 2, no. 5, pp. 359–366, Jan. 1989, doi: 10.1016/0893-6080(89)90020-8.
[6]      A. Güne¸, G. Baydin, B. A. Pearlmutter, and J. M. Siskind, “Automatic Differentiation in Machine Learning: a Survey,” 2018. Accessed: Jul. 03, 2020. [Online]. Available: https://chainer.org/.
[7]      M. Raissi, P. Perdikaris, and G. E. Karniadakis, “Physics Informed Deep Learning (Part II): Data-driven Discovery of Nonlinear Partial Differential Equations,” Nov. 2017, Accessed: Jun. 12, 2020. [Online]. Available: http://arxiv.org/abs/1711.10566.
[8]      M. Raissi, A. Yazdani, and G. E. Karniadakis, “Hidden Fluid Mechanics: A Navier-Stokes Informed Deep Learning Framework for Assimilating Flow Visualization Data,” 2018.
[9]      I. Osamu, S. Jun, and I. Kazuo, “Prediction of pedestrian protection performance using machine learning.” Accessed: Jun. 12, 2020. [Online]. Available: http://www.nasva.go.jp.
[10]    A. Karpatne, W. Watkins, J. Read, and V. Kumar, “Physics-guided Neural Networks (PGNN): An Application in Lake Temperature Modeling,” Oct. 2017, Accessed: Jun. 12, 2020. [Online]. Available: http://arxiv.org/abs/1710.11431.

物理の力学系、特に解析力学を事前知識としたニューラルネットとその応用

$
0
0

こんにちは、プロジェクト推進部の久良です。 2020年3月に東京大学大学院の物理学研究科にて博士号を取得し、同4月に新卒としてALBERTに入社しました。この記事を執筆している現在は、新卒研修を終えて個別のタスクにアサインされているところです。 今回は物理学における力学系を事前知識として組み込んだニューラルネット (NN) をいくつか取り上げ、そのメリットやデメリット、考えられる応用先を紹介していきます。

なお、本記事の内容は新卒研修の「技術調査課題」で調査した結果であり、同課題において提出した報告書をベースとして執筆されたものです。

はじめに

なぜ力学系の知識を使うのか?

力学とは、自然界に存在する「ものの動き方」を研究する学問です。 この「もの」はビリヤード球のような剛体だけでなく、電子や電波、空気のような自然界に存在するさまざまな対象を指します。扱う対象によって力学は「剛体力学」「波動力学」「流体力学」など様々に枝分かれしますが、「もの」の動きを時間 t に関する微分方程式で記述できることは基本的に共通しています。 このような方程式を解いて「ものの動き」を調べることは、理論的にも実用的にも、避けては通れない重要な課題です。

それでは、なぜ方程式を解くためにNNを用いる必要があるのでしょう?

従来、解析的(記号的)に解くことのできない力学の方程式はコンピューターによる数値計算で解いていました。理論的には、方程式のパラメーターと時刻 t=0 における初期状態さえ決まっていれば、数値計算により任意の時刻 t における物体の状態を求めることができます。

しかし、現実の力学系を相手にする場合、数値計算では対応できないケースが存在します。 例えば、方程式のパラメーターが分からない場合です。 そのような場合、力学系を観測して得られたデータに基づいて、方程式のパラメーターを推定する必要があります(逆問題)。 逆問題は簡単に解けるケースもありますが、複雑な方程式に対してはパラメーターをトライ&エラーで変化させて何回も方程式を解いていくしかない場合もあります。 しかし、膨大なパラメーターの組み合わせの一つ一つに対して丁寧に時間変化を追跡していくことは、非常に大きな計算コストがかかります。

機械学習、とりわけ教師あり機械学習の手法は、観測データからシステムの中身を推定するというタスクに優れています。 そこで、観測データに基づいて方程式のパラメーターを推測し、その方程式を解いて「ものの動き」を予測する、といったタスクに対しては、NNをはじめとした機械学習を活用する価値が十分にあります。

一般論として、効率的な学習のためには、目的となる関数がどのような性質を持つのかについての知識が有用となります。 一例として、ピクセル間の相対的な位置が重要となる画像認識の問題においては、相対的な位置の情報を効率的に学習できる畳み込みNN (CNN) が主要なツールとなります。 同じように、学習の対象が何らかの「ものの動き」である場合には、そういった「ものの動き方=力学」の法則を事前知識としてNNに組み込んでおくことで、正しい「ものの動き」を効率的に学習することができます。

この記事について

本記事では、物体の運動を学習する問題において、NNに力学系の情報を組み込んで学習させる試みについていくつか紹介し、その中でもハミルトニアンNNラグランジアンNNを重点的に取り上げます。 これらは解析力学とよばれるフレームワークを用いたNNで、学習対象に関する詳細な知識が不要であるという点で他の力学系を用いるNNとは大きく異なります。とくに、

  • 物理法則に従った物体の運動は必ず表現することができる
  • エネルギー保存則などの基本的な法則に反した運動を学習することはない

という点において、物体の運動を学習するためのツールとして非常に優れているといえます。 これらのNNの応用例として、ハミルトニアンNNを利用した力学系の秩序状態・無秩序状態の予測や、ラグランジアンNNを利用したロボットアームの制御アルゴリズムを紹介します。

NNによる力学系の分類

力学系は偏微分方程式によって記述されます。 電磁気学ならばマクスウェル方程式やポアソン方程式、波動力学ならばKdV方程式やKP方程式といった具合です。 その分野の幅広い状況で使える方程式もあれば、限定された場面でのみ効果を発揮する方程式もあります。 ですから、どのような方程式をNNの事前知識として用いるかによって、そのNNを用いた機械学習の応用可能性も違ってきます。

そこで、用いる方程式の具体形や汎用性などによって、力学系を用いたNNを3種類に分類します:

  • 具体的な微分方程式を一般的に解く “NN-based PDE solver”
  • 時空間に関する微分方程式を解く “Physics-informed NN”
  • 剛体力学における抽象的な方程式を解く “解析力学的NN”

注意点として、あるNNが他のNNよりも「汎用性が高い」あるいは「制約が強い」といった包含関係が成立するわけではありません。 対処したい問題に応じて適切な NN を選択する必要があります。

1. NN-based PDE solver

第1の分類は、微分方程式に含まれる既知関数を入力とし、対応する微分方程式の解を出力するようなNNです。 一度学習させてしまえば同じ形の方程式すべてに対して解の予測ができるため、方程式の適用範囲が広ければ広いほど汎用性の高いNNとなりえます。 一方で、パラメーターの数が非常に多いことから、理論的提案[1]はありましたが近年まで実装はされていませんでした。

Tompsonらは効率的な流体シミュレーションを行う目的で、ポアソン方程式 \displaystyle \Delta u(x) = f(x) をCNNで解くことを提案しました。 ポアソン方程式は物理学の随所に現れる重要な方程式であり、 f(x) が与えられれば(適切な境界条件の下で)数値計算により u(x) を求めることが出来ます。しかし、既存の数値計算手法は精度が高い反面、時間的・空間的コストが高いことが課題でした。

そこで、既存手法により得られた f(x) と u(x) の組を教師データとしてNNを訓練し、新たな入力 f(x) に対して u(x) が出力できるようにします。 このようにすることで、新たなデータに対する数値計算のコストを抑えつつ、既存手法で導かれるような高い精度の解をNNで再現できることが期待されます。 また、関数 f(x) および u(x) はグリッド状に離散化されたデータとして入出力することになるため、CNNを用いるのが適しています。

CNNがポアソン方程式の解を上手く学習できるためには、微分方程式のもつ局所的な性質と、境界条件のもつ大域的な性質の両者が重要になります。 論文 [2] 中では図1のようなネットワークが構成されました。これは様々なスケールにダウンサンプリングされた関数データをアップサンプリングして結合するCNNであり、Deep-ResNetをはじめCNNで頻繁に用いられるアイデアです。

図1 ポアソン方程式を求解するCNN。入力の “velocity divergence” が f(x) に相当するほか、複雑な境界条件が “geom” により指定されている。[2] より引用。

論文 [2] 中ではこのCNNを用いた場合の解の精度が検証され、同程度の時間的コストを要する数値計算と同等あるいはそれ以上の精度が達成されたことが報告されています。

2. Physics-Informed Neural Network

第2の分類は、以前のブログ記事でも紹介されていた Physics-Informed Neural Network (PINN) というものです。 微分方程式そのものを損失関数としてハードコードし、微分方程式の解 u(t, x) の関数形を学習するのが PINN の特徴です。

波動力学や量子力学などでは、物理量 u(t, x) の満たすべき方程式は u の時間微分 \dot{u} = \partial u/\partial t を含む偏微分方程式として書き表されます。たとえば、 \displaystyle \dot{u} = \frac{\partial^2 u}{\partial x^2} - u\frac{\partial u}{\partial x} のように完全に既知の場合もあれば、 \displaystyle \dot{u} = \lambda_2\frac{\partial^2 u}{\partial x^2} - \lambda_1 u\frac{\partial u}{\partial x} のようにモデル変数 λ を含む場合もあります。 PINNは、このような時空間に関する偏微分方程式の解 を学習するのに有効な手法です。 Raissiら [3,4] はバーガース方程式やKdV方程式など、波動力学における主要な方程式に対してこの手法を用いました。

まず、微分方程式\dot{u} = \mathcal{N}[u]が完全に既知の場合を考えます。このとき、境界上における u(t, x) の値を教師データとして与えれば領域上の関数 u の値は決定されます。 そこで、このNNの出力 u* に対する損失関数を

  • 領域内部における \dot{u}^\ast - \mathcal{N}[u^\ast] のL2ノルム
  • 境界上における u^\ast(t, x) - u(t, x) のL2ノルム

から構成することで、出力 u* が求める微分方程式の解 u に近くなるように最適化されます。

微分方程式がモデル変数 λ を含む場合、境界条件だけではモデル変数を決定できないため、境界上以外のサンプル点に対しても教師データを与える必要があります。 また、λ は学習のハイパーパラメーターになるため、グリッド探索などの方法でハイパーパラメーターを最適化するか、ガウス過程を用いて損失関数を含めた全体をベイジアンモデルで書き換えるなどの工夫が必要になります。

3. 解析力学的NN (仮称)

最後に紹介するのが、ハミルトン形式やラグランジュ形式などの解析力学を利用することで、一般の剛体力学系における物体の運動を予測することができるNNです。 エネルギー保存則などの基本的な性質さえ満たしていれば、具体的な力学的変数の詳細が分からない場合でも予測が可能であるという点で一般性の高いNNです。 本記事では、この解析力学的NNについて詳しく調査結果を述べていきます。

最後に、本節で取り上げた3種類のNNの対比をまとめておきます:

NN-based PDE solver Physics-Informed NN 解析力学的NN
方程式 既知関数を含む 既知 or 未知変数を含む 未知関数を含む
適用範囲 方程式による 方程式による 可逆な剛体力学
入力 既知関数 時空間座標 力学変数
出力 方程式の解 方程式の解 方程式の未知関数
入力変数は自由に設定できる? いいえ いいえ はい
同じ形の方程式全体に汎化可能? はい いいえ いいえ

解析力学について

解析力学とは、質量や慣性モーメントといった特定の力学変数に頼らない形で物体の運動を記述する力学のことであり、ハミルトン形式とラグランジュ形式の2種類の方法で記述されます。

ハミルトン形式

1次元空間のハミルトン方程式は、正準変数とよばれる変数の組(q, p)を用いて \displaystyle \begin{cases} \dot{q} = \frac{\partial H}{\partial p} \ \dot{p} = -\frac{\partial H}{\partial q} \end{cases} と書き表せます(上付きの点は時間微分を表す)。関数H=H(q,p)はハミルトニアンと呼ばれ、力学系全体のエネルギーを表します。 このとき、ハミルトニアンの時間微分は \displaystyle \dot{H} = \dot{q}\frac{\partial H}{\partial q} + \dot{p}\frac{\partial H}{\partial p} = 0 となるため、 H は時間変化しない定数となることが分かります(エネルギー保存則)。 D次元空間の場合の正準変数(q_j, p_j)はそれぞれがD次元ベクトルとなりますが、 H は空間の次元によらずスカラー関数です。

正準変数(q, p)はそれぞれ位置と運動量として解釈することができます。 例えば、質点系におけるハミルトニアンは質量 m とポテンシャル V(q) を用いて H = \frac{1}{2}m\dot{q}^2 + V(q) と表せるため、これをハミルトン方程式に代入して p を消去すると \displaystyle m\ddot{q} = -V'(q) となり、これは有名なニュートンの運動方程式 F=ma と一致します。

一方で、ハミルトン方程式の正準座標は実際の位置と運動量である必要はありません。例えば、 q と p の代わりに角度 θ と角運動量 L を用いて \displaystyle \begin{cases} \dot{\theta} = \frac{\partial H}{\partial L} \ \dot{L} = -\frac{\partial H}{\partial \theta} \end{cases} とすると、これは物体の回転運動を記述するオイラー方程式に対応します。このように、力学系を記述する正準変数(q, p)を別の正準変数(Q, P)に取り替えても、依然として同じ形の方程式を立てられるのがハミルトン力学の特徴です。なお、詳細は割愛しますが、新しい正準変数(Q, P)に関してはどのような選び方も許容されるわけではないことを付記しておきます。

ハミルトン方程式について短くまとめると以下のようになります。

  • 正準変数(q, p)およびハミルトニアン H で記述される。
  • ハミルトニアン H はエネルギーに対応し、時間変化しない。
  • 正準変数(q, p)の選び方は無数に存在する。

ラグランジュ形式

ラグランジュ形式とハミルトン形式は、同じ力学系を別の表現で記述したものです。ラグランジュ形式では正準変数ではなく、一般化座標とその時間微分 (q, \dot{q}) を用います。

ラグランジュ方程式は \displaystyle \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right) = \frac{\partial L}{\partial q} と書き表され、通常これは q に関する 2階の微分方程式になります。 L=L(q, \dot{q})はラグランジアンと呼ばれる関数ですが、 ハミルトニアンと異なりその値はエネルギーなどの物理的な意味を持たず、 時間変化しないといったような便利な性質も持ちません。

上記の理由から、剛体力学ではラグランジアンをより具体的な表現で表すことが多いです。慣性行列 M(q) およびポテンシャル V(q) を用いると、一般的なラグランジュアンは \displaystyle L = \frac{1}{2}\dot{q}^T M(q)\dot{q} - V(q) となります。慣性行列は質量を一般化した概念であり、一般化位置 q に依存する正定値行列になります。 さらに、この表現をラグランジュ方程式に代入することで2階の微分方程式 \displaystyle M(q)\ddot{q} + C(q, \dot{q})\dot{q} + G(q) = 0 が得られます。コリオリ行列 C(q, \dot{q}) および力場 G(q) はそれぞれ M(q) と V(q) から計算することができます。 この方程式は制御工学などでよく用いられます。

ハミルトニアンNN

ハミルトニアンNNはGreydanus, Dzamba & Yosinskiによって2019年に提案された比較的新しい手法です[5]。 力学系を支配するハミルトニアンをNNで推定することで、任意の時刻における物体の運動を間接的に予測します。 そのため、エネルギー保存則の成り立つ系を効率的に学習できることがハミルトニアンNNの特徴です。

図3 時系列予測とハミルトニアンNNの対比

ベースライン

物体の運動を予測する問題として、以下のような仮想課題を考えます:

摩擦や抵抗を受けずに運動する物体の位置 x_t が1秒ごとに記録されている。 記録開始からT秒後までの位置 x_0, x_1, \dots, x_T を入力したとき、 n 秒後の物体の位置 x_{t+n} を予測せよ。

この問題は物理系の知識を用いずとも、時系列データの予測問題として取り扱うことができます。NNを用いる場合、m 秒前までの位置 x_{T-m}, \dots, x_{T}を入力とし、n 秒後の位置の予測値 x_{T+n}^\ast を出力とするようなネットワークを設計し、 損失関数 \mathcal{L} = \left\lVert x_{T+n}^\ast - x_{T+n}\right\rVert _2 を最小化するように学習を行います。

しかし、この学習方法には2つの問題があります。まず、遡る秒数 m は学習のハイパーパラメーターとなり、何らかの方法で適切な値を選択する必要があります。次に、得られた予測モデルはエネルギー保存則を満たしている保証はないため、 一定時間後に物体が静止してしまう、あるいは逆に超高速で飛び出してしまうといった不安定な予測モデルを学習してしまうおそれがあります。

ハミルトニアンNN

物理学の知識を活用すれば、より効率的な学習方法を設計することができます。 剛体力学における運動方程式は2階の微分方程式で表されるため、2点の時刻における位置情報が与えられれば物体の運動を決定することができます。すなわち、入力する位置情報は x_{T-1}, x_T で足りることがわかります。

そこで、時刻 t における力学系の正準変数を \displaystyle \begin{cases} q_t = x_t \ p_t = x_t - x_{t-1} \end{cases} というように定義します。 ここで運動量pを速度(の近似値)で代用していますが、単純な力学系においてはこの差異は問題となりません。 ネットワークはこの正準変数(q, p)を入力とし、ハミルトニアンH^\ast = H^\ast(q, p)を出力とするように設計されます。 このとき、n 秒後の正準変数(q_{T+n}^\ast, p_{T+n}^\ast)は離散化されたハミルトン方程式 \displaystyle \begin{cases} q_{t+1} - q_t = \frac{\partial H^\ast}{\partial p}(q_t, p_t) \ p_{t+1} - p_t = -\frac{\partial H^\ast}{\partial q}(q_t, p_t) \end{cases} に従って予測することができ、NNの損失関数はハミルトンの方程式の誤差、すなわち \displaystyle \mathcal{L} = \left\lVert q_{T+1} - q_T - \frac{\partial H^\ast}{\partial p}\right\rVert_2 + \left\lVert p_{T+1} - p_T + \frac{\partial H^\ast}{\partial q}\right\rVert_2 となります。

ハミルトニアンNNでは推定されたハミルトニアンH*に基づいて運動を予測するため、ハミルトニアンの推定誤差の範囲内でエネルギー保存則が成立することが保証されます(ただし、リープフロッグ法などの数値積分法を用いて数値誤差の蓄積を防ぐ必要がある)。 このため、運動の停止や異常な加速などといった物理的に望ましくない予測を防ぐことができます。

逆伝播法の利用

物理学の観点から見ると、通常の数値計算手法には「ハミルトン方程式に登場する偏微分\frac{\partial H}{\partial q}, \frac{\partial H}{\partial p}を精度よく計算できない」という課題がありました。 ハミルトニアンNNにおいては、逆伝播法を用いて偏微分を容易に計算できるというメリットがあります。 通常のNNではネットワークの更新に際して逆伝播法を用いることが多いですが、ハミルトニアンNNではハミルトニアンから運動を予測するときに必要になります。その意味では、ハミルトニアンNNにおいては逆伝播法はより重要な役割を果たしていると言えます。

なお、ハミルトニアンNNの損失関数の勾配を計算する場合は、元のハミルトニアンのヘッセ行列を計算する必要があります。ノードの数が多い複雑なネットワークを用いる場合は、計算量を抑えるために実装を工夫する必要があります[6]

自己符号化器の利用

ここまでで取り扱ったハミルトニアンNNは、位置や角度といった力学的変数を入力として与える必要がありました。 しかし、物体を撮影した画像や動画などの観測データから位置や角度を手作業で特定することはコストがかかります。 そこで、NNの一種である自己符号化器 (AE) の特性を活用することで、直接観測データから運動の結果を予測することが考えられます。

画像などの観測データは変数が多く、そのまま力学的なパラメーターとして扱うことは困難です。 しかし、物体の観測データは少数のパラメーターで特徴づけられていることが多いため、それらの変数を力学的なパラメーターとして扱えることが期待できます。 そこで図4のように、連続する2枚の画像データ (X_{t-1}, X_t) をAEで圧縮して正準変数(Q_t, P_t)を抽出することを考えます。 AEで抽出した特徴量は必ずしも正準変数に対応しているとは限りませんが、例えばハミルトニアンNNの損失関数をAEにも還元することで、力学系の正準変数を抽出するようにAEが最適化されることが期待できます[7]

こうして得られた正準変数は位置や運動量のような明確な意味をもつ力学的変数となるとは限りませんが、そのような抽象的な変数であっても運動を記述できることがハミルトン方程式の利点です。 あとは前述したハミルトニアンNNによって n 秒後の正準変数 (Q_{T+n}^\ast, P_{T+n}^\ast)を予測した後、AEのデコーダー部分を用いて観測データの予測 X_{T+n}^\ast を得ることができます。

図4 自己符号化器を用いたハミルトニアンNN

ラグランジアンNN

ハミルトン形式の代わりにラグランジアン形式を利用したNNも提案されています [8–10]。 ハミルトニアンNNがエネルギー保存則の成立する「閉じた力学系」において有用であるのに対し、ラグランジアンNNは外力による制御が可能な「開いた力学系」に対してより高い効果を示します。

パラメーター u で制御された外力の項を加えると、ラグランジュ形式から導かれる運動方程式は \displaystyle M(q)\ddot{q} + C(q, \dot{q})\dot{q} + G(q) - \tau(q, \dot{q}, u) = 0 となります。ラグランジアンNNでは一般化座標 q を入力とし、 慣性行列 M と力場 G を出力とするようなネットワークを設計します (コリオリ行列 C は M の偏微分から計算できます)。 実際には M を直接出力するのではなく、コレスキー分解 M(q) = L(q)L(q)^T の下三角行列 L(q) を出力します。 こうすることで「慣性行列が正定値である」という力学系の性質を事前知識として取り入れ、現実と整合しない解を排除することができます。

図5 Deep Lagrangian Network (DeLaN) の単純化された計算グラフ。 図中の H は記事中の慣性行列 M に対応し、コレスキー分解の下三角行列 L は対角成分と非対角成分に分けて計算されている。 [9] より引用。

制御問題においては、力学系を予測するNNのパラメーターだけでなく、 一般化座標 q を望ましい状態に保つための制御パラメーター u をも学習する必要があります。 学習の際の損失関数は次の2つから構成されます:

  • 予測に関する誤差。図5 のような計算グラフで計算された運動方程式の左辺値が 0 からどれだけ離れているかで表せる。
  • 制御に関する誤差。微分方程式に基づく一般化座標の予測値 q^\ast が望ましい状態からどれだけ離れているかで表せる。

ラグランジアンNNを用いて制御問題を学習する場合(図6)、まず観測された一般化座標から運動方程式の左辺値を計算し、その値が 0 に近づくようにNNのパラメーターを更新します。次に方程式から一般化座標の予測値を計算し、その値がより望ましくなるように制御パラメーターを更新します。

図6 ラグランジアンNNによる制御問題の学習の流れ。

応用例

執筆現在、解析力学を組み込んだNNは比較的新しいアイデアです。 そのため、二重振り子系やCartPole課題のような典型的な力学系に対する 予測および制御の数値的シミュレーションが多く行われている段階です。

本記事では、その中でも興味深い研究を2つ紹介します。 1つは理論物理学的な側面が強い研究で、力学系が長時間の運動でカオスに移行するかを予測するのにハミルトンNNを用いています。 もう1つの研究はより実用に近く、ラグランジアンNNによるロボットアームの制御性能をシミュレーションと実機により検証しています。

力学系のカオス性予測

物体の運動は微分方程式により決定されますから、初期状態を入力すれば理論的にはその後の軌道は完全に予測することができます。 しかし、力学系によっては初期状態のわずかな誤差が予測不能なほど大きなエラーを生み出してしまうことがあり(バタフライ効果)、そのような力学系をカオスと呼びます。 カオスの有無は予測や制御の難しさに直結する重要な問題ですが、バタフライ効果の観察には長時間の運動が必要となるため、力学系がカオスか否かを短時間の観測から判定することは困難です。

そこで、Choudharyら [11] は力学系のカオス性の予測をハミルトニアンNNによる分類問題として取り扱うことを提案しました。 エネルギー保存則などのハミルトン力学の諸性質はカオスの有無とも密接に関わる重要な性質のため、ハミルトニアンNNを利用することでカオスの予測精度が向上すると期待されました。

論文中では、対象となる力学系として、天体運動や分子運動のシミュレーションに用いられるエノン=ヘイルズ系 \displaystyle H(q, p) = \frac{(p_1^2 + p_2^2) + (q_1^2+q_2^2)}{2} + q_1^2q_2-\frac{q_2^3}{3} が選ばれました。この力学系はエネルギーによりカオス性が変化するため、 NNの目標はその変化を正しく検出することに設定されました。 ハミルトニアンNN(HNN)のほかに、正準変数から時間変化を直接予測するNNが設計され、同じ学習データの下での予測性能が比較されました。

図7 エネルギー E に対する、カオス性を示す軌道の割合 fc[11] より引用 (横軸の値は原文ママ)。

比較の結果を図7に示します。どちらのNNでも予測された軌道に基づき、共通の手法でカオス性を判定しています。 しかし、ベースラインのNN(緑)がカオス性をほとんど検出できていないのに対し、 ハミルトニアンNN(桃)は高い精度で真値(青)を予測できており、非カオスとカオスの境目となる E=0.10 付近の部分も正しく再現していることが分かります。

この論文で取り扱われたエノン=ヘイルズ系は2次元空間の力学系であるため数値計算も容易ですが、より高次元の力学系に対するカオス予測に対する数値計算は急激に困難になります。 そのような複雑な力学系に対するカオス予測が確立されれば「設計したシステムの制御可能性を少ないデータから正確に判定する」といった実用性の高いタスクに応用されることが期待されています。

ロボットアームの制御

Lutter, Ritter & Peters の論文 [9] では、ラグランジアンNNを用いたロボットアームの制御問題を検証しています。

従来のロボットアーム制御は、ニュートン方程式やオイラー方程式などを組み合わせた運動方程式を用いた数値計算で行っていました。 このためには、ロボットアームのパラメーターを関節の位置や質量、慣性モーメントなどの具体的な力学変数に変換し、それを用いてロボットアーム固有の運動方程式をハードコードする必要がありました。 しかし、ラグランジアンNNはパラメーターを一般化座標として扱い、具体的な力学変数に変換することなく運動方程式を学習します。そのため、どのようなロボットアームに対してもハードコードをやり直さずに対応できるというメリットがあります。

Lutterらは7自由度のロボットアーム WAM を用いて、数値シミュレーションおよび実機による実験を行いました。 このとき、テストデータのアーム速度を学習時のものより速くすることで汎化性能を調べています。 ラグランジアンNNの制御精度を、力学系の知識を用いない一般的な制御問題のNNと比較した結果が図8です。

図8 ラグランジアンNNによる制御精度の比較。 (a)(b) は2自由度のロボットアームの数値シミュレーション、 (c)(d) はWAMの数値シミュレーション、(e)(f) は実機実験の結果である。 (a)と(b)、(c)と(d)、(e)と(f)はそれぞれ制御の目標となる軌道が異なる。 [9] より引用。

WAM の数値シミュレーション(c)(d)においては、ラグランジアンNN(赤)が従来の数値計算(紫)およびベースラインNN(青)よりも精度が高いことが分かりますが、実機実験(e)(f)においてはラグランジアンNNの精度が低いことが分かります。 これに関して、Lutterらはロボットアームがケーブルに引っ張られる効果が剛体力学で記述できないことが原因であると推測しています。 一方、ベースラインNNでは速度を上げたテストデータに対する制御精度が急激に落ちている一方、ラグランジアンNNでは制御精度の低下が比較的緩やかであることが見て取れます。これは、ラグランジアンNNの方が力学系の記述に特化しているため、力学系の範囲内における汎化性能がベースラインより高いことを示唆しています。

おわりに

解析力学的NNの課題

ここまで、解析力学的NNが理論物理学やロボット工学に応用可能であることを見てきました。 逆に、現時点では解析力学的NNには適していない力学の問題も確かに存在します。

時間の巻き戻しが可能な「可逆系」しか取り扱えない

ハミルトン形式やラグランジュ形式で書き表せる系は「可逆系」といって、時間を反転させても同じ方程式で記述することができるという特徴があります。 そのため、摩擦や抵抗といった散逸力が存在する場合や、確率的に運動が変化する場合などの「不可逆系」を解析力学的NNで取り扱うことができません。 ただし、より広範囲をカバーする力学系を用いれば学習できる可能性はあります [12]

力学系モデルが既知の場合に比べて学習のコストは高くなる

解析力学では、質量や慣性モーメントのような具体的な物理変数を推定する代わりにハミルトニアンのような関数を推定します。 これにより非常に広い状況で学習が可能ですが、一般論として、変数にくらべて関数は推定のコストが大きいです。 したがって、解析力学的NNはワンオフの力学系を学習する場合には効果的ですが、類似した力学系のデータが多数あるような状況では、先に具体的な物理変数を用いて力学系のモデルを構成したほうが効率的だと考えられます。

まとめ

本記事においては、力学系を用いて「ものの動き」を予測するさまざまな問題に対して、力学系の知識を用いた NN が用いられる例を調査しました。 その中でも、とりわけ可逆な剛体力学に対して高い効果を発揮する解析力学的NN(ハミルトニアンNN、ラグランジアンNN)を詳細に取り上げ、逆伝播法や自己符号化器といったNNのツールと組み合わせて活用されていること、またカオス理論やロボットアーム制御への応用が行われていることを報告しました。

解析力学を利用したNNの設計はまだ比較的新しい研究であり、今後ロボット工学を中心とした実用面において従来的なNNを上回る精度と汎用性を達成できるのかが焦点となりそうです。

物理学と機械学習理論の相互理解が双方の分野の発展に繋がっていくことは確実だと考えています。今まで物理学を研究してきた過程で、統計力学をはじめとした物理学の理論がNNの構造と密接に関わっていることは知っていました。今回の調査では、より直接的に物理学の知識をNNに適用することによって、力学系の予測や制御に関する問題を汎用的かつ効率的に解く技術について学びました。とくに、解析力学の手法やアイデアが逆伝播法や自己符号化器といったNNのツールと非常に相性がよいことに感銘を受けました。今後、力学系を事前知識として用いたNNがいかに発展していくかは、NNのツールのもつ強みと力学系の特長をいかに上手に組み合わせることが出来るかに掛かっているでしょう。

ALBERTでは最先端の技術を扱うメンバーを募集しています。 興味をお持ちいただいた方は、こちらまでお問い合わせください。

参考文献

1. Kumar, M. and Yadav, N. (2011) Multilayer perceptrons and radial basis function neural network methods for the solution of differential equations: A survey. Computers & Mathematics with Applications 62, 3796–3811. http://www.sciencedirect.com/science/article/pii/S0898122111007966.

2. Tompson, J., Schlachter, K., Sprechmann, P. and Perlin, K. (2017) Accelerating eulerian fluid simulation with convolutional networks. In: Proceedings of the 34th international conference on machine learning – volume 70, JMLR.org. pp 3424–3433. https://dl.acm.org/doi/10.5555/3305890.3306035.

3. Raissi, M. and Karniadakis, G.E. (2018) Hidden physics models: Machine learning of nonlinear partial differential equations. Journal of Computational Physics 357, 125–141. http://www.sciencedirect.com/science/article/pii/S0021999117309014.

4. Raissi, M., Perdikaris, P. and Karniadakis, G. (2019) Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics 378, 686–707. http://www.sciencedirect.com/science/article/pii/S0021999118307125.

5. Greydanus, S., Dzamba, M. and Yosinski, J. (2019) Hamiltonian neural networks. In: Advances in neural information processing systems 32, Eds: H. Wallach, H. Larochelle, A. Beygelzimer, F. dAlché-Buc, E. Fox and R. Garnett, Curran Associates, Inc. pp 15379–15389. http://papers.nips.cc/paper/9672-hamiltonian-neural-networks.pdf.

6. Martens, J., Sutskever, I. and Swersky, K. (2012) Estimating the hessian by back-propagating curvature. arXiv preprint arXiv:1206.6464. https://arxiv.org/abs/1206.6464.

7. Toth, P., Rezende, D.J., Jaegle, A., Racanière, S., Botev, A. and Higgins, I. (2019) Hamiltonian generative networks. arXiv preprint arXiv:1909.13789. https://arxiv.org/abs/1909.13789.

8. Gupta, J.K., Menda, K., Manchester, Z. and Kochenderfer, M.J. (2019) A general framework for structured learning of mechanical systems. arXiv preprint arXiv:1902.08705. https://arxiv.org/abs/1902.08705.

9. Lutter, M., Ritter, C. and Peters, J. (2019) Deep lagrangian networks: Using physics as model prior for deep learning. arXiv preprint arXiv:1907.04490. https://arxiv.org/abs/1907.04490.

10. Roehrl, M.A., Runkler, T.A., Brandtstetter, V., Tokic, M. and Obermayer, S. (2020) Modeling system dynamics with physics-informed neural networks based on lagrangian mechanics. arXiv preprint arXiv:2005.14617. https://arxiv.org/abs/2005.14617.

11. Choudhary, A., Lindner, J.F., Holliday, E.G., Miller, S.T., Sinha, S. and Ditto, W.L. (2020) Physics-enhanced neural networks learn order and chaos. Phys. Rev. E 101, 062207. https://link.aps.org/doi/10.1103/PhysRevE.101.062207.

12. Zhong, Y.D., Dey, B. and Chakraborty, A. (2020) Dissipative symoden: Encoding hamiltonian dynamics with dissipation and control into deep learning. arXiv preprint arXiv:2002.08860. https://arxiv.org/abs/2002.08860.

ニューラルネットワークによる三次元表現手法

$
0
0
図の一部をStanford Computer Graphics Laboratory より引用
はじめまして、2020年新卒で入社した プロジェクト推進部 の童です。今回は新卒研修の一環として取り組んだ、ニューラルネットワークによる三次元表現手法の技術調査について書かせて頂きます。三次元とニューラルネットワークというテーマに沿って比較的近年のトピックについて解説するつもりです。特にニューラルネットワークによる三次元表現について、陰関数表現をアイディアとしたIM-NETとDeepSDFについて解説します。また今回の内容と類似したテーマで、NeRFについて解説した記事がありますので、そちらも併せてご覧ください。

1 はじめに

画像認識タスクでの深層ニューラルネットワークの成功を皮切りに、画像、動画、音声など、ありとあらゆるタスクにおいて深層ニューラルネットワークの応用が盛んになっています。今回は特に三次元図形の表現におけるニューラルネットワークの応用について紹介していきたいと思います。

2 物体の三次元表現とは?

三次元表現とは、一言でいうと、現実世界(三次元)の図形の情報をコンピュータ上で表現するための方法です。画像がコンピュータ上でピクセルの集合としてデジタル情報で表現されるように、三次元図形もデジタル情報としてそれらを表現する方法が存在します。現在主に用いられている三次元表現にはボクセル、点群、メッシュがあります。それぞれの特徴について簡単に以下にまとめます。なお図1~図3は[4]より引用しました。
図1 : ボクセル
図2 : 点群
図3 : メッシュ
  • ボクセル
    ボクセルはピクセルの三次元への拡張です。ボクセルの集合を三次元配列で表すことで三次元表現を得ます(図1)。配列の各要素には、色や輝度など、そのボクセルの持つ属性が格納されます。それ以外にも例えば、CTスキャンではX線の吸収率が格納されたり、超音波検査密度や流速変化率が格納される場合もあります。ボクセルを細かくすればより精細な表現を得られますが、メモリが3乗に比例して増大するのがデメリットです。
  • 点群
    点群は三次元上の点の集まりとして三次元表現を得ます(図2)。点群は3Dスキャナー、センサーや深度カメラから直接得らえることの多いデータ形式です。点群それ自体はあまり使われず、様々な後処理をして応用されることが多いです。点の情報だけを保存すればよく、ボクセルに比べてメモリ効率は良いです 。
  • メッシュ
    メッシュは頂点と面の張り合わせで三次元表現をします(図3)。面にテクスチャを貼りつけたりしてリアルな質感表現が可能なため、ゲームや映画のCGなどに広く応用されています。また頂点と面の情報を保持すればいいので、メモリ効率も良いです。一方で、ボクセルや点群と比べてデータ構造が複雑で、人手での制作コストがとても大きいです。
作成難易度メモリ応用性
ボクセル  △ ×
点群  〇 ×
メッシュ  ×
上の表でまとめた通り、ボクセル、点群、メッシュにはどれも利点と欠点が存在し、どれが最良なものかというのは判断が難しいです。用途に合わせて最もふさわしいものを用いるしかありません。後述しますが、それは機械学習タスクで用いる場合でも同様です。

3 ニューラルネットワークによる三次元表現

近年、ボクセル、点群、メッシュとは異なる、新たな三次元図形の表現をニューラルネットワークで得る方法が考案されています。三次元図形の表現をニューラルネットワークで得るとはどういうことでしょう?例えばボクセルは三次元配列によって、点群は集合データによって、メッシュはグラフ構造によって三次元図形の表現を得ています。ニューラルネットワークで三次元の表現を得るというのはある特定のニューラルネットワークのパラメータや構造自体を三次元図形の表現としてしまうということです。このようなことを考えるモチベーションとしては、ニューラルネットワークで三次元データを扱う際に、初めからニューラルネットワークで三次元表現を使うことで前処理なしでスムーズに移行できるようにすることです。 というのはボクセル、点群、メッシュをそのままニューラルネットワークへの入力とするにはいくつかの問題があるからです。 ボクセルデータについては、メモリ使用量が多く、計算負荷が大きいため、解像度を高くできないことが問題です。点群データは点の集合を表しているデータ構造なので、点群の順序不変性などをネットワークに反映させるために様々な工夫が必要です。詳しくは[6]などで述べられています。 メッシュに関してもその特殊なデータ構造からニューラルネットワークに入力として与えるためには、更に複雑な前処理をする必要があります。[3] ニューラルネットワークによる三次元表現を用いることで以上の問題を回避しつつ、学習タスクを行うことが可能になると期待されています。ニューラルネットワークで行いたいタスクとしては、画像認識でも盛んな、物体認識やセグメンテーションなどに加え、三次元特有のものとしては、
  • 二次元画像からの三次元図形の再構成
  • 点群データからボクセルやメッシュによる三次元表現の獲得の自動化
  • 複数の三次元図形間の補間
  • 敵対的生成モデルによる三次元図形の生成
などが挙げられます。

4 陰関数表示による三次元図形の表現

陰関数表示とは端的に言うとf(x,y,z)=0といった方程式の形で図形を表現する手法です。例えばx^2+y^2+z^2=1という方程式の曲線は球になります。陰関数表示の嬉しいところは比較的少ないパラメータで図形を”任意の解像度”で表現できる点にあります。例えば球をメッシュで表現しようとすると、十分滑らかに見える程度のメッシュを用意しなくてはいけません。また円の半径を変更したり楕円に変形するといった操作が簡単には行えません。そしてどれだけメッシュを増やしたとしても離散化が入っている以上、完全な球を表現することはできません。一方で陰関数表示ならば、 パラメータとして半径だけを与えれば、球を表すことが可能です。(図4)
図4 : 陰関数表示とメッシュの比較
陰関数表示では、方程式に代入する値を決めることによって任意の解像度でレンダリングができ、方程式の係数と半径を変更することで表現される図形を変化させることができます。更にこの際パラメータを連続的に変化させることで中間の図形の補間も可能です。すなわち陰関数表示は少ないメモリで完全に図形を表現できる形式であると言えます。 一方でデメリットとして、複雑な図形を表現することが苦手です。これは複雑な図形を表すような方程式を具体的に定める(モデリング)のが困難だからです。 そこでニューラルネットワークの登場です。曲面を表す関数を人手で発見するのではなく、データから学習させてしまおうという発想です。これにより人手で関数を見つけなくても、パラメータを学習することによって複雑な図形の陰関数表示を得ることができます。ニューラルネットワークの近似定理[2]によって十分複雑な図形を表現できると期待されます。各手法の利点と欠点を次の表にまとめておきます。
モデリングメモリ精密さ
ボクセル、メッシュ   人手 ×
陰関数表示(従来)  人手
陰関数表示(NN)  学習 ◎(学習が上手く行けば)
さて、ニューラルネットワークを使った陰関数表示 f(x,y,z)=0 によって実際に三次元図形を模らせるためには、ニューラルネットワークのパラメータを学習させる必要があります。この部分から各論文で手法が異なってきて独創性やアイディアの多様性を見ることが出来ます。

5 IM-NET

IM-NETではOccupancyという概念を用いて表現を獲得します。 Occupancyとは図形の内部ならば1、外部ならば0を取るような変数と定義されます。図5に示すように、各座標に対してそのOccupancyを出力するネットワークを用意します。表現したい三次元図形のOccupancyを学習データとして与え、ネットワークを学習することで、表現を得ます。すなわちIM-NETはOccupancyの二値分類を行っていると言えます。しかしこのままだと一つのネットワークで一つの図形しか表現できません。IM-NETは更に入力にCode特徴量(図6)と呼ばれる変数を加え、潜在空間を表現することで、様々な三次元図形を表現することが出来ます。
図5 : Occupancyを学習するIM-NET
図6 : コード特徴量を追加[1]

5.1 IM-NETと他手法の組み合わせ

IM-NETはCode特徴量から元の図形を復元するデコーダと見なすことが出来ます。 これによりIM-NETはそれ単体で用いるというよりは、様々な既存の三次元図形に対するエンコーダ・デコーダ型のネットワークのDecoder部分に置き換わることで幅広い応用を可能とします。 図7に示す模式図を用いて説明します
図7 : IM-NETによるデコーダの置き換え
エンコーダデコーダ型のネットワークに対して(基本的にはこれは何でもよいです)デコーダの部分をIM-NETで置き換えることで、ボクセルやメッシュを出力していたところをOccupancyを出力するようにして、学習をします。これにより学習の精度があがる現象が報告されているようです。ボクセルやメッシュよりもIM-NETによる三次元表現のほうが学習に有利に働いているようです。
IM-NETのCode特徴量によって、他ネットワークのエンコーダから得られた特徴量を自然に入力できるようになっています。

5.2 応用

実際にIM-NETがどのようなタスクでどのようなネットワークと共に用いられているのかを見ていきます。なお図8~図11は全て[1]で掲載されていたものです。

オートエンコーダの学習回数削減

図8 : 従来のオートエンコーダ vs デコーダをIM-NETに置き換えたオートエンコーダ
オートエンコーダのデコーダ部分をIM-NETに置き換えることに従来より少ないエポック数で学習ができるようです。論文ではアルファベットの”A”という文字の画像での学習の様子を実際に[1]では図8のように示してます。(a)が従来のオートエンコーダで(b)がそのデコーダ部分をIM-NETに置き換えたネットワークです。(b)のほうがより早い段階でアルファベットの”A”が浮かび上がることが分かります。

5.3 敵対的生成モデルによる三次元図形の生成と補間の精度向上

IM-NETを使うことにより、敵対的生成モデルから生成される図形の品質を向上させることができます。次の図9は実際に、敵対的生成モデルによって生成された図形の比較です。(e),(f)がIM-NETを用いたモデルで他のモデルより表面の凸凹などが少なく、綺麗な図形が表示されています。
図9 : 敵対的生成モデルによって生成された三次元図形の比較
図10は二つの生成図形間の補間の様子を示したものです。Code特徴量を線形補間することで生成されます。IM-NETを用いたモデル(d)は中間の図形がスムーズに変化していくのに対して、他手法では上手く補間が出来ていないことが分かります。
図10 : 複数の三次元図形間の補間[1]
その他、単一視点画像からの三次元図形再構築などにもIM-NETが応用可能です。

ネットワーク詳細

図11 : IM-NETのネットワーク構造
最後に気になる方のために、IM-NETの詳細なネットワーク構造を載せます。図11に示すようにIM-NETは入力に対してスキップコネクションなどを駆使した複数の全結合層からなります。またCode特徴量は128次元のベクトルで表されています。 学習は次のような損失関数の下で行われます。
サンプリング点 p の予測Occupancyf_\theta(p)と実際のOccupancy \mathcal{F}(p) の誤差を w_p で重みつけた損失関数を用います。w_pは図形の表面に近いほど大きな重みが与えられます。
IM-NETの簡単にまとめると次のようになります。
  • Occupancyを学習するようにして三次元表現を獲得
  • IM-NETは従来手法のDecoder部分に置き換わることで様々なタスクに汎用的に応用が可能である
  • Code特徴量により潜在空間を表現し、ひとつのモデルで複数の三次元図形を表現することができ、

DeepSDF

DeepSDF[5]はIM-NETと同時期に発表されたネットワークです。基本的なアイディアはIM-NETと同じですが、DeepSDFはOccupancyではなく SDF(Signed distance fields)と呼ばれるスカラー場を学習します。 これは三次元図形に対して定義される符号付き距離であって、各点のスカラー値には、その点から物体の表面までの最短距離が入ります。ただしその点が物体の内部にある場合はマイナス、外部にある場合はプラスの値を取ります。図12では、ウサギの図形を例としてSDFを可視化しています。
図12 : Signed distance fields [5]より引用
またIM-NETと同様、DeepSDFにも図13のようにCode特徴量が存在していて、潜在空間を表現し様々なタスクへの応用が可能になります。
図13 : Code特徴量の追加
DeepSDFの損失関数は次のように定義されます。
ここでclampは値を[-\delta,\delta]の範囲に収める関数(Numpyのclip関数やC++のstd:clamp関数と同じ) で\deltaが大きいほど学習が早くなりますが、細部の形状表現がおろそかになり、 \delta を小さくすると、細部の形状まで表現できるようになります。

Encoder-less learning

IM-NETではCode特徴量は他ネットワークから得るといった使い方がされていました。もちろんDeepSDFでも同様な使い方はできますが、DeepSDFではコード特徴量をDeepSDFだけで得る手法があり、Encoder-less learnigと名付けられています。具体的には以下のようにします。 始めにデータ(三次元図形)ごとにランダムでCode特徴量を設定します。 次に各データに関して次のような損失関数を定義します。ここでzはコード特徴量を表しています。
一見突拍子ないように見えますが、ベイズ統計の枠組みではこれはCode特徴量にガウシアン事前分布を仮定したとき、次のような指数型分布族から得られたサンプルに対しての事後分布の対数尤度最大化に相当します。

Code推定による三次元図形推定

DeepSDFの独自の応用例として、Code推定による三次元図形推定を紹介します。学習が完了したDeepSDFを用いて新たなデータに対してもっともフィットするような三次元図形を表現することが可能となります。これにより図6のように不完全な三次元図形のデータ(点群など)から完全な三次元図形の推定などのタスクに応用することができます。 具体的には
という最適化問題を解くことで、データにもっともフィットする形状を取るようなコード特徴量を推定することで、三次元表現を推定します。[5]で、実際にノイズの入った点群データからCode推定を行うことで三次元図形を獲得した例を図14として引用します。
図14 点群データからの三次元表現獲得

まとめ

以上ニューラルネットワークの陰関数表示による表現に関する論文を紹介しました。どちらもニューラルネットワークならではの特性を使って巧みに三次元表現を得ているという印象を受けました。IM-NETもDeepSDFもOccupancyやSDFに対する分類問題や回帰問題を解くことで三次元表現を得ていて、これは従来ボクセル、点群、メッシュといった、人手で構築していく表現とは一線を画したものだと思います。応用範囲として非常に興味深いものがたくさんあり、実社会に関わってくる未来も近いかもしれません。一方で両者とも色や質感などを表現できないといった欠点があります。今回は物体の内部と外部を表すスカラー場を学習させましたが、 NeRF では色や輝度の情報まで持たせたRadiance fieldと呼ばれるベクトル場を学習させることで、色や質感などを表現でき、よりそちらのほうが実用には近いのではないかといった所感があります。 今回はニューラルネットワークによる三次元表現に焦点を絞りましたが、他にも3Dメッシュのレンダラーをニューラルネットワークで再現する研究[4]なども盛んです。 ALBERTではともにAIを活用し最先端の課題に挑戦するメンバーを募集しています。興味をお持ちいただいた方は、こちらまでお問い合わせください。

参考文献

[1] Chen, Z., & Zhang, H. (2019). Learning implicit fields for generative shape modeling. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 5939-5948). [2]Csáji, B. C. (2001). Approximation with artificial neural networks. Faculty of Sciences, Etvs Lornd University, Hungary24(48), 7. [3]Feng, Y., Feng, Y., You, H., Zhao, X., & Gao, Y. (2019, July). MeshNet: Mesh neural network for 3D shape representation. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 33, pp. 8279-8286). [4]Kato, H., Ushiku, Y., & Harada, T. (2018). Neural 3d mesh renderer. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 3907-3916). [5]Park, J. J., Florence, P., Straub, J., Newcombe, R., & Lovegrove, S. (2019). Deepsdf: Learning continuous signed distance functions for shape representation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 165-174). [6]Qi, C. R., Su, H., Mo, K., & Guibas, L. J. (2017). Pointnet: Deep learning on point sets for 3d classification and segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 652-660).

Steerable CNNs の紹介

$
0
0
この画像には alt 属性が指定されておらず、ファイル名は D4_exp-1024x957.png です
こんにちは、先進技術部の古川とプロダクト開発部の中井です。今回は、Steerable CNNs と呼ばれるネットワークの論文解説と Chainer による実装 のレポートを行います。なお、この記事は前任者の実装・レポートを元に、ブログ用に追記・編集したものです。

1. 概要

Steerable CNNs とは

Steerable CNNs は、Taco S. Cohen と Max Welling が提案した、入力画像の平行移動・回転・鏡映の作用を保つような CNNs (Convolutional Neural Networks、畳み込みニューラルネットワーク) です。 このアイディアを発表した論文 [CW17] はICLR 2017 で採択されました。以下のような特徴があります。
  • 高精度である。WideResNet をベースにしたネットワークが CIFAR-100 でエラー率 18.82\% と、当時の最高精度を出した。
  • 上記の精度は、水平反転と平行移動のみのデータオーグメンテーションで達成した。
  • 少ないパラメータ数である。ResNet50 が 2000 万程度、2019 年 5 月現在最高精度の AmoebaNetB は 5.5 億程度あるのに対し、WideResNet ベースのネットワークは 920 万ほどで済んでいる (ただし、その後 EfficientNet-B0 では 400 万程度のパラメータで transfer-learning を使って より低いエラー率を出すなど CNN 自体もさらに進歩しています)。
平行移動・回転・鏡映の作用を保つという制約を加えることで、表現力を大きく犠牲にすることなくパラメータ数を減らすことができていると言えます。

詳しいことは後ほど見ていきますが、 [CW17] で導入された Steerable CNNs は p4mという群の作用に関して同変な CNNs です。群の作用に関して同変な CNNs は [CW17] の Steerable CNNs 以降急速に発展している分野で、様々な群を取り扱った CNNs が発表されています。例えば、[CGW19] により一般的な視点からの扱いが書かれているので参照してみてください。最近では、 [WC19] を元にして2次元データの群の作用に関して同変な CNNs を包括的に扱えるPyTorch 実装のライブラリ e2cnn が出ており、比較的手軽に試すことができます。

群の作用に関して同変な CNNs は、数学や物理で使われる群や表現論を背景にしており、現実に現れる様々な対称性を深層学習で上手く扱う工夫が見られる面白い分野ではないかと思います。

2. 用語説明

ここでは、数学や物理において空間の対称性を表すのに使われる、群、群の作用および群の表現について説明します。

2.1. 群

とは、集合 G とその上の二項演算 \cdot\colon G\times G \to G の組 (G, \cdot) で結合法則・単位元の存在・逆元の存在を満たすものです。詳細は、例えば、[K07] や Wikipedia の群に関する記事 を参照してください。群を表す時に、定義されている演算が自明で混乱がない場合は (G, \cdot) と書かずに単に G と書きます。

G の群演算を 部分集合 H へ制限したものに関してまた群になる時、 HG部分群と言います。

群は、例えば、図形を自身へ写す変換の集合を考えたときに自然に現れます。その場合、群は図形の対称性を表していると考えることができます。

2.2. 群の作用と群の表現

ある群について知りたい時に、そのものを直接調べるだけでけではなく、別の対象に「作用」させてその振る舞いを調べるということが行われます。

(G, \cdot_G) と集合 V が与えられたとします。写像 \cdot \colon G\times V \to V
  • G の任意の元 g, hV の任意の元 v に対して (g\cdot_G h)\cdot v=g\cdot(h\cdot v),
  • G の単位元 eV の任意の元 v に対して e\cdot v= v
を満たす時、V 上の G作用 (左作用) と言います。G の元 g が与えられると、V から V への全単射 (上への 1 1 写像) g\cdot\colon V\to V が定まることが分かります。\mathrm{Aut}(V)V から V 自身への全単射写像全体の集合とすると、\mathrm{Aut}(V) は写像の合成に関して群になります。V 上の G の作用を定めることは、G から \mathrm{Aut}(V) への群準同型を与えることと同じです。

次に、群 (G, \cdot_G) と集合 V が線型空間の場合を考えます。V の線型同型写像全体のなす集合 GL(V) は、写像の合成を演算とすると群になります。写像 \pi\colon G\to GL(V)
  • G の任意の元 g, h に対して \pi(g\cdot_G h)=\pi(g)\circ\pi(h) (\circ は写像の合成),
  • G の単位元 e に対して \pi(e)= \mathrm{id}_V (\mathrm{id}_V は恒等写像)
となる時、群 G の線型空間 V 上の表現 (あるいは、線型表現) と言います。すなわち、群 G の線型空間 V 上の表現とは群準同型 \pi\colon G\to GL(V) のことです。表現は、線型空間と線型変換という構造の下で作用を考えたものと思えます。

表現によって定まる変換を書くときは、g\in G, v\in V に対して \pi(g)v と書くことにします。V の次元 \mathrm{dim} V を表現 \pi次数または次元と言います。

SSAP [Proposal-freeなInstance Segmentation手法] の紹介と実験

$
0
0
こんにちは。先進技術部でアルバイトをしている河田です。
今回はNaiyu Gaoらによって提案されたInstance Segmentationの手法であるSSAP[1]について紹介します。本論文はICCV 2019で採択されました。
SSAPの概要は以下の通りです。
  • Instance SegmentationタスクにおいてSingle-shotでProposal-freeな手法を提案し、SOTAを達成
  • Semantic Segmentation と、ピクセル間の関係性を表すAffinity pyramidによりInstance Segmenationを実現
  • 階層構造を用いることで、5倍のスピードアップと9%のAP精度向上を達成。
PyTorchによる再現実装も公開しているのでご覧ください。

はじめに

現在、Instance SegmentationといえばFaster R-CNN[2]を元にしたMask R-CNN[3]が最も有名です。Mask R-CNNでは、まず各物体を検出してBBoxを作成し(Proposal-based)、検出領域ごとにSegmentationを行うという2段構成で物体領域を見つけるという手法を取ります。この方法では2つのモジュールを通ることになるため、速度が遅いのが欠点です。また、Instance Segmentation の精度がBBoxの検出精度に大きく影響を受けてしまいます。

一方で、SSAPでは物体を検出しBBoxを生成することなく(Proposal-free)、1段構成で(Single-shot) Instance Segementationを行います。具体的には、モデル内部でSemantic Segmentationとピクセル間の関係性を表すAffinityを同時に作成し、この二つを組み合わせます。Semantic SegmentationとAffinityを同時に学習するため、これらの相互関係も踏まえた予測となり、精度向上も期待できます。
図1、Proposal basedな手法ではまず物体の検出を行い、その後Semantic Segmantationを行う(上段)。一方で、Proposal freeな手法では物体の検出を行わずに直接Instance Segmentationを行う(下段)。1段構成の方がモデルの構造がシンプルで計算時間が短い。
さらに、SSAPではInstance Segmentationを作成する際に、粗い解像度で作成したマスクを細かい解像度の特徴量を使って階層的に洗練し識別を行います。階層的なモデルを使用した結果、階層構造を使用しない場合に比べて5倍のスピードアップとAPで9%の精度向上につながったと述べられています。これらの手法を組み合わせることで、難しい都市の景観のデータセット[4]に対してSOTAを達成しました。
図2、都市の景観のデータセット。奥の細かい部分にまでアノテーションがされている。

画像識別タスクの基礎知識

SSAPはInstance Segmentationを行う手法ですが、そもそもInstance Segmentationとはどのようなタスクなのでしょうか。
画像を入力として与え、それを機械学習で識別するタスクは様々あります。ここでは、簡単に4つの画像識別タスクについてご紹介します。

(1) 画像分類(classification)
与えられた画像が何であるか(クラス)を識別するタスクです。予めクラスの候補が指定されており([犬、猫、車、人…])、その中で最も事後確率が高いクラスを出力します。

(2) 物体検出(detection)
画像分類を行い、さらにその物体の場所も識別するタスクです。多くはBBoxと呼ばれる矩形を用いて各物体の位置を特定します。画像中に複数の物体がある場合は、それら全てについて物体のクラスおよび物体の位置を識別します。

(3) Semantic Segmentation
BBoxを使用せず、ピクセル単位で各クラスの領域を求めるタスクがSegmentationです。複数の物体がある場合でも、同じクラスであれば区別なく同じクラスとして識別を行います。

(4) Instance Segmentation
Semantic Segmentationとは異なり、各クラス領域をピクセル単位で識別し、さらに同じクラスでも別の物体(Instance)であればそれらを区別するタスクです。物体検出とSemantic Segmentationを合わせたタスクで、物体検出よりも精密に物体の形を捉える必要があります。
図3、各画像認識タスクの入出力例
SSAPでは4つ目のInstance Segmentationのタスクを行います。画像認識タスクの中では細かい部分の識別が必要になるので難しいタスクとされています。

SSAPのモデル構造

「はじめに」で述べたとおり、SSAPではInstance Segmentationのタスクを行うために、モデル内でSemantic SegmentationとAffinityを作成します。Semantic Segmentationはピクセル毎のクラスを推測し、Affinityは近くのピクセルが同じ物体(Instance)に属しているかどうかを推測します。その後、この二つの推測結果を階層的なグラフ分割により合成することで、画像の中のInstanceを識別します。Affinityと階層的なグラフ分割について、それぞれ詳しく見ていきましょう。
図4、SSAPでは、Semantic SegmentationとAffinity (Pyramid)をそれぞれ計算し、その後階層的なグラフ分割(Cascaded Graph Partition)を行なって二つを組み合わせることでInstance Segmntationを作成する。

Affinity

Affinityは、あるピクセルとその周囲の r×r の範囲にあるピクセルが同じInstanceに属する確率を示します。
Affinityは0〜1の値を取り、値が1に近いほど同じInstanceに属している確率が高いことを表します。 この中心のピクセルを1ピクセルずつ動かし、画像中のすべてのピクセルについてAffinityを計算するので、 画像の大きさが h×w だとすると、全部で r^2×h×w の大きさのAffinity mapが作成されます。
図5、Affinityの例。中心のピクセルと同じ物体(Instance)に属している場合は1を示す。図は r=5 の場合。
学習中は正解Affinityと推測したAffinityの二乗誤差を最小化します。
なお、aは推測したAffinityの値、yは正解のAffinityの値(ground truth)を示します。a^jはある中心ピクセルに対するj番目のピクセルのAffinityで、a^j\in(0, 1) です。同様にy^jj番目の正解データで、中心のピクセルと同じInstanceに所属している場合は1、それ以外は0を取ります。

しかし、このlossをそのまま最小化してしまうと、バランスが非常に悪くなってしまいます。なぜなら、Affinityが0となるのは物体と物体の境目付近のみであり、ほとんどのAffinityの値は1だからです。そのため、学習中は正解が1、つまり同じ物体に属しているピクセルのAffinityを80%の確率でランダムにdropさせ、Lossを計算しないようにします。さらに、通常は背景の領域に比べ物体の領域が狭いため、いずれかのInstanceに属するピクセルについては3倍のLossを設定することで物体に注目させます。これらの工夫をすることでバランスをとります。

階層的なAffinity (Affinity Pyramid)

先ほど周りのr×rのピクセルについてAffinityを作成すると述べましたが、このままではあるピクセルに対し、非常に近くのピクセルしか推測を行えません。そのため、Affinityを計算しない遠くのピクセルについては同じInstanceに属しているのかどうかがわかりません。また、大きな物体についても同様の理由で識別が難しくなってしまいます。この問題の解決策としては、例えばrの値を大きくしたり、画像の解像度を小さくしたりすることが考えられます。しかし、rの値を大きくして遠くのピクセルまでAffinityを取ろうとするとメモリが大量に必要になると同時に、Semantic Segmentationにも悪影響を及ぼすことが論文内で示されています。また、画像の解像度を小さくすると長距離のAffinityを考慮することができる一方で、細かいピクセル単位での識別が困難になり、小さな物体を検出しなくなってしまいます。

そこで、SSAPでは複数の解像度でAffinityを作成する(Affinity Pyramid)ことで、遠近両方のAffinityを取ることを提案しています。先ほど述べたように、解像度を下げることでAffinityを取る範囲rを変えずに長距離のAffinityを考慮できます。例えば、解像度が\frac{1}{64}のAffinityで2ピクセル離れている場合、元の解像度では128ピクセル分の距離のAffinityを意味します。小さい物体は低解像度で発見することができませんが、高解像度で発見が可能です。複数の解像度でAffinityを計算することで、小さい物体も大きい物体も識別することができるようになるわけです。
図6、複数の解像度でAffinityを算出することで、小さい物体と大きい物体の両方に対応できる。
さて、上で述べたような複数の解像度のAffinityを作成するためにはどのようなモデルを用いればよいでしょうか。SSAPでは、一般的にU-Net[5]と呼ばれる”U”の形をしたモデルを使用します。このモデルでは一度解像度を落とした後(Encoder)、再度解像度を上げる(Decoder)ことで細かい部分と大局的な部分の両方に注目できる構造になっています。また、解像度を上げる際に、解像度を落とす前の特徴量を足し合わせることにより、細かい部分の情報が消えてしまわないように工夫されています。

このモデルにより各解像度でAffinityを算出する際に、同時にSemantic SegmentationもAffinityと同じ解像度で算出します。AffinityとSemantic Segmentationを同時に学習することで相互関係を踏まえた予測が行えるようになり、精度が向上します。なお、論文では元画像の大きさの [\frac{1}{4}, \frac{1}{8}, \frac{1}{16}, \frac{1}{32}, \frac{1}{64}] の5つの解像度でAffinityとSemantic Segmentationを計算しています。
図7、U-Netの構造を用いて、各階層で対応した解像度のSemantic Segmentation maskとAffinityを作成する。

階層的なグラフ分割(Cascaded Graph Partition)

さて、Semantic SegmentationとAffinityの値は学習を進めることで取得できることが分かりました。それでは、この二つを使ってどのようにInstance Segmentationを作成していくのでしょうか。SSAPでは、「グラフ分割」の考え方に基づいてピクセルをInstance毎に分割する手法を取ります。
そもそもグラフは、頂点を意味する「ノード」と、ノード間をつなぐ「エッジ」により構成されています。グラフ分割では、これを何らかの条件でいくつかの部分グラフに分割します。ここで、ピクセルをノードとみなし、周囲 r×r との間にエッジが張られていると考えると、ピクセル全体はグラフを構成していると言えます。このグラフを、Affinityを考慮して分割することでInstanceを生成していきます。
グラフ分割について、もう少し細かく解説します。
通常のグラフ分割問題は、以下の式(3)を式(4)の制約の下で最適化する問題です。
w_eはエッジeの重みです。y_eは0か1のどちらかを取り、 y_e=1 はエッジeを切断することを、y_e=0 はエッジeを切断しないことを意味します。つまり、w_eが負の時に切断 (y_e=1) し、w_eが正の時に切断しない (y_e=0) ようにすることで、式(4)は最小になります。

では、重みが正のエッジは全て残し、重みが負のエッジは全て切れば良いかというと、実はそうではありません。例えば下図のように重みwが与えられた場合、w_{2, 3}=-0.9のエッジのみを切断してグラフを分割しようとしても、他のエッジがつながっているためグラフを分割することができません。この問題を回避するため、うまくグラフが分割される制約(式(4))が必要となります。
Cはサークル、つまりグラフのある閉路を示しており、e'Cに含まれるエッジの一つを示します。また、eCに含まれるe'以外の全てのエッジを意味します。つまり、式(4)は、Cに含まれる一つのエッジe'を選んだ時に、y_eの合計よりもy_{e'}が大きくなってはいけないことを意味しています。この制約は簡単に言うと、「閉路上のエッジを切断するなら、必ず二箇所以上で切らなければならない」ということです。例えば輪ゴムを切って2つに分けることを想像すると、必ず2箇所は切らなければならないということがわかるかと思います。

具体例を見てみましょう。例えば下図でノード[2]とノード[3]の間のエッジをe'に選ぶとします。この時、図8のようにエッジを切断することを考えると、y_{e'}=1です。また、その他のエッジは \sum y_e=0+0+0=0 です。つまり、\sum y_e<y_{e'} となってしまい、式(4)の制約が満たされないことになります。

以上より、基本となるグラフ分割問題は、制約である式(4)を満たしつつ、式(3)を最適化する問題だと言えます。
図8、エッジの重み通りにエッジを切断するだけではグラフ分割ができない例。
さて、グラフ分割について理解できたところで、グラフ分割をInstance Segmentationに応用する方法を見ていきましょう。まず無向グラフG=(V, E)を考えます。Vはピクセルのセット、E\subseteq V^2はAffinityを計算する範囲内rにあるペアのエッジを示します。e_{u, v}\in Eはピクセル(u, v)の間のエッジを、a_{u, v}, a_{v, u}\in (0, 1)はピクセル(u, v)間のAffinityを示します。両方向からAffinityを計算するため、1つのエッジで2つのAffinityが計算されています。この2つのAffinityは式(5)により平均され、式(6)によりエッジの重みw_{u, v}を計算します。
式(6)を図にすると以下のようになり、Affinityの平均が0.5より大きければエッジの重みは正、小さければ負に変換されることがわかります。
図9、w=log(\frac{\alpha}{1-\alpha})のグラフ。横軸が\alpha(Affinityの平均)、縦軸がw(エッジの重み)を示している。
計算したエッジの重みが正であればAffinityが大きく、二つのピクセルは同じInstanceに属している可能性が高いことを意味するのでエッジはそのまま残します。逆にエッジの重みが負であればAffinityが小さいため、エッジを切断します。このようにすることで、グラフ分割をInstance Segmentationに応用できるようになります。

しかし、グラフ分割は基本的に繰り返し処理が入るため、ノードが多くなるにつれ時間も長くかかります。ピクセルごとにノードを作成するとノード数が非常に大きくなってしまうため、実際のアプリケーションにグラフ分割をそのまま使うのは難しいという難点があります。また、大きな物体に関してはほとんどのピクセルが物体の内部に位置するため、簡単な問題であるにも関わらず非常に時間がかかってしまいます。

※具体的にグラフ分割を解く方法については長くなってしまうため末尾に掲載します(具体的なグラフ分割の解き方(GAEC法))。

階層構造

そこで、論文では先ほど解像度ごとに作成したSemantic SegmentationとAffinityを使って階層的にグラフ分割を行い、実行時間の短縮を図ることを提案しています。いきなり大きな解像度でグラフ分割をするとノード数が多くなり、非常に時間がかかってしまいます。しかし、解像度が低いSemantic SegmentationとAffinityを用いてグラフ分割を行い、その結果をもとに徐々に解像度の高いグラフを分割していくことで、速度の向上が期待できます。解像度が低いグラフ分割結果でも、識別したInstanceの内側のピクセルの部分は信頼できるため、内側の部分をup-samplingし、これを一つのノードとして次の高解像度のグラフ分割の際にエッジと共に渡していきます。このように階層的にグラフ分割を繰り返すことで、Instance segmentationの結果が徐々に洗練されていきます。さらに、ノードが増えるのも防げるため、推測速度が早くなります。
図10、低い解像度から高い解像度へと順にグラフ分割を行い、グラフ分割の時間短縮を狙う。

Segmentation Refinement

ここまでグラフ分割について述べてきましたが、仮にSemantic Segmentationの結果毎にグラフ分割を行うことを考えたとき、Semantic Segmentationのクラス識別が間違えてしまうと、グラフ分割がどれだけ正しくてもInstanceの作成に失敗してしまいます。例えば下図の(b)のようにトラックのクラス識別が3つのクラスに分かれてしまうと、Instance結果も(c)のように、多くのInstanceに分かれてしまいます。
図11、(a)元画像. (b)Semantic Segmentation. (c)SRを行わなかった場合のInstance Segmentation. (d) SRを行なった場合のInstance Segmentation. (e)正解のInstance Segmentation.
そのため論文では、Segmentation Refinement(SR)という手法を提案しています。SRではクラス毎にはグラフ分割を行わず、背景ではない、いずれかのインスタンスに属すると判定された全てのピクセルに対してグラフ分割を行います。その後、作成したInstanceがどのクラスに属するのかを判定するという方法を取ることで、Semantic Segmentationの誤りがInstance Segmentationの誤りに直結しないようにしています。
さらに、Segmentation Refinementでは「同じ物体に属するピクセルのクラスの事後分布は似ている」という考え方を基に、Semantic Segmentationのクラス判別結果を用いてAffinityを修正することも提案しています。これらの処理を行うことで図の(d)が示すように、Segmentationを間違えてもInstanceの識別に成功する可能性が高くなります。

Affinityの修正は以下の式(7)〜式(9)で行われます。
\alpha_{u, v}'は修正したピクセル(u, v)間のAffinityを表しており、D_{JS}はJensen-Shannon divergenceを意味します。 S_uはピクセルuの各クラスの事後確率を示しています。これより、exp[-D_{JS}(S_u||S_v)] は2つのピクセル間におけるクラスの事後分布の隔たりを計算していることになります。クラスの事後確率の隔たりが大きいほど exp[-D_{JS}(S_u||S_v)] の値は小さくなり、結果としてAffinityを小さくします。 exp[-D_{JS}(S_u||S_v)] は0から1の値をとります。

Transformerを利用した対話システムの応答制御について

$
0
0
こんにちは。先進技術部でアルバイトをしている上垣です。
今回は、Transformer[1]を利用した対話システムにおいて応答を制御する情報の与え方について調査と実験を行ったので、結果を紹介します。

はじめに

自然言語処理には、「人の言葉を生成する」ことを目的とした様々なタスク(言語生成タスク)があります。例えば機械翻訳、文書要約、イメージキャプショニング、対話システムなどです。最近では、これらの言語生成タスクは、ニューラルネットワークを利用して取り組まれることが多くなっています。しかし、現状ニューラルネットワークを利用した言語生成は不安定で、実用にあたって課題が残ります。学習に使ったコーパス内の単語出現頻度を元に単語選択や文生成をしているので、生成文に意味的/言葉遣い的な一貫性が無かったり、何を言い出すか分からない怖さがあったりします。これに対する解決策の一つとして、例えば、学習に使用するコーパス自体に制限をかける(ある傾向に沿うようにコーパスを作成する)ことが考えられますが、データ作成コストやデータ量不足の問題が発生します。別の解決策として、モデルへの入力データとして制御情報を渡すことで、出力を制御する方法があります。モデルが制御情報を参考に文章を生成することで、口調や言葉遣い、内容などを分岐できると考えられます。更に、この方法であれば、規模の大きなデータセットでも制御情報をアノテーションするだけで、全てのデータをモデル学習に利用できます。データセットを初めから新しく作るようなコストも減らせます。一方で、この方法では「制御情報をモデルのどの段階で参照するのが効果的なのか」という問題が残ります。そこで、本記事では、この点について比較実験を行いました。

本記事では、Transformerモデルを利用した対話システムでの制御情報の付与について紹介します。より具体的には、対話システムへのパーソナリティ付与を例にとって、モデルのどの段階で制御情報を与えるべきか実験を行い比較しました。データセットにはConvAI2[2] コンペティションの PersonaChat[3]データセットを利用しました。なお、対話システムへのパーソナリティ付与研究やタスクについての詳細は弊社ブログの”チャットボットは個性を獲得できるのか?“をご覧ください。

対話応答生成について

まず、一般的な対話応答生成について紹介します。
対話応答生成について大雑把な見方をすると、ある文章(発話X)に対する応答Yとして適切そうな文章を返すタスクと考えられます。
  • 発話X:
     家にいる時は何をしていますか。
  • 応答Y:
     よく音楽を聴きます。
このように、発話Xに対して、すでに存在している応答を選択する場合であれば、クラス分類タスクとして学習データセットに合うように条件付き確率 P(Y \mid X) を最適化します。しかし、この場合は事前に応答を作成しておかなければならず、あまり自由な応答はできません。そこで、文章をより細かなパーツに区切り、その組み合わせとして表現することで、事前に作成した応答よりも自由な応答生成を行うことができます。この際、様々な文章で共通して見られる細かなパーツをトークンと言います。発話Xや応答Yはいくつかのトークンからなるトークン列として捉えられるので、対話応答生成タスクはトークン列からトークン列を予測するタスクとなります。
  • 発話X(トークン):
     家 に いる 時 は 何 を し て い ます か 。
  • 応答Y(トークン):
     よく 音楽 を 聴き ます 。
なお、トークンの分け方には色々な種類があります。例えば、英語であればスペースで区切ったり、日本語であれば形態素で区切ったりすることが一般的です。その他に、言語をニューラルネットワークで扱う場合には、コーパスから事前にトークン分割方法を学習してしまうこともあります。今回は、後者のトークン分割方法を学習するsentencepiece[4]という手法で分割をしています。
  • 形態素分割例(MeCab IPADIC):
     家 に いる 時 は 何 を し て い ます か 。
  • sentencepiece例(1):
     家に いる 時は 何を して います か 。
  • sentencepiece例(2):
     家にいる 時は 何を して いますか 。
ニューラルネットワークでトークン列からトークン列を予測するためには、Seq2Seq (Sequence-to-Sequence) という構造を利用します。先行する発話をX、発話トークン列のi番目にあるトークンをx_i、応答をY、応答トークン列のi番目にあるトークンをy_iとして表すと、Seq2seqは以下のように表せます。

P(Y \mid X) = \prod_{t=1}^T P(y_t \mid x_1, x_2, …, x_n, y_1, y_2, …, y_{t-1})

具体的な対話の例で考えると、
「家に→いる→時は→何を→して→います→か→。→(話者交代)→よく→?」
という流れにおいて、「?」の部分に「音楽」というトークンが出力されるような条件付きの確率分布を求めることになります(そうなるように学習コーパスを元にモデルを最適化します)。Seq2Seqな学習には時系列情報を扱えるRNN等が採用されることも多いですが、最近ではAttentionという仕組みを利用したTransformerモデルがよく利用されています。次節でTransformerについて簡単に紹介します。

Transformer について

Transformer[1]は機械翻訳で提案されたモデルで、Seq2Seqな学習を効率良く高精度で行えるため、現在自然言語処理の分野で幅広く利用されています。有名なBERTやALBERT、GPT-3といったモデルの基本構造は全てTransformerモデルが元になっています。
Transformerでは、入力発話Xをエンコーダによって特徴量化し、それを元にデコーダで応答Yの単語確率分布を予測します。図1はTransformerのモデル図で、左側のスタックがエンコーダ、右側のスタックがデコーダになります。

図1: Transformerのモデル図(論文[1]からの引用)
エンコーダとデコーダともに、トークンをベクトルに変換したもの(Embedding)を入力として受け取ります。
  • 発話X(トークン):
     家に いる 時は 何を して います か 。
  • 辞書:
     { “家に”: [0.1, 0.2, 0.3],
      “いる”: [0.3, -0.2, 0.1],
      …,
      “。”: [1.0, 1.0, 1.0],
      “よく”: [0.1, 0.1, 0.1],
      … }
  • 発話X(3次元):
     [[0.1, 0.2, 0.3], [0.3, -0.2, 0.1], …, [1.0, 1.0, 1.0]]
TransformerはRNN等の時系列モデルと違い、モデル自体では文章内での位置情報を表現できないため、以下の式で表されるPosition-EncodingをEmbeddingに加算します。次の式のposはトークンの文章における位置であり、iはベクトルの次元になります。

PE(pos, 2i) = sin(pos/10000^{2i/d_{model}})

PE(pos, 2i+1) = cos(pos/10000^{2i/d_{model}})

上記の式で表されるPosition-Encodingを可視化すると図2のようになります。

図2: Position Encoding(最大文章長30, 次元数256の場合)
Transformerでは、このようにして取得した発話文/応答文の各トークン特徴量を、Attention層やFeedForward層に通して変換していきます。Attentionは以下の式で表すことができます。

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

Q、K、VはそれぞれQuery、Key、Valueを表しています。これはAttentionをMap構造(Pythonでは辞書型のデータ構造)に見立てた表現となります。
あるトークンに対応するAttentionの出力特徴量を知りたい場合、そのトークンのAttention前の特徴量をQueryとします。Attentionは、Queryをある系列に含まれるトークン特徴量の重み付き和として説明しなおす処理です(具体的なイメージは以降の図3、4に示します)。Attention出力を説明するトークンの重みは、「ベクトルの内積をもとにした類似度」と定義しています。この重みの算出過程で、Queryとの間の類似度計算に利用される系列の特徴量がKeyです。つまり、 Queryが与えられた際に「系列中のどのトークンをどの位の重要度で取得するか」の情報を担うのがKeyです。そして、算出した重みを利用して、説明に用いるトークン特徴量(Value)の重み付き和を算出しています。

TransformerモデルのAttentionは、データの渡し方によって2種類の使われ方があります。それぞれSelf-AttentionとSource-Target-Attentionと言います。

Self-Attentionは、エンコーダやデコーダの層内で、系列中のトークンの意味をその文脈に即して解釈する役割を担っています。Self-AttentionのQ、K、Vには、エンコーダであれば発話Xの特徴量のみ、デコーダであれば応答Yの特徴量のみ、というように全て同じものを入力します。つまり、ある系列のあるトークンの特徴量を、その系列に含まれる全てのトークン特徴量の重み付き和で表すわけです(図3)。

図3: Self-Attentionの処理
Source-Target-Attentionは、デコーダ層内で発話Xと応答Yそれぞれに含まれるトークンの関係性を考慮する役割を担っています。入力としては、Qに応答Yの特徴量、KとVに発話Xの特徴量をそれぞれ入力します。つまり、応答文に含まれる特徴量を、発話文に含まれる全てのトークンの重み付き和で表すわけです(図4)。

図4: Source-Target-Attentionの処理
また、TransformerではMultihead-Attentionという種類のAttentionを使用しており、入力を特徴量の次元に対してN個に分割、線形変換をした後、並列にAttentionを行います(並列して行われるAttentionをheadと呼びます)。式のnは分割された入力の何番目かを表し、W^Q、W^K、W^V、Wはそれぞれ線形変換のパラメータになります。

head_n = Attention(Q_{n}W^Q_{n}, K_{n}W^K_{n}, V_{n}W^V_{n})

MultiheadAttention(Q, K, V) = concat(head_1, …, head_n, …, head_N)W

エンコーダとデコーダの構造の違いは主にSource-Target-Attentionを含むか否かになります。
エンコーダはSelf-Attentionと、一般的なFeedForward層の2種類の層からなるスタックです。
一方、デコーダはSelf-Attention、Source-Target-Attention、FeedForward層の3種類の層からなるスタックです。デコーダのSelf-Attentionでは、応答Yの特徴量全てを使って和を求める性質上、説明されるトークンの時点では知り得ない未来のトークン情報も考慮してしまいます。そこで、学習時は説明されるトークンより未来のトークン特徴量をマスクによって無視し、推論時は自己回帰的に推論することで解決しています。なお、Source-Target-Attentionは説明に用いるのが発話Xなので、未来の情報についてのマスキングは行いません。

デコーダでは最終スタックの出力を辞書の語彙数次元に線形変換してから softmax 関数によって予測語彙の確率分布を出力します。

対話文脈への適用

これまでの例では、1ターンの対話を扱ってきました。一方で、対話は複数ターン連続するものです。対話システムの対話文脈対応はそれだけで研究テーマとなっている分野ですが、Transformerモデルを利用した対話システムでは、大まかに2種類のモデルで対応されることが多いようです。 一つは、単純にこれまでの対話履歴全てを結合してエンコーダに渡す手法です。今回の実験では、ターンや話者の違いを示すために2つのことを行います。まずは、発話と発話の間に、ターンの区切り目を表す<SEP>という特殊なトークンを挟みます。次に、その発話が何ターン目の発話かを表すEmbeddingを、各トークン特徴量に加えます。この手法はこれ以降単純にTrmとします(図5)。

図5: Trmモデル
もう一つは、階層型Transformerと呼ばれる手法です。階層型Transformerではまず、対話履歴を発話ごとにエンコードして文章特徴量を算出します。次に、算出した文章特徴量にターンを表すPositional Encodingを加え、別の文脈用エンコーダ(Context Encoder)に通します。この手法はこれ以降HTrmとします(図6)。

図6: HTrmモデル
また、HTrmにおける文章特徴量は以下の式に従って算出することとします。Nは1文に含まれるトークン数、w_nはn番目のトークン特徴量です。

Embed_{sentence} = \frac{\sum_{n=1}^{N} w_n}{\sqrt{N}}

対話応答生成モデルの制御方法

対話応答生成モデルを制御するタスクや手法はいくつか考えられます。タスクについては、今回はパーソナリティ付与タスクを扱います。手法については、モデルへの入力として制御用の特徴量を付与することで、その特徴量によって応答を変化させる、という手法に絞っています。制御用の特徴量は、他モデルを利用して学習を行った場合でも取得しやすいように、ベクトルを想定します。

さらに、特徴量による条件分岐では、どの段階で特徴量を付与するのかという問題が考えられます。

一つは、Transformerのエンコーダ側で制御を行う方法(以降、「エンコーダ制御」)です。エンコーダ制御では、これまでの発話履歴、あるいは直前の発話に対して制御用の特徴量を結合する方法です(図7)。今回の実験モデルでは、Trmモデルは文頭に制御用ベクトルを結合すること、HTrmモデルはContext Encoderの前で対話履歴の文章特徴量と制御用ベクトルを結合することとします。
この手法は、RNN系のモデルでは、翻訳タスクにおける多言語翻訳システム[5]や、対話応答生成タスクにおけるPersonaChat[3]のSeq2seq+Attentionで用いられています。Transformerモデルでも、例えば、知識利用対話システムのWizard of Wikipedia[6]などで用いられています。
以上のように、利用されることの多いエンコーダ制御ですが、「デコーダ層内のSource-Target-Attentionで制御情報を利用した計算が行われているとは言え、本当に推論の上で効率的なのだろうか」という疑問があります。

図7: エンコーダ制御のモデル
そこで、もう一つの方法として考えられるのが、Transformerのデコーダ側で制御を行う方法(以降「デコーダ制御」)です。デコーダ制御は、応答トークンそれぞれの特徴量に対して、制御用の特徴量を各デコーダ層への入力前に加算する方法です(図8)。対話システムへのパーソナリティ付与を行った論文[7]においてLSTMのSeq2seqモデルで行われていた処理をTransformer用に変更したものになります。直感的には、こちらの方が「話者によって単語に対して持っている意味的なイメージが変化する」という状況を想定できそうです。

図8: デコーダ制御のモデル
次ページでは実際にこれらのモデルを実装・評価した結果を紹介します。

【夏季インターン代替イベント開催!】ALBERT勉強会の人気動画ランキングTOP5

$
0
0
例年ご好評いただいているALBERTの夏季インターンですが、今年はコロナ禍のため、断腸の思いで開催を取りやめました。

ですが! 代わりに安全に参加いただける今年ならではの代替企画を実施しました!

230名を超えるデータサイエンティストが在籍しているALBERTでは、毎週2~3回というペースで実施している社内勉強会と、会員制で行っている「データサイエンスカフェ@新宿」を開催しており、情報共有や意見交換などが行なわれています。今回は、その「社内勉強会」と「データサイエンスカフェ@新宿」に、特別に夏季短期インターン合格者の皆さんにもリモートで参加してもらい、現役データサイエンティストとの活発な質疑応答などが行なわれました。

さらに、8月31日~9月11日までの12日間、過去の社内勉強会動画も限定公開し、参加いただいた学生さんの方には限定特典(秘密☆)もご用意させていただき、ご好評のうちに幕を閉じました。
今回は、全部で30件以上公開された過去のALBERT社内勉強会動画の中から、特に参加学生の皆さんから人気のあった5つの動画についてご紹介します!

■人気動画ランキング

全体的に、強化学習、群理論、動画認識等、先進的なトピックに関する関心の高さがうかがえました。TOP5以外にも「一風変わったニューラルネットの使い方」「二重にロバストな推定量の信頼区間について」などの発表に対する視聴回数が多く、従来より一歩先のトピックに関する人気が高いようでした。

・第5位

 「自動運転の技術(認識編)」

自動運転システムには、自己位置推定・地図生成・移動体追跡等、自車と周辺環境の内部表象を生成する「認識システム」と、ルート計画・経路計画・車両制御等、ゴールまでの到達方法を計算する「意思決定システム」がありますが、ここでは前者の「認識システム」の概要を説明しています。


・第4位

 「効果検証入門 セレクションバイアス」

マーケティング等の文脈で、メール配信等の「介入」を実施する群としない群を「恣意的に」分けた場合、二群の購買量の差には「セレクションバイアス」が生じるため、正しい効果にはならないということを、ランダム化比較試験(RCT)との関係を元に説明しています。


・第3位

「動画認識について」

近年ホットな「動画認識」における各タスク(Action Recognition・Action Localization・Action Segmentation・Action Detection)の概要、動画のハンドリング方法、頻出するデータセット・モデルアーキテクチャ等に関して説明しています。


・第2位

「群と CNNs 入門」

画像認識等で使用する畳み込みニューラルネットワーク(CNN)は、画像内の特徴の平行移動を効率的に処理できます。近年、群理論をベースに CNN の構造を改変し、特徴の鏡映・回転等に関しても処理を効率化する研究が盛んであり、ここではその概要を説明しています。


・第1位

「オフライン強化学習」

通常の強化学習では, 訓練の際にエージェントが環境と相互作用する必要がありますが、リアル環境を用いるとデータ収集に非常に時間がかかり、シミュレーション環境を用いると環境のリアリティが低下するという問題が生じます。ここでは、蓄積する過去の相互作用データを元に、オフラインで強化学習モデルを訓練する方法を説明しています。



以上、今回参加者に最も見られたALBERT 社内勉強会の「人気動画TOP5」のご紹介でした。

■参加者の声

また、今回の夏季インターン代替イベントについて、参加後に満足度アンケートを実施しました。その結果、5点満点中3.75という高評価でしたが、一方で、「他のリモート参加者や社員ともっと話を聞きたかった」「実際にいろいろ手を動かしてみたかった」という声もいただきました。

今年は運営側も試行錯誤で手探りしながらの開催でしたが、ALBERTでは新型コロナウイルス感染症への安全対策との両立を図りながら、皆さんからのご意見を参考に、次回開催の改善につなげていきたいと思います。

・参加者コメント(アンケートより抜粋)

“想像していたよりも最先端の解析手法を研究しており、業務に生かそうという雰囲気が感じられたため志望度が上がった。”

“リモートでも体験ができるプログラムや従来のワークショップをオンラインで体験できたらよかったと思った。”

“過去の勉強会を動画として用意されていたので、研究室活動と並行して代替企画に参加することができ、ありがたく感じた。”

■今後の採用活動について

ALBERTでは、2020年10月から2022年新卒学生向けに各種新卒採用イベント出展やオンラインでの自社説明会の実施を予定しています。また、すでに2022年新卒採用の応募受付も9月よりスタートしていますので、ALBERTにご興味お持ちの方は是非ご応募ください!イベント・説明会・選考等にて皆さんとお会いできれば幸いです。

また、2023年新卒以降も新卒採用を行う予定ですので卒業・就業開始年が合わない方は【いつでもエントリー】からエントリーいただけましたら随時インターン・採用のご案内をご送付いたします。

ALBERTでは、22年新卒採用を絶賛募集中です!

今年は、学生の皆さんが安全・安心に参加できる柔軟な採用活動を心掛けていますので、少しでも興味を持たれたら、ぜひこちらからのエントリーをお待ちしています。

2021年度 新卒社員内定式を行いました。

$
0
0

2020年10月1日、ALBERTでは2021年度新卒社員内定式を行いました。 今年はオンラインでの開催となり、11名の内定者の皆さんが参加してくれました。

—————————————————–
< 2021年度 新卒社員内定式 >

◆内定式
 ・役員からの祝辞
 ・内定者自己紹介

◆懇親会
 ・内定者 1on1
 ・ALBERTクイズ

—————————————————–

◆ 内定式

・役員からの祝辞(ビデオメッセージ)
まずは、役員からの祝辞としてビデオメッセージを見ていただきました。
それぞれ、お祝いの言葉に加え、ALBERTが目指す方向性や今後の展望、行動指針、様々なことに挑戦をする大切さや、学生のうちにやっておいた方がいいことについてのアドバイスや応援メッセージなどをお話しました。


代表取締役社長 松本 壮志

代表取締役 経営管理部 担当役員 竹田 浩

ビジネス推進本部 執行役員 本部長 安達 章浩


その後は、各自で準備してきてもらったスライドで一人ずつ自己紹介をしてもらいました。
・内定者 自己紹介
皆さん、それぞれに個性溢れる資料でプレゼンをしていただきました。
ちなみに今年の内定者は、どうやら筋トレ好きな方、ゲーム好きな人、音楽をたしなまれている方が多い印象でした。社内にも同じ趣味の方がたくさんいるので、ぜひ入社されたら仕事面だけでなく趣味の面でもコミュニケーションを深めてもらえればと思います。

◆懇親会

内定式が終わり、少し緊張も取れてきたところで、懇親会では内定者同士での理解を深めてもらうための『内定者 1on1』、様々な角度から会社への理解を深めてもらう『ALBERTクイズ』を行いました。また、事前にお送りした軽食セットをみんなで食べながら、和やかな雰囲気のなか、会話も弾んでいたように思います。
内定者の皆さんにお送りした軽食セット
ロゴ入りのオリジナルクッキーも!

・内定者 1on1
従来だと対面でのグループワークなどを企画しているのですが、今回は Zoomの機能を利用して、内定者同士が1対1で5分間、好きな話題で話をしてもらう企画を準備しました。5分話をしたらインターバルが数分あり、すぐまた次の人と5分間話してもらうという流れで、連続45分間の1on1を体験してもらいました。

もしかしたら2人きりだとなかなか会話が盛り上がらないかも…(いつでも司会がミーティングルームに入っていけるようにスタンバイしてました!)という運営の心配をよそに、事前の自己紹介の内容を会話のきっかけに、開始すぐから皆さんしっかり話ができていたということでした。内定者アンケートでも、ほぼ全員が内定者同士のコミュニケーションがしっかりできて充実していた、との回答をいただきました。
・ALBERTクイズ
ウェブサイトなどには載っていないような内容を集めたもので、かなり難易度の高い問題もありましたが、楽しみながらALBERTの新たな一面を知ってもらうきっかけにしていただけたのではと思います。

◆ 参加者の感想

後日、内定者の皆さんにアンケートを実施しました。
役員からのメッセージや1on1での内定者同士のコミュニケーションについて、充実した時間にすることができたというご意見が多かったです。また、今回が初めてのリモート開催だったこともあり、アンケートから次回以降改善すべき点等も明確になりました。

・アンケートより

“(在学中に)具体的にどういった勉強をすると良いか、また入社後にどうやって成長していくかといった、非常に有益なアドバイスを頂けたと思います。”

“1on1で話す機会をいただいたことで、自己紹介だけではわからない個の特性を垣間見れました。”

“5分という、もうちょっと話したいと思うくらいの時間が初対面としては適切な時間だったと思います。リモートのデメリットもあったとは思いますが、自分は大勢が集まる場での会話が少し苦手なので、個別に部屋が別れていて会話に集中できた点が良かったです。”

“一対一で話すのは対面でも中々得られない機会だと思います。”

“オフラインの懇親会では完全に1on1でお話をする機会はなかったと思うのでその意味で新鮮でした。”

◆まとめ
内定者の皆さんは、この日が顔を合わせるのは初めてでしたが、内定式、懇親会と進むにつれて緊張も取れてきたのか表情もリラックスしてきて、内定者同士での会話が自然に増えていくような様子も見られました。初めて内定式のリモート開催ということもあり、運営側もいろいろと手探りでしたが、リモートならではの手軽さや温度感の共有の難しさなどを内定者の皆さんと一緒に体験することができました。

入社式では本社で直接会えることを期待して、来年4月から一緒にこのメンバーと仕事できるのをALBERT従業員一同、楽しみにしています!

DGX A100 はじめました

$
0
0
こんにちは,先進技術部の松林です。

大学院では天体力学のN体計算を中心に、スパコンを利用した数値計算による研究を進め、銀河中心の巨大ブラックホール形成過程のシミュレーションを行ってきました。 大学院卒業後は大手通信会社の研究所に勤め、GPUなどを用いた大規模データの情報処理の研究を進めてきました。大規模グラフデータの可視化や、因子分解によるスパーステンソルデータの分析など、実装の高速化にも取り組んできましたが、2020年10月よりALBERTに新設された先進技術部∗1に参画しました。
先進技術部では、これまでもComputer Vision 系を中心に様々な案件対応や事業強化の取り組みを進めてきました ∗2が、最近では特に動画分析 ∗3や3次元データ分析 ∗4, ∗5, ∗6に力を入れ、実験環境や計算機環境の整備を進めています。 GPUサーバの計算機環境では、クラウドサービス以外にも案件ごとにスタンドアローンで切り離されたGPU搭載のワークステーションを複数台稼働させ、また先進技術部ではV100を4台搭載したDELL Power-edge C4140 を導入し、最新鋭のマルチGPUサーバの導入も積極的に進めてきました。

そしてこの度、NVIDIAのA100 GPUの発売と同時にDGX A100 の導入を進め、環境設定を終わらせ本格稼働させました。

A100 GPU†1とDGX A100サーバ†2の詳細な紹介はNVIDIAのホームページを参照していただくとして、いくつか特徴を紹介したいと思います。

Ampere アーキテクチャは、Volta世代と比べて半導体製造工程でも微細化が進み7nmのチップで省電力化がさらに進んだことによって、トランジスタもVoltaの倍以上(A100とV100の比較)を積んでいて、様々な機能が追加されています。

A100はV100に対し、直接的な演算能力としては、GPUあたりのFP32のコア数は約1.4倍で 、 クロックはV100より下げているため大幅な増強とはなってはいないのですが、FP16は倍以上の性能を有し、Tensor Coreを使った演算能力は大幅に向上させています。さらにAmpereアーキテクチャから混合精度行列積の計算方法がいくつかアップデートされており、特にStructural sparsityでは疎行列の演算をより高速に行う仕組みを導入しています。

また、DGX-A100はPCI Ex 4.0 により、CPU ⇔ GPUの転送速度も向上しつつ、加えてGPU間はNVLink接続されていることからマルチGPUに最適なGPUサーバとなっています。

表.A100(SXM4)とV100(SXM2)の性能比較
DGXは専用OS(DGX OS)が用意されているため、DGX A100にはUbuntu 20.04 LTSをベースとしたDGX OS Server 5.0 をインストールし、CUDA 11.0 を利用して少しベンチマークを取得しました。実は個人的にDGXシリーズの計算機管理をするのは初めてで、このDGX OSを理解せずにリポジトリを上書きしてドライバやソフトを更新してしまい、デバイス認識ができないなど苦労しました。

しかしながらDGXは主にデータセンター向けのサーバであり、加えて世の中の流れとしてはDockerを使った利用が主流になってきており、サーバ側のソフトは必要最低限のものでメンテナンス重視になるのもわかる気がします。実際NVIDIAが公開しているTensor Core を利用したサンプルコードはほぼすべてDocker を前提としています†3

簡単にCUDAのサンプルコードから matrixMulCUBLAS を走らせ、行列積の計算をさせてみます。対比には弊部署で所有するPower edgeサーバのV100(Tesla V100-PCIE-32GB) を利用します。matrixMulCUBLAS は行列A(640×480) と行列B(480×320) の行列積を求める計算で、比較的高速にチューニングされたサンプルコードです。V100の方はCUDA 10.1 を利用しているため精密な比較はできないものの、おおよその速度は大して変わりません。

V100の実行結果は、
   GPU Device 0: "Tesla V100-PCIE-32GB" with compute capability 7.0
   Performance= 6889.95 GFlop/s, Time= 0.029 msec, Size= 196608000 Ops
と、行列サイズが小さいものの6.9Tflops出ています。これはfloatで計算しているのでFP32での計算結果になります。

対してA100は
   GPU Device 0: "A100-SXM4-40GB" with compute capability 8.0
   Performance= 8754.63 GFlop/s, Time= 0.022 msec, Size= 196608000 Ops
と、8.8TFlops出ています。とはいえそれほど変わらないですね。

次にTensor Coreを使った cudaTensorCoreGemm を試してみます。こちらも同様に行列積演算なのですが、混合演算(Mixed precision)と呼ばれる手法を用いて計算を効率化させています。

行列サイズは4096×4096の行列同士の積を求めていて、V100では、
   GPU Device 0: "Tesla V100-PCIE-32GB" with compute capability 7.0
   Time: 3.139616 ms
   TFLOPS: 43.78

一方でA100では、
   GPU Device 0: "Ampere" with compute capability 8.0
   Time: 1.406624 ms
   TFLOPS: 97.71
と、倍以上の性能を出しています。

これらのサンプルコードは、CUDAの書き方をマスターするために提供されているため、性能を引き出すようなチューニングはされていないのですが、それでも100Tflops近い性能を出せることが分かります。ちなみにcuDNNなどの、NVIDIAからバイナリ提供されているライブラリはかなりチューニングされているようです。


その他、深層学習の大規模なネットワークのベンチマークはNVIDIAが既に公開†3しています。早速、弊部署の山内君がResNet-50の学習のベンチマークを計ってくれたのですが、PyTorchでバッチサイズ512での計測ですが、
   1GPU: 1,300 img/s8GPU:10,200 img/s
という速度が出ており、ほぼスケールしているので性能を十分引き出しています。これはTensor Core を使った性能を活かしており、非常に高速なのが分かります。
ILSVRC2012のような巨大なデータセットでも、100エポックの学習計算も3時間強で終わることになります。また、BERT-Largeのような巨大なモデルの学習も、DGX A100の1台でも3日ほどで計算を終わらせることができ†1, †2、GPU環境が不十分で研究が進まない、という事は解消されます。


今後もDX(デジタルトランスフォーメーション)が進み、人や空間のデジタル化などの技術革新が求められ、我々は巨大なデータセットの分析を行う必要性が出てくると考えています。
例えば自動運転やロボティクスの世界では、点群データなどによる3次元構造データを扱い、動画分析技術では時系列的に変化する画像を扱う必要があります。深層学習において、大量のデータを扱うデータ分析にはデータパラレルという方法を用いた並列分散処理技術が必要になりますが、これからは巨大なデータを大量に扱うために、モデルパラレルとデータパラレルの両面を考える必要があります。

今回導入したDGX A100の性能を使いきるためには8個のGPUをバラバラに使うのではなく、まとめて一つのGPUのように扱う技術が重要です。今回NVIDIA社の最上位機種であるDGX A100を導入し、先進技術部ではそのような技術をさらに磨いていきます。


またALBERTでは、GPUサーバなどの計算機環境を拡充させていくと共に、ドローンや自律走行ロボなどのロボティクス研究環境、VR/ARによるHMI(Human Machine Interface)の研究など、チャレンジングな研究にも取り組むために、引き続き研究環境の整備に投資していく予定です。
先進技術部では我々とともに面白い研究を進めていく研究メンバーを積極的に募集しているので、ご興味のある方はこちらをご覧ください!
 
左から筒井部長,山内,田中,中嶋,松林.

【参考】

滋賀大学データサイエンス学部における演習課題コンテンツ作成及び分析プロジェクトの技術サポートを実施

$
0
0

データ活用で産学連携を支援

2020年1月、滋賀大学彦根キャンパスにて、河本ゼミが事業会社と協力してデータ分析を行うプロジェクトの成果報告会が開催されました。同プロジェクトは2019年10月から約4カ月間で実施されており、今年で2回目となる取り組みです。 昨年に続き、今回もALBERTの現役データサイエンティストでもある、データサイエンス教育部の巣山と長澤がアドバイザーとして参加しました。

滋賀大学は、2017年に日本で初めてデータサイエンス学部を設置し、データサイエンス実践に関する講義を担当するなど、将来のデータサイエンティストの育成に寄与しています。

今回のプロジェクトは、情報提供サービスのポータルサイトを運営する企業から提供された口コミ情報のデータをもとに、学生が自然言語処理等の手法を活用してデータ分析を実施するというものでした。参加学生は4グループに分かれ、それぞれ分析作業やレポート作成などに取り組みます。ALBERTのメンバーは、参加学生が効果的にデータ分析を行えるよう、事前の演習課題作成から携わり、また実際に分析をする際のアドバイザーとして学生のサポートを行いました。

今回実施した「自然言語処理」をテーマとした演習課題コンテンツは、滋賀大学 データサイエンス学部 教授であり、データサイエンス教育研究センター 副センター長の河本先生監修のもと、ALBERTが開発を手がけたものです。

分析プロジェクトに際して、まずは言語処理の入口である心構えのレクチャーから始まり、マーケティング分析などで用いられる構造化データの前処理アプローチとは異なる、自然言語の分析における前処理の方法を学生に体感してもらいました。これは、コンテンツ開発にあたり、正攻法のアプローチの習得に加え、そこでの躓きの経験も学生にとっては今後の大きな学びになるということが、河本先生との共通認識としてあったためです。

データの前処理が完了したところで、次は事業会社の課題解決について検討するフェーズです。「どのような視点で考えるか」を踏まえた上で、いくつかの分析アプローチを実践してもらいました。

また、分析の中間レビュー会には、ALBERTの自然言語分野のスペシャリストである平野も参加。スペシャリストならではのビジネス現場における自然言語処理の活用視点などを学生たちにレクチャーしました。

そうして、約4か月間にわたり各グループがそれぞれの課題に取り組んだ結果、1月の最終報告会では、苦戦を強いられたグループもあれば、正攻法のアプローチでビジネスの課題解決提案までできたグループもありました。さらには、正攻法とは言えないものの、独自のアプローチとアイデアで興味深い提案をしたグループなど様々な結果が報告され、盛況のうちに終了しました。


参加した学生にとっては、技術の習得にとどまらず、多様なデータが社会の課題解決にどう活用されているのかについて、理解を深めるきっかけになったのではと思います。

また、今回は河本先生のご尽力によって、事業会社からのご協力もあり、リアルに近いデータを使って、ALBERTの分析ノウハウを凝縮した自然言語処理の分析演習を提供することができました。

ALBERTは、設立以来蓄積してきたデータサイエンティストの育成ノウハウを提供してデータサイエンティストの育成を支援することで、産学連携の促進や日本社会における高度AI人材の不足解消、さらに各産業の課題解決の実現に向けて、今後も貢献していきます。


◆ 今回の演習を担当したALBERTデータサイエンティストの巣山は、2020年10月に滋賀大学データサイエンス学部のインダストリアルアドバイザーにも就任しています。
株式会社ALBERT  データサイエンス教育部
セクションマネージャー  巣山
・滋賀大学:データサイエンス学部データサイエンス研究科
 インダストリアルアドバイザー



◆ ALBERTでは、数百を超えるAI・分析プロジェクトの実績から培った、独自の実用的な育成支援を数多くの企業様へ行っており、当社のデータサイエンティスト養成講座が経済産業省「第四次産業革命スキル習得講座認定制度」 に認定される等、高い評価を得ています。
また、ALBERTの経験豊富なデータサイエンティストが講師を担当しており、座学・演習を通じて、実践的な視点・考え方やデータ分析の技術を身につけられる講義をご提供しています。

・ALBERTが提供するデータサイエンティスト育成支援講座

ニューラルネットワークによるLiDAR点群データの表現

$
0
0
こんにちは、先進技術部でアルバイトをしている上垣です。
今回はLiDARで計測された3次元点群データを、ニューラルネットワークを用いて表現する方法について紹介します。

ニューラルネットワークを用いて3次元データそのものを表すニューラル陰関数表現(Implicit Neural Representation) についての研究は、現在注目を集めています。本記事では、実際に3次元の計測データとして広く利用されているLiDAR計測の点群データから、ニューラル陰関数表現を獲得する手法について調査と実験を行いました。

はじめに

近年、深層学習で扱う対象が3次元データにまで拡大しています。例えば、3次元データの領域分割や生成、3次元表現獲得といったタスクが存在しています。

おおまかに3次元データと言っても、利用目的によって様々なデータ表現がありえます 。その中でも深層学習への導入の手軽さから、データをニューラルネットワークのような関数の形で表す陰関数表現が注目を集めています。3次元データの陰関数表現を獲得するタスクは、CGでモデリングされたデータなどを使って試みられてきており、現実的なデータへの適用も視野に入りつつあります 。現実的なデータの例として、LiDARによって計測された点群データが考えられます。LiDARは地形計測などでよく用いられる計測方法で、最近では低コストな3Dスキャナーも増えてきています。LiDARによって計測される点群は点群データの中でも特殊なものであり、陰関数表現獲得の研究で扱っている例は少ないです。一方で、LiDAR点群データから陰関数表現を獲得できれば、地形や路面の計測データを用いた分析においても比較的容易に深層学習を利用可能になると考えられます。

3次元データ表現について

SDF

一般的によく用いられる3次元のデータ表現には点群、メッシュ、ボクセル、SDFといった種類があります。
  • 点群: 物体を構成する頂点のみによってデータのおおよその形を表します。
  • メッシュ: 点群に頂点同士の結びつき(面)を加えることでデータを表します。
  • ボクセル: 3次元の空間を細かなブロックに区切り、ブロック単位で物体の領域を表します。
  • SDF(Signed Distance Field;符号付き距離場): 3次元空間の各座標に、そこから最も近い物体表面までの符号付き距離を割り振ることで、距離が0となる部分を表面として表します。座標に距離を割り振る関数もSDF(Signed Distance Function)と表記されます。
これらのデータ表現のうち、メモリ効率やニューラルネットワークとの相性、既存レンダリング手法との相性といった点で、注目を集めているのがSDFです。SDFでは、物体表面の外側にある空間に正の距離、内側にある空間に負の距離を割り当てます。2次元で円形の物体表面について考えると図1の通りとなります。黒線で示した円を表現するため、表面の外側には赤の強さで示す正の距離が、内側には青の強さで示す負の距離が、それぞれ割り当てられています。この符号付き距離場(あるいは割り当て関数)を保存しておくことで、距離が0となる部分を抽出すればデータを復元できるようになります。
図1: SDFによる物体の表現(2次元)
SDFをベースとした表現方法として、座標に対する距離の割り当てをニューラルネットワークで近似する物があります。このようにデータ表現となる関数をニューラルネットワークで近似する手法は「ニューラル陰関数表現」と呼ばれています。3次元データ表現におけるニューラル陰関数表現の詳細については以前のブログ記事“ニューラルネットワークによる三次元表現手法”をご覧ください。

ニューラル陰関数表現は当初、新しいデータへの汎化を目的とするエンコーダ・デコーダ型の生成モデルにおいてデコーダとして利用されていました[1][2]。これらの手法では、エンコーダで物体の大まかな形状を表す潜在特徴量を学習します。同時に、デコーダでは潜在特徴量と座標とを条件として、その座標における最も近い表面までの距離を学習します。これによって、物体形状の潜在特徴量を元にSDFを介した3次元物体生成を可能としていました。
一方でSIREN[3]やOverfitSDF[4]では、既存の機械学習手法のように新しいデータへの汎化を目的とするのではなく、一つのデータポイントについて詳細な学習をするという少し変わったタスク設定をしています。一つのデータポイントが持つ座標と距離の対応関係をもとにニューラルネットワークによるSDFの近似を行うことで、データ内の空間に対する汎化が期待できます。これにより、データ利用時に解像度に縛られることなく取り出せるというメリットがあります。加えて、ストレージ上の容量面での圧縮も期待できると言われています[4]。
また、3次元データに限らず画像の陰関数表現獲得においても、SIRENモデルを用いた画像圧縮が行われており、条件によっては非常に小さい容量でもJpegに並ぶ圧縮が可能であると言われています[5]。

このような3次元の陰関数表現からデータを取り出す方法として、主に二つの方法が考えられます。
一つは、3次元のままのデータとして取り出す方法です。物体を含む空間の座標をモデルに入力し、得られた距離の絶対値に閾値を設けて点群やメッシュとして復元する方法です。閾値は入力座標のスケールに合わせて0に近い値に設定します。
もう一つは、ある視点から見た際の2次元画像として取り出す方法です。この場合にはレイマーチングというアルゴリズムが用いられます。空間における視点の位置と視線の方向をそれぞれ定めた上で視線を飛ばし、視線の先に物体表面があるか否かを確認し描画するアルゴリズムです。視線を飛ばす処理では、視点から見ている先に向けてその位置におけるモデル出力の距離分だけ視線を進め、物体表面にたどり着くか一定回数進むまで確認します。

点群データからの陰関数表現学習

モデルが前提としているSDFには「表面で囲まれた閉鎖的な空間を持つ(=表面を挟んで正と負の距離を持つ)データでなければ表現できない」という問題点があります。実際の3次元データには必ずしも閉鎖的な空間がある訳ではありません。例えばLiDARのように、ある方向から光を当てた反射によって対象を計測する手法では、得られるデータは非常に平面的な点群データです。そして、平面的な点群データから計算できるのは符号を持たない距離(Unsigned Distance)になります。符号を持たない距離を2次元で考えてみると、以下の図2のようになります。 
図2: 平面的な物体と符号を持たない距離場(UDF) 
SDFを想定した手法で閉鎖的な空間を持たないデータや符号を持たない距離を扱う問題点として、既存手法の学習がうまくいかないことや、出力アルゴリズムのレイマーチングが収束しないことが考えられます。この問題に対して、SAL[2]では符号を持たない距離を教師データとして符号付き距離を学習するように、ニューラルネットワークモデルを設計しています。しかし、SALは最終的な出力でSDFに頼るため、点群からの学習はできても平面データへの適用は難しいです。NDF[6]では、符号なしの距離場(UDF; Unsigned Distance Field)における汎化的な表面構成モデルの実装や描画アルゴリズムの改良を提案しています。NDF論文から、ニューラルネットワークの出力が符号を持たない距離であっても、描画アルゴリズムに少し改良を加えることでデータを復元できることがわかります。

以上の背景を踏まえて以降の実験では、符号付き距離の算出が難しいLiDAR計測の点群データから、一つのデータポイントについてニューラル陰関数表現を獲得する方法を検討しました。 

実験

使用データ

データには静岡県ポイントクラウドデータベース[7]のものを使用しました。今回の実験では、結果の視認のしやすさから開けた街道の1サンプル(図3)を元データとしています。
図3: 使用した点群データ[7] 
以降、見やすさのために点群可視化時には色情報に対してヒストグラム平坦化を行います(図4)。 
図4: 点群データ[7]に対しヒストグラム平坦化を行なったもの 

使用モデル: SIREN

これまでSDFを近似するニューラルネットワークモデルには活性化関数をReLUにしたMLPが多く使われてきました。それに対してSIREN[3]モデルでは活性化関数をSin関数に変更することで、画像や音声、3次元空間など信号として扱えるデータについてReLU MLPよりも詳細な表現を得られると言われています。

\mathbf{y}^{(l)} = \sin (\mathbf{W}^{(l)} \mathbf{y}^{(l-1)} + \mathbf{b}^{(l)})

SIRENモデルでは各層の活性化関数をSin関数としているため、その導関数もSin関数として表せます。 

\sin'(\mathbf{y}^{(l)}) = \cos (\mathbf{y}^{(l)}) = \sin (\mathbf{y}^{(l)}+\frac{\pi}{2})

このため、SIRENモデルの導関数もまた表現力の高いSIRENとなり、詳細な表現獲得が可能となります。

オリジナルのSIRENモデルによるSDF学習では、境界値問題を解くために損失関数に制約を与えて最適化を行っています。

\displaystyle L_{sdf}= \int_{\Omega} \lVert \lvert \nabla_{\mathbf{x}} \Phi(\mathbf{x}) \rvert - 1 \rVert d\mathbf{x} + \int_{\Omega_0} \{ \lVert \Phi(\mathbf{x}) \rVert +(1 - \langle \nabla_{\mathbf{x}} \Phi(\mathbf{x}) , \mathbf{n}(\mathbf{x})\rangle)\} d\mathbf{x} + \int_{\Omega \backslash \Omega_0} \psi(\mathbf{x}) d\mathbf{x}

\psi(\mathbf{x}) = exp(-\alpha \cdot |\Phi(\mathbf{x})|) , \alpha \gg 1

上の式についてそれぞれの項は順に
  1. 全ての点xにおける勾配の大きさは1とする 
  2. 表面上の点xの距離\Phi(\mathbf{x})を0とし、xにおける勾配は法線ベクトルn(x)に合わせる 
  3. 表面以外の点xにおける距離\Phi(\mathbf{x})は0とならない 
の制約と対応しています。

この方法は点群と法線ベクトルが揃っている場合には前処理なく最適化できます。しかし、今回利用したデータでは収束しませんでした。これは、そもそも学習データに閉鎖的な空間がないことに加え、密な点群データに対して自動で法線ベクトルを算出したため、入力データにおけるノイズが大きくなり、最適化できなくなったと考えられます。

そこで、前述の点群データに対してある程度の解像度を持つ学習用グリッドとの符号なし距離を算出し、直接教師データを作成する方法を採用しました。ただし、元データの点群全てに対して学習用グリッドとの距離を求めるのは効率的でないため、元データに関して正規化後にボクセル重心を利用したダウンサンプリングを行っています。具体的な教師データの算出は、学習用グリッドに含まれる各点xについてダウンサンプリングした点群Sとの最短距離を以下の式で計算しました。

f(\mathbf{x}) = \underset{\mathbf{y} \in S}{\min} || \mathbf{x} - \mathbf{y} ||_2

実験のはじめの段階ではボクセルサイズを0.001として、6,168,095点であった元データを282,316点まで削減して300^3点のグリッドとの距離を求めていましたが、次に述べるような理由からボクセルサイズを0.004、削減後のデータ数は23,383点、グリッドの解像度は500^3としました。理由としては、グリッド解像度による精度への影響が大きく、距離計算の効率を考えてバランスを取ったためです。なお、ボクセルサイズは0.004程度までは元データの情報を大きく損なわないことを目視により確認しています。

損失関数も以下の式で表される符号の影響を除いたMAEに変更し、最適化手法にはAdamを使い、学習率1e-5で300epoch学習しました。

L_{UDF} = | |f_\theta(\mathbf{x})| - f(\mathbf{x}) |

f_\theta(\mathbf{x})は座標xを入力とした場合のニューラルネットワークの予測距離で、f(\mathbf{x})は座標xにおける正解距離になります。

学習データのサンプリング

グリッドなどの空間に落とし込んだデータからSDFを近似する場合、一般的に表面への距離が近い点を多く学習させた方が表面の再現精度は高い傾向があります。そのため、グリッドではなく球からのサンプリングや、表面への距離によってペナルティを加える方法などが考えられます。

事前に別データ[8][9]を用いてSIRENモデルでこれらのサンプリングを試した結果、表面の精度は上がった一方で、学習データの範囲外にある空間に表面が出現しました(図5)。そこで、今回の実験では球からのサンプリングをベースに、学習範囲から大きく離れた点(点群座標最大値+大きさ1以上のベクトル)を距離1として、ミニバッチサイズ8192点に8点を加えて学習することで対応しました。
図5: 学習に用いたうさぎのデータ[8][9]と表面からの距離に応じて学習頻度にペナルティを与えたSIRENモデルの出力 

モデル分割

LiDARによって計測された点群データは規模が大きく細かい物体を含むため、単体のSIRENモデルでは学習しきれない可能性があります。そこで、点群に対して意味的な領域分割を行った上で、各領域に対するSIRENモデルを学習しました。

今回の実験で使用するような地形的な点群データでは、建物などに対して地面の比率が高い一方で、学習難易度としては地面よりも建物の方が高いことが考えられます。データの比率という点で建物は外れ値と見做せるため、open3dのRANSACアルゴリズムによる平面検出を用いて領域分割を行いました。今回の実験では目視で確認をしながら、距離の閾値を0.005として分割しています。学習難易度の違いについては、分割領域ごとにモデルのパラメタ数に差をつけることで対応しました。単体のSIRENモデルではモデルの層数を10、次元数を1024として、パラメタ数は10,501,121となりました。一方で領域分割を行なったモデルでは、地面のモデルは層数10、次元数512に、建物のモデルは層数12、次元数720にそれぞれ設定し、合計のパラメタ数は10,419,522となりました。地面と建物のモデルパラメータは比率でおよそ1:3としています。 

点群復元アルゴリズム

モデルからの点群復元には、NDF[6]の点群復元アルゴリズム(図6)を利用しました。 
図6: NDFの点群生成アルゴリズム[6] 
上記のアルゴリズムでは
  1. ある程度の解像度を持つグリッド(BB)をモデルに与え、モデルによる予測距離f(\mathbf{p})\delta以下である点P_{init}のみを残します。
  2. 不正確なUDF予測に対応するため、P_{init}に対してnum_steps回だけ勾配を利用した座標修正を行います。この時点では距離に基づいて最低限の点群が生成されています。
  3. より密な点群を生成するためにP_{init}の各座標に対して、\frac{\delta}{3}を分散としたガウス分布サンプリングを足し合わせて水増しを行い、点群P_{dense}を生成します。
  4. P_{dense}についても勾配を利用した座標修正をnum_steps回行います。
これにより初期のグリッド解像度は低いまま密な点群を生成でき、メモリ効率が高まります。ただし、本実験では勾配による座標修正をすることでデータの詳細が損なわれたため、座標修正は行わず点群水増しのみを行いました。各パラメータは最初に与えるグリッドのサイズを500^3点、\deltaを0.004、点群の水増し回数を10回として生成しています。また、以降で表示する生成点群の色には、各点の元データにおける最近傍の色を利用しています。

評価方法

評価指標には、学習データセット全体に対する符号の影響を除いたMAEロスに加え、予測点群と教師点群とのChamfer Distanceを求めています。Chamfer Distanceは、2つの点群同士の近さを求める評価指標であり、以下の式で求められます。

CD(S_1, S_2) = \frac{1}{|S_1|} \underset{\mathbf{x} \in S_1}{\sum} \underset{\mathbf{y} \in S_2}{\min} || \mathbf{x} - \mathbf{y} ||^2_2 + \frac{1}{|S_2|} \underset{\mathbf{x} \in S_2}{\sum} \underset{\mathbf{y} \in S_1} {\min} || \mathbf{x} - \mathbf{y} ||^2_2

Chamfer Distanceは遠さの指標なので、一致している場合で0となり、数値が大きいほど正解に遠く、小さいほど正解に近くなります。

結果

単一のSIRENモデルで学習した場合(単体モデル)と分割領域ごとに学習した場合(領域分割モデル)それぞれの結果は表1の通りとなりました。

表1: 各モデルの評価
 MAE Loss   Chamfer 
 Distance 
 モデル保存容量 
(MB)
単体モデル 0.00019 0.0032 41
領域分割モデル 地面 0.00016 0.0031 11
建物 0.00020 30
結果として、符号を用いないMAE Loss(各領域の平均値で検討)、Chamfer Distance共に、大きな差はありませんでした。モデル保存容量に関して、元データの点群のみをnumpyのfloat32配列としてテキストに書き出した場合では465MBだったので、今回の実験結果では容量的に1/10程度の圧縮をしたことになります。

実際の復元結果を図7、図8に、復元結果と同じ方向から見た元データを図9に示します。 
図7: 単体モデルでの復元結果 
図8: 領域分割モデルでの復元結果 
図9: 復元結果と同じ方向から見た元データ[7] 
復元結果について、地面はそれなりに再現できている印象を受けますが、建物(壁、電線、電柱など)は元データの細かさに対して荒い印象を受けます。今回の実験では、この難易度の違いを想定して領域分割モデルを学習したのですが、数値による評価から分かる通り、目立った改善はされませんでした。可視化した印象として、領域分割モデルよりも単体モデルの方が電線や建物などの詳細が取れているように見えます。この点については、領域分割をした内の建物モデルにもう少しパラメタ数を割いても良かったかも知れません。

一方で、元データの詳細な特徴については、図10における確認ポイントを各モデルの再現と見比べることで一部は再現できていることがわかります(表2)。表2では詳細を比較するため、単体モデルにおいて学習データのグリッド解像度を500^3ではなく300^3で200epoch学習した場合のデータも載せています。
図10: 元データ[7]における確認ポイント 


表2: 各モデルにおける詳細情報
確認ポイント① 確認ポイント②
元データ
単体
モデル
領域分割
モデル
単体
モデル
(300^3)
確認ポイント①では2本の電線が並走していますが、この特徴は単体モデルでは繋がることなく再現できています。これは、学習データのグリッド解像度を上げた際に見られるようになったもので、学習データを300^3の解像度としていた時には、一つの面のように繋がっていました。
また、確認ポイント②はLiDAR計測時の影となって点群が生成されなかった部分ですが、これについてもグリッド解像度をあげたことで単体/領域分割の両モデルで再現ができています。ただし、より細かなLiDARの影(図9や図10で地面が消えている部分など)は再現できずに補間されており、これらを再現するためには500^3の解像度よりも大きな解像度が必要であると考えられます。実際に実験をした感覚として、500^3よりも解像度をあげる場合には、学習時間やメモリ使用率の観点でより効率的な方法の検討が必要になると思います。

それぞれの確認ポイントについて、必要となる部分が場合によって異なる可能性も考えられます。例えば、電線のように細かい建物の情報が判断材料となる場合には、モデルによる補間は望ましくない一方、多少荒くてもLiDARの影を残したくない場合にはモデルによる補間は有効かも知れません。今回の実験で試した方法のように領域ごとにモデルを分割しておくことで、それぞれで学習データのグリッド解像度を変更でき、領域ごとに補間するか否かの選択ができると考えられます。 

まとめ

今回の実験では、LiDAR計測の点群をニューラルネットワークで表現するタスクについて、具体的なデータを利用して探索的に実験を行いました。結果として、条件統一による比較を行なった単体/領域分割の2モデル間では大きな差は見られませんでしたが、Lidar点群からニューラル陰関数表現獲得を行う場合の工夫について検討できたと思います。例えば、SIRENモデルによるニューラル陰関数表現では、学習範囲外に表面が生成されないような学習サンプリング手法が必要であることが分かりました。また、SIRENのように補間能力の高いモデルで詳細な表現を得ようとする場合には、「学習グリッド解像度を変化させる」などによって、モデルが補間する距離/しない距離を明確に学習させる必要があることも分かりました。今回の実験でわかったことなどを元に手法をより洗練させていくことで、機械学習における3次元の路面データや地形データなどの利用がより手軽にできるようになるのではないかと思います。

ALBERTでは、様々な専門的バックグラウンドを持つリサーチャー・アナリストを募集しています、詳しくは採用ページをご覧ください。

参考文献

  1. [1] Jeong Joon Park, Peter Florence, Julian Straub, Richard Newcombe, Steven Lovegrove: “DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation”, Proc. the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2019, pp. 165-174.
  2. [2] Matan Atzmon, Yaron Lipman: “SAL: Sign Agnostic Learning of Shapes From Raw Data”, Proc. the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2020, pp. 2565-2574.
  3. [3] Vincent Sitzmann, Julien N.P Martel, Alexander Bergman, David Lindell, Gordon Wetzstein: “Implicit Neural Representations with Periodic Activation Functions”, Proc. NeurIPS, 2020.
  4. [4] Thomas Davies, Derek Nowrouzezahrai, Alec Jacobson: “Overfit Neural Networks as a Compact Shape Representation”, arXiv: 2009.09808v2.
  5. [5] Emilien Dupont, Adam Goliński, Milad Alizadeh, Yee Whye Teh, Arnaud Doucet: “COIN: COmpression with Implicit Neural representations”, arXiv: 2103.03123, 2021.
  6. [6] Julian Chibane, Aymen Mir, Gerard Pons-Moll: “Neural Unsigned Distance Fields for Implicit Function Learning”, arXiv:2010.13938, 2020.
  7. [7] 静岡県ポイントクラウドデータベース, https://pointcloud.pref.shizuoka.jp/, 2021/03/10閲覧, CCライセンス 表示 4.0 国際.
  8. [8] Qingnan Zhou, Alec Jacobson: “Thingi10K: A Dataset of 10,000 3D-Printing Models”, arXiv:1605.04797, 2016.
  9. [9] Tom Burtonwood: “The Rabbit In the Hat Trick”, https://ten-thousand-models.appspot.com/detail.html?file_id=441708, 2014, 2020/03/10閲覧.

2021年4月、ALBERTに10名の新入社員が入社しました。

$
0
0
※残念ながら当日の体調不良により1名欠席のため、新入社員9名が参加しました。
また撮影は、感染予防対策を講じたうえで実施しました 。

2021年4月、10名の新入社員がALBERTの新しい仲間として加わりました。
最初の2日間は感染予防対策を万全にした新宿オフィスにて新入社員を迎え、社長から新入社員へ激励のメッセージや同期同士のコミュニケーションを深めるワークショップなどが行われました。

◆お祝いのメッセージ


代表取締役からビデオメッセージがあったほか、松本社長からは新入社員に直接メッセージが送られました。

人を動かすために必要な要素として、古代ギリシャの哲学者アリストテレスが提唱した「ロゴス・パトス・エトス」を引用して、
「皆さんは既に“ロゴス”(logos:論理性)は身につけている。ぜひこれからの社会人生活において、そしてこのALBERTで、(海外のエンジニアのように)営業マンかと思うくらい自分たちの技術を熱く語れるような“パトス”(pathos:情熱、共感性)、それから、この人の言うことなら信頼できると思われるような“エトス”(ethos:人間力、信頼性)を身に着け、いい意味で周りを巻き込みながら働けるようになっていってもらいたい」
といった激励のメッセージを送り、新入社員の皆さんも真剣な眼差しで話を聞いていました。

◆ 自己紹介

同期メンバーで話をするのはオンライン内定式以来ということで、まずは改めて自己紹介をしてもらいました。前日あまり寝られなかったという人や実は先日結婚しました!なんてご報告も飛び出しました。
また、自分と相手との共通点を知ってお互いの理解を深めてもらう時間を設けました。

2日目は、さらにお互いの理解を深めてもらうため、コミュニケーション型のワークショップを実施しました。

・価値観を知るカードゲーム

それぞれ大事に思う価値観が書かれたカードを手元に残しながら、カードを引いたり捨てたりします。
自分の価値観と合わない場合、また手元にあるカードの方が自分にとってより大事な場合には、カードをどんどん場に捨てていきます。

最後に残った5枚のカードが示す自分の価値観や考え方を共有することで、相手のことを知り、また人と違う自分らしさを改めて知るきっかけになったのではと思います。

・ペーパータワー作り

シンプルに、制限時間内に決められた枚数のコピー用紙を使ってより高いタワーを作ったチームが勝ちです。
主体的にアイデアを出したり、メンバーの意見を尊重したり、役割分担して時間や紙をどう有効活用するか考えたりなど、それぞれのチームが目標達成に向けて様々なアプローチでタワー作りに取り組みました。

何度か回を経るうちに、前回の反省を踏まえてさらに改善しながら取り組む様子や、最後の回での集中力・団結力はとても印象的でした。

◆人事担当者より

今年も新型コロナウィルスの影響により、入社3日目からオンライン研修となりました。
迎える側として、彼らの不安や心細さを少しでも解消したく、入社2日間は感染予防に努めながら、同期同士の関係性づくりに焦点を当てワークショップを行いました。その甲斐もあり、現在はお互いにサポートし合いながら学んでいる様子です。さらに研修期間中は先輩社員との交流企画を設けています。
人事では、彼らがこれからも安心してALBERTで働き成長できるようサポートを続けていきたいと思います。



約2か月間の研修を経たあと、新入社員はデータサイエンティストとして各部署に配属されます。ぜひ、今後の活躍にご期待ください!

ABMsの入門と「An Agent-Based Model of the Local Spread of SARS-CoV-2: Modeling Study」の紹介

$
0
0
こんにちは、プロジェクト推進部のStaffiniです。
去年10月から、東京大学の大学院工学系研究科バイオエンジニアリング専攻で客員研究員として、計算疫学やヘルスケアのためのAIアプリケーション等を研究しています。

今回は、新型コロナウイルスに対する対策の有効性を解析するエージェントベースモデル(ABM)を用いて分析を行い、『JMIR Medical Informatics』 というジャーナルで2021年4月にパブリッシュされた論文「Agent-Based Model of the Local Spread of SARS-CoV-2: Modeling Study(SARS-CoV-2の局所感染エージェントベースモデル:モデリング研究)」(https://medinform.jmir.org/2021/4/e24192)を紹介します。

初めに

この章では論文の内容を紹介する前に、前提となる ABM および疫学におけるABMの適用性について説明します。

ABMは、複雑なシステムをシミュレートするためのアプローチの一つです。広く活用されるようになったのは比較的最近のことですが、エージェント同士が相互作用し、経験を学習しながら、行動を環境に適応させるシステムをモデル化できるという特性から、現在では重要な役割を果たしています。

簡単にまとめると、ABMは以下の3つのコンポーネント(要素)で構成されています[1]
  • エージェント
    エージェントは、エージェント同士が相互に、及びそれらが存在する環境と相互作用することによって情報を交換するモデル内のエンティティ(実体、存在)として考えることができます。 エージェントは、動物、個人、組織などを表すことがあります。また、エージェントはプログラマーによって定義されたルールに従って動作します。各エージェントには、固有の特性であるプロパティ(行動目的など)があり、それによってエージェントが属するグループを決定します。例えば、エージェントごとに健康な人、またはウイルスの陽性者を表すことができます。

  • 環境
    エージェントが存在する空間です。

  • 時間
    通常、シミュレーションはいくつかの離散時間ステップ(ticks)で構成されます。 各ティックで、エージェントはルールに従って動作し、環境が動的である場合は更新されます。

エージェントの定義は一意ではありませんが、エージェントはいくつかの本質的な特性を備えている必要があると一般に考えられています[2]
  • 自律性
    エージェントは、環境や他のエージェントとは独立して動作します。 エージェントの行動は、環境からの情報とエージェント間の関係に影響されます。 出現する全体パターンは調整されていませんが、エージェント同士の相互作用から始まり、bottom-up(つまり、エージェント同士の単純な個々の相互作用は、より複雑な全体像を形成するということ)から出現します。

  • 相互依存
    エージェントの相互依存は、直接的には隣接するエージェントの動作の模倣などのメカニズムを通じて、また間接的にはエージェントの行動に影響を与える環境の変化を通じて、発生する可能性があります。

  • シンプルさ
    単一のエージェントの動作を決定するルールは比較的単純です。また、モデルから得られる全体的な結果は、エージェント間における複数の相互作用の結果です。

図1は、ABMの要素を定型化された方法で表したものです。

図1 ABMの要素 [3] 。

またABMは、実験が不可能な状況や、非常に費用がかかる状況(例えば、社会保健政策の効果)において使用できる便利なツールでもあります。

疫学は、ABMを利用した最初の分野の一つでした。 ABMは、いくつかの理由から、エピデミックと感染症の蔓延をシミュレートするのにも効果的なツールです [4,5] 。特に、エージェントベースモデルが異種の状況とエージェントの相互作用をキャプチャできるため、ウイルスの発生を全体的に把握できます [6]。 さらに、伝統的な疫学は個人が住む環境を直接考慮していないです。これらの要因は、ウイルスの伝播において重要です。 エージェントシミュレーションにより、これらの重要性の高い課題を克服できます。

さらに、ABMには、モデル展開の前にvalidation(検証)とcalibration(較正)というフェーズがあります。

モデルの「検証」は、モデルが有効で信頼できる結果を生成できるかどうかを判断するプロセスであり、それにより、モデルは分析の基礎として機能します[7]。検証のプロセスは、モデルが実際のシステムにどれだけ近づいているか、およびモデル開発の当初の目標を満たしているかどうかを評価するのに役立ちます。

検証と共に、モデルのパラメーターを決定するのが「較正」のプロセスです。具体的に較正とは、パラメーターの値の範囲を特定し、実際のデータに合うようにモデルを微調整します。 これは、最適なパラメーターをつけるための最適化方法を使用して行われます。

同時に、検証と較正の両方が、ABMの課題の一つです[8]

図2 ABMの一般的な検証と較正のプロセス [9] 。

ABMは、その構築方法により、定性的な観点からは良好な結果を得ることができますが、定量的な結果を正確に取得するためにはお勧めできません。ABMの特徴は、エージェントが様々な状況に直面し各々動作するため、各シミュレーション結果がそれぞれ異なるという点です。 検証に合格したABMは、プロセスの定性的な再構築により忠実に動作しますが、定量的な結果は類似しているものの、結果はシミュレーションごとに異なります。

 論文の内容

この論文のテーマは、新型コロナウイルスの蔓延が政府の政策とどのように関連しているかを研究し、様々な政策が公衆衛生にどのような結果をもたらしたかを分析することです。
特に、4か国(イタリア、ドイツ、スウェーデン、ブラジル)から提供された公式データを利用し、各国政府が実施した対策から、様々な封じ込め対策が時間の経過とともに及ぼす影響を調査するため、ABMを構築。新型コロナウイルス症例の総数、集中治療室(ICU)のベッド占有率、回復率と致死率など、さまざまな変数に対する封じ込め措置の影響を調査しました。

構築したモデルは、いくつかの開始変数を変更するオプションもあり、政策(例えば、国境を閉鎖したままにする、またはICUベッドを増やす)が感染の拡大に及ぼす影響を調査することができました。

また、今回はNetLogoを使用してモデルを構築しました。目標は、致死率と病院への圧力の両方の観点から、的を絞った対策を通じて、パンデミックの蔓延によって引き起こされる被害をどのように制限できるかを示すことでした。

図3は、イタリアのシミュレーションの途中で、エージェントが相互作用する環境を示しています。また、各色が示すエージェントは以下の通りです。

・白:健常者
・赤:ウイルス保因者
・オレンジ:インキュベーション(潜伏期間)中のウイルス保因者
・灰色:免疫保持者
・緑:無症候性キャリア(健康保菌者)
・青:入院中の人
・水色:自宅で隔離されている人
・黄色:死亡者

図3 エージェントが相互作用する環境。

図4は、相互作用メカニズムの簡略化されたフローチャートです。
興味がある方は、元の論文に詳細な説明がありますのでご覧ください[10]

図4 モデルの相互作用メカニズムの簡略化されたフローチャート。

エージェント間の相互作用からは、さまざまな変数の進化を観察できます。
例えば、図5-aでは、イタリアのウイルスの保因者、入院している人、自宅で隔離されている人、無症候性キャリアの数値を示しています。また図5-bでは、あるシミュレーションについて、イタリアの伝染推移を表しています。

図5 (a)イタリアのシミュレーション結果:ウイルス保因者(赤)、入院している人(青)、自宅で隔離されている人(黒)、無症候性キャリア(緑)の数字。(b) イタリア伝染の推移。

前述のように、今回提案したABMモデルの強みの1つとして、開始条件を変更できる点があります。 例えば、R0インデックスとReインデックスの進化を、国境を閉鎖した場合とそうでない場合の両方で比較するシミュレーションを実行しました。図6は、2つのインデックスの変化を示しており、伝染値がなくなると新しい感染は発生せず、境界は閉じたままであることを示しています。

図6 (a)イタリアのR0とReインデックスの変化(国境が開いたままの状態)。(b) イタリアのR0とReインデックスの変化(国境を封鎖した状態)。

考察

・イタリア
イタリアのシミュレーションでは、スウェーデンやブラジルのシミュレーションと比較して新型コロナウイルス症例の総数が少なく、政策として採用された「封じ込め対策」が成功したことを示しています。入院患者と隔離患者の数は、引き続き抑制されているようです。

全体として、これによりR0とReが大きく変動し、感染数がわずかに増加すると、インデックス値が大幅に増加します。さらに、イタリアのシミュレーションでは、無症候性キャリアの数がゆっくりと減少していることが示されています。
検出が難しい無症候性キャリアの数がゆっくりと減少するため、ウイルスは存在し続けます。これは、新たな感染の可能性が高まっていることを示しており、2020年7月1日時点で実施されている封じ込め措置の勧告が継続された方がいい可能性もあります。

さらに、封じ込め措置の実施を継続することは、免疫を持つエージェントが比較的少ないという事実によって強化されています。私たちのモデルは2020年6月末に実装され、その時点で入手可能な統計データを使用しました。モデルの推測データによると、国境間移動の再開と人々の自由な移動により、感染者の数は再び増加すると示しています(それにより、国の封じ込めの取り組みが部分的に無効になります)。


・ドイツ
ドイツの場合、モデルは伝染のピークとその漸進的な下降を分析し、今後数か月の間に起こりうる進展を予測することができます。

ドイツのシミュレーションでは、感染者の数が比較的少なく、R0インデックスとReインデックスが大きく変動している状況が示されています。感染率が低いと、致死率が非常に低くなります。ただし、免疫力のある人の割合も低くなります。

イタリアのシミュレーションと同様に、陽性症例の数が少なく、免疫者の割合が低いのは、新型コロナウイルスの蔓延を抑えることを目的とした政策実施の結果です。全体として、ドイツのシミュレーションの結果は、入院および隔離に関して管理されている状況下において、イタリアで得られた結果とそれほど変わりません。
さらに、イタリアについては、無症候性キャリアの症例が依然として記録されています(1%)。これは、新型コロナウイルスが依然として集団のなかに存在し、封じ込め措置が緩められた場合にウイルスが拡散し続けるリスクがあることを示しています。モデルは、2020年6月末のデータから始まり、この無症候性キャリアの人々の割合が、新たな発生の形成とウイルスの比較的新たな蔓延につながると正しく予測していました。


・スウェーデン
スウェーデンのシミュレーションは、最初に記録されたケースから、1年後にはほぼ制御されていない状況を示しているため、イタリアやドイツで得られたものとはまったく対照的です。

これらの不一致は、スウェーデンの公衆衛生局によって開始された封じ込め措置が、比較的限定されていたことが原因である可能性が最も高いと言えます。その理由として以下のことが考えられます。

まず、シミュレーションを通じてR0とReの両方が高い値を維持し、R0が1を下回ることはありません。次に、シミュレーションの終了時に、新型コロナウイルス症例の総数はイタリアやドイツよりもはるかに多くなります。 多数の入院および無症候性の症例が特に懸念されています。 第三に、回復した症例の割合(60%)は、他のどの国のよりも低く、 第四に致死率(18.4%)が、ドイツ、イタリア、ブラジルで得られた致死率よりも高くなっています。


・ブラジル
モデルは、分析された4か国の中でブラジルが新型コロナウイルスの症例数が最も多いと予測しています。 これはおそらく、イタリアやドイツとは違い、スウェーデンの決定政策と類似しているブラジルの決定政策によるものです。 その結果、ブラジルとスウェーデンは分析においても多くの類似点がありました。

特に、ブラジルの総症例数はスウェーデンの症例数に類似しており、イタリアやドイツよりもはるかに多く、より制限の少ない封じ込め措置を採択した結果であると想定されます。 さらに、R0とReは強い変動を示さず、シミュレーションの間、R0は1を超えたままです。

一方で、制御不能と見なされる可能性のある状況にもかかわらず、ブラジルはスウェーデンよりも著しく低い致死率を示しています(ブラジル10.2%に対してスウェーデン18.4%)。 これは、高齢者の割合が低さが原因である可能性が最も高いです(スウェーデン19.8%に対してブラジル8.6%)。さらに、 ブラジルとスウェーデンのもう1つの注目すべき違いは、回復率(スウェーデン60%に対してブラジル74%)です。これも、おそらく人口統計上の年齢分布の違いによるものと考えられます。

結論

シミュレーションの結果、3つの主要な結論につながります。
第一に、フェイスマスクの強制使用や社会的距離の実施を含む厳格な封じ込め措置により、新型コロナウイルスの症例数が減少します。
第二に、ICU病床の数は、致死率を減らすための重要な指標です。
第三に、集団免疫に到達することはできないため、封じ込め措置を緩めることによって集団免疫に到達することを目的とした国家戦略は避けるべきである、ということです。

さいごに

この研究のきっかけは、新型コロナウイルスの蔓延の最初の数か月で、最も効果的な封じ込め手段が何であるかについての不確実性から生じました。 さまざまな国 (検討対象の 4 か国など) が異なる対策を採用していたので、これらの対策の有効性を評価するためのモデルを構築してみたいと思いました。
近頃のワクチン接種キャンペーンが果たした役割を考慮して、この研究を拡張することは面白いと思います。

最後に、ALBERTでは一緒に切磋琢磨できるデータサイエンティストを募集しています!
興味をお持ちいただいた方は、こちらまでお問い合わせください。



参考文献

[1] Macal C.M., and North M.J.: “Tutorial on agent-based modelling and simulation”, Journal of Simulation 4, 2010, pp. 151-162.
[2] Macy M.W. and Willer R.: “From Factors to Actors: Computational Sociology and Agent-Based Modeling”, Annual Review of Sociology 28, 2002, pp.143-166.
[3]Turrell A.: “Agent-based models: understanding the economy from the bottom up”, Quarterly Bulletin 2016 Q4, Bank of England, 2016.
[4] Eubank S., Guclu H., Kumar V.S.A., Marathe M.V., Srinivasan A., Toroczkai Z., Wang N.: “Modelling disease outbreaks in realistic urban social networks”, Nature 429(6988), 2004, pp.180-184.
[5] Bobashev G.V., Goedecke D.M., Yu F., and Epstein J.M.: “A Hybrid Epidemic Model: Combining The Advantages Of Agent-Based And Equation-Based Approaches”, Proceedings of the Winter Simulation Conference, 2007.
[6] Hunter E., Mac Namee B., and Kelleher J.D.: “A Comparison of Agent-Based Models and Equation Based Models for Infectious Disease Epidemiology”, AICS, 2018, pp.33-44.
[7] Berger T., Goodchild M., Janssen M.A., Manson S. M., Najlis R., and Parker D. C.: “Methodological considerations for agent-based modelling of land-use and land-cover change”, in “Agent-based models of land-use and land-cover change”, Report and Review of an International Workshop October 4–7, 2001, Irvine, California, USA.
[8] Crooks A. T., Castle C. J. E., and Batty, M.: “Key challenges in agent-based modelling for geo-spatial simulation”, CASA Working Paper 121, 2007.
[9] Ngo T. A. and See L. M.: “Calibration and validation of agent-based models of land cover change”, in “Agent-based models of geographical systems”, Dordrecht Springer, 2012, pp. 181–196.
[10] Staffini A., Svensson A.K., Chung U.I., and Svensson T.: “An Agent-Based Model of the Local Spread of SARS-CoV-2: Modeling Study”, JMIR Medical Informatics 9(4), 2021.

The post ABMsの入門と「An Agent-Based Model of the Local Spread of SARS-CoV-2: Modeling Study」の紹介 first appeared on ALBERT Official Blog.

複数カメラの映像を用いたオンライン物体追跡のためのマッチングアルゴリズムについて

$
0
0
こんにちは、先進技術部の田中です。 今回の記事では、我々が開発している物体追跡手法、特に複数のカメラにまたがった追跡について紹介します。この手法は SSII2021/第27回画像センシングシンポジウムへの論文投稿及び発表を行った[1]もので、特許出願もしました。

物体追跡とは

さて「物体追跡」と聞くとどのようなものを思い浮かべるでしょうか。一口に「物体追跡」と言っても様々な種類があり、前提とする条件によっていくつかに分類することができます。

例えば以下のような条件があります。
  • 一度に追跡する物体の数が「1つ or 複数」
  • オクルージョン(追跡対象がカメラから隠れること。例えば他の物体の影に入った場合や画面内外への出入りなど)を「考慮しない or 考慮する」
  • カメラが「1つ or 複数」
  • (カメラが複数の場合)各カメラの撮影領域が「重複していない or 重複していてもよい」
  • オフライン(すでに保存された動画で追跡)or オンライン(動画を撮影しながら逐次的に追跡)
現在我々が取り組んでいるものは物体追跡の中でも特に複雑なもので、「複数の追跡対象を、オクルージョンを考慮しながら、撮影領域の重複した複数のカメラにまたがって、オンラインで追跡する」ものであり、オンラインMTMCT(Multi-Target Multi-Camera Tracking)と呼ばれています(MTMCTにはカメラの撮影領域に対する制限はないため、より正確には「撮影領域の重複を許容したオンラインMTMCT」と言うべきかもしれません)。
本来追跡対象は何でも構わないのですが、公開されているデータセットの傾向から人や車を追跡対象としている場合が多いです。本ブログ内では人の追跡を取り扱います。


ではどのような方法で物体追跡を実現できるのでしょうか。

カメラが1つで追跡対象も1つの場合は簡単で、各フレームに存在する1つの物体を検出し、それらをつなぎ合わせれば事足ります。

カメラが1つで追跡対象が複数の場合には、あるフレームに存在する物体を全て検出した上で、別のフレームで検出された物体とのマッチングを行う必要があります。これは検出されたフレームによらず、同じ物体に同じIDを割り振ることに相当します。
物体の同一性の判断のためには物体の外観情報や位置情報がよく用いられます。特にオクルージョンを考慮しない場合、連続したフレーム間での物体の移動量が十分に小さいことを仮定し、位置情報を用いることで精度よく追跡を行うことが可能です。

複数のカメラにまたがった追跡(MTMCT)も必要な操作はほとんど同じです。各フレームに存在する物体を検出した上で、カメラやフレームの違いによらず同じ物体に同じIDを割り振ることで追跡を行うことができます。
ただし、連続したフレーム間での処理を前提としていた1つのカメラでの追跡と比べると、ID割り振りの難易度は跳ね上がります。カメラ間でのID割り振りのためには位置情報以外での同一性判定を行う必要がありますが、カメラの設置位置・設置環境が異なるため、外観情報(画面上での物体の色・大きさ・姿勢など)も大きく異なっている可能性があるのです。


提案手法(マッチングアルゴリズム)の概要

我々は3つの要素を組み合わせることでMTMCTを実現しようとしています。

1つ目はMOT(Multi Object Tracking)と呼ばれる単一カメラでの追跡を行うモデルです。フレーム内の物体を検出しつつ位置情報や外観情報を活用してID割り振りを行うことで、単一カメラでの短時間の追跡結果(トラックレット)を得ることができます。トラックレットは図1のように、人物部分を切り出した画像の集合として表されます。

2つ目は得られたトラックレットの外観特徴量を計算するためのモデルです。Person ReID(Re-Identification)と呼ばれる複数のカメラで撮影された人物画像の識別タスクで用いられており、多様な条件下でのマッチングを行うことが可能です。トラックレットは複数枚の画像の集合であるため、画像ごとに特徴量を算出し集計することでトラックレットの特徴量を得ることができます。

そして、3つ目が本ブログの本題であるマッチングアルゴリズムです。上記で得られた外観特徴量を用いてトラックレットにIDを割り振ることで、オクルージョン対策やカメラ間の追跡を行うことが可能となります。

図1は提案アルゴリズムを図式化したものです。

図1:動的なツリー形成によるオンラインマッチングアルゴリズム[1]
アルゴリズムの基本的な考え方は以下の通りです。
  • 各ノードはトラックレットを表す
  • 各ツリーは1人の人物を表す
  • 類似ノード間を繋げることでツリーを形成する
  • ノード間連結を動的に変更することで最適な結合を保つ

それでは具体的にアルゴリズムを見ていきましょう。

左図

これまでに追跡を行った結果として、2つのツリーが形成されています。

中図

新たなフレームが取得されました。単一カメラ追跡モデルでの推論を行い、トラックレットの検出を行います。提案手法はオンライン手法なので、画面上にいる人物(追跡途中のトラックレット)にもIDを割り振る必要があります。

そのため既にツリーに組み込まれたトラックレットであっても次フレームで再度同一人物が検出され、トラックレットが更新される(トラックレットを構成する画像が増える)場合が多いです。一方で未知の人物が検出された場合、あるいは既知の人物であってもオクルージョンなどにより単一カメラ追跡が途切れた場合には新たなトラックレットが生成されます。

ここでは処理対象のフレームを推論した結果、既存の白丸のトラックレットが更新されたとします。更新されたトラックレットとその下位ノード(図の白丸を親とした3ノード)はツリーから分離されて再度マッチングが行われます。マッチング対象は過去に検出されたツリーから、今回検出されたトラックレットとその下位ノードを除いたものです(いくつかの条件を課すことでさらに対象を絞ることもできますがここでは省略します)。

右上図

検出されたトラックレットとマッチング対象のツリーの間の結合コストを計算します。ツリーの結合コストはそれを構成するトラックレットと検出されたトラックレットのコストの平均とします。 トラックレット間のコストの中で最も重要なコストは特徴量の類似度です。検出されたトラックレットの特徴量ベクトル(\bm{F})とツリーを構成するトラックレットの特徴量ベクトル(\bm{F'})を用いて、以下のように表されます。

C_{\rm sim} = 1 - \bm{F} \cdot \bm{F'}

ただし|\bm{F}| = |\bm{F'}| = 1

他にも状況に応じたコストを追加することが可能です。例えば「あるフレームに同時に存在したことのあるトラックレットを同じツリーに所属させないためのコスト(同一人物ではないことが明らかなため)」や「カメラの位置関係を利用したコスト(カメラ1の右端とカメラ2の左端が隣接しているなど)」などが考えられます。これらを加えて最終的な結合コストを算出します。

右下図

上記で得られたコストを用いてマッチング先を決定します。
図では検出されたトラックレットは1つしかありませんが、一般には複数のトラックレットを複数のツリーに同時にマッチングさせる必要があります。そこでハンガリアンアルゴリズム[2]と呼ばれる最適化アルゴリズムを用いて、結合コストが最も低くなるようなマッチングを計算します。この際、全てのツリーとの結合コストが閾値より高いトラックレットは新たなツリーの根ノード、つまり新しい追跡対象が現れたものとして扱います。

一方、既存のツリーとのマッチングが成立したトラックレットに関しては、親となる結合先のトラックレットを決定します。マッチングされたツリー内で最も結合コストが低いトラックレットを選び、検出されたトラックレットを下位ノードとして結合します。この操作により、あるトラックレットの下位ノードには自身と似た特徴を持つトラックレットが結合されることとなります。

各カメラからフレームが与えられる度にこの一連の更新サイクルを実行することで複数カメラでの追跡を行うことが可能となります。また一度に処理されるのはあくまで1つのフレームであるため、各カメラを同期する必要はありません。


提案手法の利点・既存手法との比較

上でも触れたとおり、MTMCTは単一カメラでの追跡とIDの割り振りに分解することができ、ID割り振りは検索対象(過去に検出された物体)とのマッチングで解決可能です。

ただしカメラの撮影領域が重複している、つまり複数のカメラが同じ地点を撮影している場合は状況が変わり、同時刻に別カメラで撮影された物体も検索対象に入れなければなりません。下手なアルゴリズムを用いると、お互いがお互いとマッチングし合う循環参照のような状況に陥りかねません。提案手法では階層的なツリー構造を採用し、自身の下位ノードを検索対象から除外することでこれを解決しています。

また階層的なツリー構造には別の利点もあります。コスト計算やマッチングを行うのは検出されたトラックレットのみであるにも関わらず、再結合時には自身の下位ノードも移動できるのです。下位ノードは自身と似た特徴を持つトラックレットであるため、親ノードとともに移動することで、計算量やメモリ消費量を抑えつつも適切なツリー再構成が可能となるのです。


MTMCTの既存手法には、 MHT(Multiple Hypothesis Tracking)[3]や FCDSC(Fast-Constrained Dominant Sets Clustering)[4]があります。

MHT

図2:MHTの概要図[3]
MHTは仮設木を作成することで追跡を行う手法です。ツリーを構成するという点で提案手法と似ているように見えますが、実態は大きく異なります。

まずノードはトラックレットではなく、あるフレームで検出された人物画像です。そして結合されたノード同士は同一人物であることを表すのですが、その際、起こりうる全ての可能性を保持するためにツリー構造を使用しています。

例えば図2の左図のO2に注目してみましょう。O2は前フレームで検出されたO1と同一人物であるかもしれませんし、前フレームには存在しなかった新たな人物であるかもしれません。また次フレームで検出されたO4と同一人物であるかもしれませんし、そのフレームには存在しない(黄色い四角のO2)かもしれません。左図はそれら全ての仮説をツリーとして保持した様子を表しています。

そして一定期間経過後に尤度が最も高い仮説(葉ノード)を選択し、それと矛盾する仮説を全て排除します。図2の右図はO1とO2が同一人物である、という仮説が採用されたことを表しています。O2とO4が同一人物か否かはその次のフレームで決定されることとなります。

すぐに想像がつくように、MHTは登場人物が増えると仮説木が急激に大きくなり、それに伴い計算量も増加します。実際MHTは、この木構造の更新をKフレームまでに制限することで計算量を抑えているため、オクルージョンを含んだ長期間の同一人物追跡に難があります。またカメラの撮影領域が重複している場合には適用できないというデメリットもあります。

MHTに対して提案手法は、仮説を保持する代わりにツリーの動的な再構成を行っていること、トラックレットをノードとしていることによってメモリや計算量を抑えることに成功しています。

FCDSC

図3:FCDSCの概要図[4]
またもう1つの既存手法であるFCDSCは、段階的にクラスタリングを繰り返すことで追跡を行う手法です。

あるフレームで検出された人物画像からクラスタリングを繰り返し、人物画像 → 短いトラックレット → トラックレット → トラックレット同士の結合、のように段階的に統合します。トラックレットの生成までは一度のみ実行されますが、最終段のクラスタリングは過去の全てのトラックレットを対象に繰り返し行われます。

採用した生成方法は異なるものの、トラックレットを生成しそれらを結合するという観点では提案手法と似た手法だと言えます。
一方で、FCDSCではフレームごとにクラスタリングを繰り返すために全てのトラックレット間のコストを保持しておく必要があるのに対し、提案手法では再結合の対象はそのフレームで検出されたトラックレットのみであり、それらと関係しないコストは必要ありません。提案手法では過去の結合情報をツリーとして保持して有効活用していることにより、必要なメモリを抑えることができているのです。


動作検証

提案手法の精度や動作速度の計測を行うためにMTMCTモデルを構築して動作検証を行いました。

図4:Terraceの追跡結果[1]
図4はMulti-camera pedestrians video[5,6]のTerraceという動画セットでの追跡結果を可視化したものです。Terraceは9人の登場人物が狭い空間内を歩き回っている様子を複数の角度から撮影したものであり、オクルージョン(人同士の重なりや画面内外への出入り)が非常に多いことが特徴です。

図4を詳しく眺めてみましょう。例えば濃い紫で囲われた人物(ID80)に注目すると、どのカメラに写っていても同じ人物に同じIDが割り振られている、つまりうまく追跡ができていることがわかります(実はcam1の左から2番目は似た服装の違う人物なのですが…)。他の人物に注目しても、いくつかミスはあるものの全体的によく追跡できています。このように当初の目的通りにカメラ間での追跡に成功していることがわかります。

そしてもう1つ注目すべき点があります。先程と同じく濃い紫で囲われた人物を見てみると、cam1,2,3ではオクルージョンにより一度追跡が途切れてしまっていますが、後のフレームで追跡を再開することができています。このように提案手法は複数カメラ間の追跡だけでなく、単一カメラでの追跡のためのオクルージョン対策として用いることも可能なのです(正確には上の実験だけでは単一カメラ追跡時に有効か否かの判別はできませんが、別の実験でその効果が確認できています)。


また提案手法はオンライン手法ですので、その処理速度も重要な評価指標です。

上記の実験はIntel Xeon Gold 6230 と NVIDIA V100 GPU を用いて行ったのですが、その処理速度は約28fpsを記録しました。Terraceは25fpsで撮影された動画なので、リアルタイム推論を実現できたこととなります。

さて、これまで述べたとおりTerraceを用いた実験では十分な精度と速度を達成したことを確認できました。一方で、他の動画を用いた実験からこの手法の課題も見えてきています。

例えば照明が暗い場合やカメラから被写体までの距離が遠い場合には、トラックレットの特徴量をうまく取得できずにマッチングに失敗すること、また登場人数が数百人になると結合コストの計算に時間がかかり推論速度が低下することなどがわかりました。

上記の課題の解決策として、外観特徴量を取得する際にその特徴量の信頼度も出力するようモデルを再訓練することを計画しています。信頼度とはその特徴量の有用性を表しており、カメラの画質が荒かったり他の物体と重なっていたりする場合に低い値を取るものです。高い信頼度の特徴量のみを用いることでマッチングの質を担保しつつ、計算量の削減も期待することができます。

まとめ

本ブログでは、我々が開発した複数カメラの映像を用いたオンライン物体追跡のためのマッチングアルゴリズムの概要とその動作検証結果の紹介を行いました。そしてオクルージョンが多い環境や複数のカメラで同一地点を撮影している状況でもリアルタイムに追跡が可能であることを確認しました。

また一般にMTMCTというと固定されたカメラを用いるものですが、実は提案アルゴリズムはカメラが固定でなくとも適用可能で、カメラ間の位置関係の制約もありません。複数のスマホやAR機器で撮影された映像のそれぞれから物体を検出し、それらのマッチングを行うことで情報の統合を行うような使い方ができないかなあと考えたりもしています。

最後になりますが、先進技術部では今後も動画を対象とした研究開発を推進していく予定です。ご興味のある方はこちらからぜひご応募ください。お待ちしています。


  1. 田中駿祐, 松林達史, 「動的な Tree 形成によるオンライン複数カメラ物体追跡手法」, Symposium on sensing via image information, IS3-21/SO3-21, 2021
  2. Harold W. Kuhn, “The Hungarian Method for the assignment problem”, Naval Research Logistics Quarterly, 2: 83–97, 1955. Kuhn’s original publication.
  3. Kwangjin Yoon, Young-min Song, and Moongu Jeon. “Multiple hypothesis tracking algorithm for multi-target multi-camera tracking with disjoint views”. CoRR, Vol. abs/1901.08787, 2019.
  4. Yonatan Tariku Tesfaye, Eyasu Zemene, An- drea Prati, Marcello Pelillo, and Mubarak Shah. “Multi-target tracking in multiple non-overlapping cameras using fast-constrained dominant sets”. In- ternational Journal of Computer Vision, May 2019.
  5. Lengagne Richard Fua Pascal Fleuret Fran ̧cois, Berclaz J ́erˆome. “Multi-camera people tracking with a probabilistic occupancy map”. 2008.
  6. Yang Liu Song-Chun Zhu Yuanlu Xu, Xi- aobai Liu. “Multi-view people tracking via hier- archical trajectory composition”. 2016.

The post 複数カメラの映像を用いたオンライン物体追跡のためのマッチングアルゴリズムについて first appeared on ALBERT Official Blog.


2021年 新卒研修レポート

$
0
0
はじめまして!
2021 年 4 月に新卒社員として入社しました、データコンサルティング部の三澤です。

今年の新卒入社は私を含め 10 名です。
みな個性豊かで専門分野も様々ですが、互いに助け合いながら切磋琢磨できる良いメンバーです。

ALBERT では、毎年新卒社員向けに 2 か月間の研修を行っています。
私の場合は研究分野がデータサイエンスないし機械学習と関連がある訳ではなかったため、新卒研修が充実しているという点もこの会社に入社したいと思った魅力の一つでした。
(その他の ALBERT の魅力については、最後に紹介したいと思います!)

実際に新卒研修の内容は思っていた以上に充実していて、座学・演習を通じて実践的な視点やデータ分析の技術を身につけることができました。

本記事では今年の新卒研修内容についてご紹介します。
ALBERT やデータサイエンティスト教育に興味のある方はぜひ読んでいただけると幸いです。

研修内容

初日の入社式を皮切りに、新卒研修がスタートしました。
大まかな研修内容は以下です。
  • オリエンテーション
  • 各部説明
  • ビジネス関連の研修
    • ビジネスライティング
    • 報告書作成
    • ビジネスマナー研修
  • 技術関連の研修
    • UNIX・クラウド・Docker 基礎
    • Python 基礎
    • Github 基礎
    • コーディング作法
    • 統計学・機械学習の理論
    • RDB 基礎
    • Spark 基礎
  • 演習
    • 分析演習 I (個人): 音楽ストリーミングサービスにおける離反会員の予測
    • 分析演習 II(個人) : Deep learning を用いた自動車走行中の道路画像のセグメンテーション
    • クライアント対応演習(グループ): 半導体メーカーの検査工程における AI システムの導入

最初の二日間のオリエンテーションと、5 月末のビジネスマナー研修およびクライアント対応演習を除き、基本的にオンラインでの実施となりました。
(一部希望者は数日オフィスに出社してオンライン講義を受けていました。)

今年の新卒社員には、入社前に ALBERT からビジネス書や技術書など計 12 冊が送られており、一部の講義にはこれらの書籍を読んでおくと少し予習ができる内容も含まれていました。


入社初日の自己紹介の様子。10 月の内定式でも話す機会があったので、すでに皆の名前と顔はだいたい覚えていました。

■ ビジネス関連の研修

データサイエンティストというと、どちらかといえば技術面にフォーカスされる印象がありますが、ALBERT の研修では技術関連の研修に加えてビジネス関連の研修も充実しています。

メールや報告書などの文書の書き方、発表資料の作り方や、ビジネスでの話し方など、円滑にビジネスを進めるうえで重要なソフトスキルについても学ぶことができました。

ロールプレイングや演習もあったのですが、2 か月前まで学生をやっていた身にはビジネスパーソンとして最低限の事をこなすのも難しく感じました。

※小ネタその 1
ビジネスマナー研修で性格診断の機会があったのですが、論理力が高い性格タイプという診断結果になった人が大半を占めていたことにALBERT らしさを感じました!

■ 技術関連の研修

技術関連の研修では、
  • 先輩社員が講師として教える講義形式のもの
  • 事前に講義を録画したものを視聴する VOD 形式のもの
の 2 パターンがありました。

今年は Python 基礎, RDB 基礎 については VOD 形式での実施でした。
個人的には、VOD だとわからない点は巻き戻して再確認することができ、理解できている部分は飛ばすこともできるという点で効率の良さを感じました。
演習問題なども充実しており、各自のペースで進めることができました。

講義では、今年から分散システムでデータを取り扱う Spark 基礎の内容が追加されました。
私は実際にアサインされたプロジェクトで Spark を使う機会がありそうなので、早速学んだことが業務で役に立つ予感がしています。

だいたい入社 3~4 年目くらいの先輩社員に教えてもらうことが多かったのですが、圧倒的な知識量と説明の分かりやすさに憧れを抱いた新卒社員は私を含め多かったと思います。
いずれ新卒社員のメンバーの中からも、新卒研修の講師をする人が出るかもしれません。

■ 演習

一通り技術関連の研修が終わった後には本格的な演習が 3 つ待ち受けていました。
個人分析演習(分析演習 I,II) については、2018 年2019 年の記事に、グループ分析演習(クライアント対応演習)については 2020 年の記事に、それぞれ分かりやすく書かれているので、ぜひご覧ください。

内容の詳細な話は上記の記事に任せることとし、ここではそれぞれの演習について、ざっくばらんに所感を述べていきたいと思います。

◆ 分析演習 I

音楽ストリーミングサービスを提供するクライアントを想定した実案件形式の演習でした。
データ分析結果のみならず、そこから得られる知見やビジネス目線での施策を各自で考えて、クライアントに提出できるクオリティにすることが求められました。

皆に同じデータが配られたのですが、人によってデータに対するとらえ方が異なり、前処理の仕方や発表資料にも個性が表れていたのがとても面白かったです。

私は最初のうち何をすれば良いか分からず焦っていましたが、試行錯誤するうちに自分なりの分析方針が見えるようになりました。
最終的には時間が足りず満足のいく分析を行うことは出来なかったのですが、分析の奥深さや面白さ、そして自分の成長を実感することができた演習だったと思います。

◆ 分析演習 II

自動車の走行中に撮影された道路の画像データのセグメンテーションを行う演習でした。
今年は 期間が 5 日間(講義と発表の時間を除くと実質 3 日間)と短いことから、事前に配られたサンプルコードを改良して識別の精度を上げるという課題になっていました。

深層学習は一回の試行に時間がかかり、試せる事は限られていたので、初心者の私はハイパーパラメータ調整やデータオーグメンテーションを試してみて、まずは深層学習の感覚を掴むことに専念しました。
深層学習の経験がある人は、最新の論文のアーキテクチャを参考にモデルを実装していました。

この演習では、深層学習を使いこなすには知識と経験が不可欠であることを痛感しました。

※小ネタその 2
ALBERT では社内の有志で Deep Learning の論文を読む勉強会が毎週開催されています!

◆ クライアント対応演習

5 人ずつ 2 チームに分かれてのグループワークで、クライアントへのヒアリングから提案、そして PoC(Proof of Concept)の結果報告までの一連の流れを体験するという内容になっていました。
新卒がいずれプロジェクトリーダーやプロジェクトマネージャーになった際に、クライアントとの折衝を円滑に行えるようにと、去年から新卒研修に組み込まれた演習だそうです。



私のグループでは、最終提案の後に、想定していたデータが受領できないこと(という設定)が判明したので、分析スケジュールや分析手法、クライアントとの契約の内容などを一から考え直す必要がありました。
実装と報告書作成の作業時間なども含め残り二日間で完成させなければならず大変でしたが、実際に業務でも想定外の事態が起きる可能性はあるので、良い訓練になったかもしれません。

この演習を通して、
  • クライアントの真に達成したい目的や本質的な課題を引き出すヒアリング力
  • 契約内容やシステム要件等に関してクライアントと適切に合意形成する交渉力
  • 想定外の状況に備えていくつか分析パターンの手札を用意するリスク管理力
などの重要性を痛感しました。

事前に先輩社員から聞いた話では、新卒研修のうちで一番大変な研修という評判でしたが、個人的にはチームメンバーと色々相談・議論しながら進められたことで、大変さよりもチームで仕事ができることの有難みを実感した演習でした。

研修を終えてみての感想

コロナ禍も二年目に突入したということで、新卒社員の多くはオンラインでの講義やコミュニケーション自体には慣れていた印象です。
個人的にはオンラインとオフラインではコミュニケーションの取り方が異なり、それぞれに一長一短あるというのが率直な感想です。

新卒研修を通して、充実した研修教材と、講師陣や人事等の先輩社員の皆さんのおかげで、なんとか(よちよち歩きではありますが)スタートを切ることができました。
今こうして振り返ってみても、データサイエンティストの育成講座として、これ以上に充実した研修は他にないのでは、という気がしています。

研修が終わり、プロジェクトにアサインされてまだ 1 か月ですが、研修で学んだことは仕事を進める上で確実に役に立っています。
これから早く一人前になれるよう、精進していきたいと思います。

※小ネタその 3
私は入社前に奮発して購入した椅子のおかげで快適にリモートワークできているのですが、ALBERT オフィスの椅子はその倍くらいのお値段する、高級で座り心地の良い椅子です!

ALBERT の魅力

最後に、ALBERT への入社を考えている方に向けて、新卒社員目線で見た ALBERT の良いところを紹介したいと思います!
  • 新卒社員でも意見を言いやすい風通しの良さ
  • 社内勉強会が充実している
  • 技術に詳しい社員が多い
  • オフィスのお菓子コーナーが充実している
  • 軽食タイムなどがあり、社員同士で雑談がしやすい
  • 貸出用の書籍が充実している
  • 積極的に話しかけてくれる先輩が多い
  • 同期はみんなめっちゃいい奴(by 新卒社員 Y.K.)
  • 面白い趣味を持った社員が多い
  • 一階にスーパー、二階にお惣菜屋さんがあってランチに困らない
  • 穏やかな社員が多い
  • 作業効率を重視する文化があり、残業時間が短い
  • ブラシス制度等があり、新卒社員のサポート体制がしっかりしている
  • 新しいことを積極的に取り入れる社風がある
  • オフィスが綺麗で窓からの景色も良い
まだまだありそうですが、長くなってしまったのでこの程度にしておきます。
ここまで読んでいただきありがとうございました!

ALBERT では、データサイエンティストを積極募集しています。
ぜひ採用ページをご覧ください。

The post 2021年 新卒研修レポート first appeared on ALBERT Official Blog.

GPUサーバ増設とA6000のベンチマーク

$
0
0

こんにちは、先進技術部の松林です。自己紹介は昨年(2020年)の「A100はじめました」というブログ記事に執筆いたしましたが、大学院で重力相互作用専用スパコンのGRAPEを利用していた影響もあり、未だにスパコンや並列計算による高速化と言うのが好きな人です。 さて、ALBERTの先進技術部では、昨年末にDGX A100を導入し、動画分析や3D認識の研究などに利用してきました。今回はこのDGX A100に加えて、A6000を8枚積んだ8GPUサーバを新たに4台導入し、合計40GPUのGPUクラスタシステムを導入しました。DGX A100をさらに導入する計画もありましたが、夏期インターンに向けてGPUを早期に拡充しておきたい点と、社内での利用者増加を見越してバランス重視で、A6000のシステム導入を決めました。 システム全体のピーク性能としては表のとおり、倍精度演算能力(FP64)は138.7 TFlops ですが、単精度演算能力(FP32)としてはGPUだけで1.4PFlopsあります。FP16 Sparse Tensor の疎行列の積和演算に関しては14.9PFlopsの性能があるので、Tensor coreなどを有効活用できればかなりの性能を引き出せることが分かります。一方で、混合精度を利用して性能を引き出すにはハード特性考慮したコードを書く工夫が必要で、多くの場合は単精度演算処理のまま利用している人が多いです。そのため「A100よりもGeForce 3080 の方が速い」ということも起こります。逆に言うと、FP32が速いハードを使えば、ハード特性を意識しなくても、コードがそのまま速くなる事も多いというのも事実です。
( 138.7Tflops = 18.7Tflops(CPU) + 120Tflops(GPU) の総計値です)
改めて表のA6000とA100を見比べてみると、A100の方が全体的にハイスペックなのですが、GPUメモリサイズはA6000の方が少し大きく、FP32の性能に関してはA100よりも倍近い性能が出ます。FP64は、HPC(High Performance Computing)などでは重要視される反面、機械学習のシーンではあまり重要視される機会が少ないため、今回はFP32の性能が高いA6000に注目しました。ちなみに、GeForce 3090という選択肢もあったのですが、仮想通貨のマイナー用に売れ続けてしまって非常に確保が難しいことと、電力効率とメモリサイズも重視してA6000/A5000に絞り、最終的にA6000を導入しました。個人的には費用対効果と電力効率的にA5000推しでしたが、48GBのデバイスメモリが魅力的だという意見も強く、A6000の導入を決めました。

システムSUPERMICRONVIDIA DGX A100全体
ノード数41
CPU 性能EPYC 7763 (Zen3) x2EPYC 7742 (Zen2) x2
コア/スレッド96/192128/256512/1024
クロック2.3GHz2.25GHz
FP641.8 TFlops2.3 Tflops18.7 TFlops
メモリ1TB1TB5TB
GPU 性能A6000 (PCIE)A100 (SXM4)
個数32840
GPU メモリサイズ48GB40GB1856 GB
FP641.25 TFlops9.7 TFlops120 TFlops
FP3238.7 TFlops19.5 TFlops1.4 PFlops
FP1640 TFlops78 TFlops1.9 PFlops
RT Core75.6 TFlops2.4 PFlops
FP64 Tensor( 1 TFlops??)19.5 TFlops?
TF32 Tensor( 10/20 TFlops??)156/312 TFlops?
FP16 Tensor155/310 TFlops312/624 TFlops7.5/14.9 PFlops
BF16 Tensor( 155/310 TFlops?)312/624 TFlops?
INT8 Tensor( 310/620 TFlops?)624/1024 TFlops?
表:今回導入したA6000のGPUサーバとA100を積んだDGXの比較と、システム全体の理論性能。

ここで、いくつかA100とA6000でベンチマークを取ってみます。前回A100を稼働させた時はmatrixMulCUBLASとcudaTensorCoreGemmのベンチマークをV100と比較してみたのですが、今回は、NVIDIAがA6000の公称スペックをあまり公開していないため、少し細かく取得してみました。
なお、それぞれの環境は下記の通りです。DGX OSは勝手にドライバ更新とかしてはいけないらしいので、DGX OS は極力触らないようにしていますが、バージョンは恐らく最新のはずです。今回マザーボードと電源ユニット交換の話があってファームアップデートなどをかけましたので、もう一度ベンチマークを取ってみます。なお、サンプルコードの行列積は全て密行列A(MxN) と密行列B(NxK)の行列積C(MxK)を求める計算となっていて、疎行列(SparseMatrix)モードは試していません。
・A100:
  CUDA 11.0.221
  OS Ubuntu 20.04.1 (DGX OS 5.0.0)
  NVIDIA GPU driver Release 450
・A6000:

  CUDA 11.4.100
  OS Ubuntu 20.04.3
  NVIDIA GPU driver Release 470

matrixMulCUBLAS (FP32)
A100: Performance= 8508.12 GFlop/s
A6000: Performance= 10034.84 GFlop/s

M=640, N=480, K=320 のFP32の計算で、A6000の方が若干高速で10TFlops出ていますが、行列サイズも小さいのでピーク性能にはまだまだです。それでもV100が6.9TFlpos程度だったので倍ぐらい高速になっています。

dmmaTensorCoreGemm (FP64 Tenosr)
A100: FP64 TFLOPS: 11.75
A6000: FP64 TFLOPS: 0.54
M=8192, N=8192, K=4096 のFP64Tenosrの行列積計算で、シンプルに倍精度演算を行っている。A100はHPC用に倍精度演算能力も妥協していないために、さすがの高スペックでA6000では歯が立ちません。なお、A6000のFP64 Tensorの公称値は見つけることができなかったのですが、1TFlops程度でしょうか。

tf32TensorCoreGemm (TF32 Tensor)
A100 :TFLOPS: 30.35
A6000:TFLOPS: 2.48

M=8192, N=8192, K=4096のTF32 Tensorの行列積計算である。ここでTensor Float 32とは,指数部分は8bitsでfloat32と同じ値の範囲(-1e-38~1e-38)を持ち、仮数部分は通常のFP32の23bitsを使わず10bitsだけ利用し、トータル19bitsに削減して演算を行う混合精度演算である(図参考)。A100ではピーク性能156Tflopsに対して1/5程度の速度で、A6000がその1/12程度しか性能が出ていません。これが本当なのか気になったのでソースコードを改編して純粋に演算処理部分だけ計測しましたが 2.48Tflops 程度でした。また、行列サイズを(M=N=K=32768)と巨大にして計算させても「A100 : 38.48Tflops、A6000 : 2.52Tflops」だったので、A100がピークの1/4程度な事を考えると、A6000もピーク性能10Tflops程度でしょうか。(正確な値分かる人教えてください)

cudaTensorCoreGemm (FP16 Tensor)
A100:TFLOPS: 78.40
A6000:TFLOPS: 77.85

M=4096, N=4096, K=4096の行列積演算で、いわゆる混合演算(Mixed precision)です。行列A, Bはhalf (FP16)で、積和を行列Cのfloat(FP32)で受け取り、推論だけではなく学習にも十分有効であるとして利用されています。A6000はピーク性能の50%出ていてA100に遜色ありませんが、行列サイズを大きく(M=N=K=32768)して計測すると「A100 : 103.75Tflops、A6000 : 76.15Tflops」となりましたので、A100はまだ余力がありそうです。いずれにしても両方のGPUとも高速なのがよく分かります。

bf16TensorCoreGemm (BFLOAT16 Tensor)
A100 : TFLOPS: 98.78
A6000 : TFLOPS: 81.66

M=8192, N=8192, K=8192の行列積で、Brain Float16という型を利用している。BFLOATは16bitではあるが、指数はfloatと同じ8bitsで、仮数を7bitsに抑えている。ダイナミックレンジを確保しつつ、積和で桁落ちしてしまう仮数部分を削り落とす思想は基本的にTF32と同じであるが、16bit長であるため扱いやすく、より高速に処理できるのだと想像する。この演算も行列サイズを大きく(M=N=K=32768)して計測すると「A100 : 111.68Tflops、A6000 : 76.71Tflops」とFP16と同じような性能比になったため、A6000はBF16性能は155TFlops程度でしょうか。

immaTensorCoreGemm (INT8 Tenosr)
A100 : TOPS: 147.82
A6000 : TOPS: 123.48

M=4096, N=4096, K=4096 の行列積で、8bit int整数型を用いている。推論時では8bit整数でもそれなりの精度が得られるとは聞くが、ハイスペックなGPUでは利用シーンがあまり無いようにも感じる。演算処理は非常に高速であり、おそらくまだまだピーク性能に達していない。A6000はおそらくピーク性能310Tflopsぐらいあるのではないでしょうか。

 図:Fp32, TF32, Fp16, BF16の違い。

今回試したのはいずれもCUDAのsample コードであり、ピーク性能を引き出すものではないのですが、GPU間の性能比較には多少使えるだろうということで利用しました。A100と異なり、A6000はNVIDIAからも演算性能をあまり公表していないのが、演算用というよりもQuadro系のグラフィック性能に特化させているGPUなので、倍精度(FP64)落として単精度(FP32)の性能が高く、我々もそこには期待したのですが、TF32が性能低そうなのが正直残念でした。ネットの情報(とある代理店のサイトに書かれているスペック表)で75/150Tflopsと書かれていたので期待していたのですが、今思うとRT Core の性能との誤記だったのかもしれません。とはいえ、BF16もFP16も高い性能出しているので、TF32を使わない代わりにFP32でも精度維持しながら十分速度が出ることと、BF16使えば仮数の精度を少し落としても高速化ができるという感じです。個人的には、前述した通り、FP32の演算性能に期待したので、そこはしっかり利用していきたいと思います。
さて、ここまででベンチマークを取らなかった「RT Core」ですが、これはシェーディング処理の高速化のためのチップで、光線の反射と透過などを計算するものです。NVIDAは最近ここにも力を入れていて、特にNVIDIA Omniverse などのシミュレータ環境では、現実世界かと見間違えるようなCG再現をクラウド上で実現しています。OpenGLなどのグラフィック出力はクライアントGPUで処理して出力するものですがに、NVIDIAのvGPUなどは、サーバで処理したグラフィック出力をover IP でクライアントに出力させるもので、NVIDAIもそのようなプロダクトの利用にはA6000/A5000を複数枚積んだサーバを推挙しています。
下の動画は,遠隔のGPUサーバで起動させたOmniverse Isaac Simulator をリモートアクセスして動かしています。レンダリングの演算は遠隔の強力なGPUサーバで動かし、描画結果だけを飛ばしてきているのですが、これは恐らくクライアント側からは操作処理を送り、サーバ側からはライブストリーミング配信のRTSP(Real Time Streaming Protocol)プロトコルで画面を飛ばしているものだと思います。現在社内の同一LAN内では遠隔操作ができていますが、データセンターのようなFirewallの設定(アクセスportの制限など)が厳しい場所での通信では苦労していて、なかなか厳しいものがあります。もちろんハイエンドGPUを積んだデスクトップで作業すればよいのですが、このコロナ禍では在宅を余儀なくされ、自宅からアクセスすることが必須となっているため、色んな苦労はありますが遠隔でできるように色々取り組んでいます。先進技術部でもOmniverse周辺技術には興味があり色々と取り組み、今回のA6000(or A5000)の導入の決め手にもなっていますので、近いうちに別の形で報告しようと思います。
動画:遠隔でサンプルのKaya robotを動かしているところ

The post GPUサーバ増設とA6000のベンチマーク first appeared on ALBERT Official Blog.

ARISE analytics社と2回目の合同勉強会を開催いたしました。

$
0
0

前書き

7月30日にARISE analytics社と合同勉強会を開催いたしました。本勉強会は、前回の開催に引き続きARISE analytics社とALBERT での交流を図りながら、ビジネス力や技術力、分析力などそれぞれの強みを共有しお互いに高めあうことを目的として開催されました 前回は新宿にあるALBERT本社で行いましたが、新型コロナウイルスの影響もありフィジカルな大人数での勉強会が難しかったため、SpatialChat を用いたオンライン開催となりました。

当日は足掛け2時間に及ぶ大ボリュームで、参加者は最大90人を超えるなど、前回を上回る規模で実施することができました。 以下が当日のスケジュールとなっております。
  • オープニング
  • ARISE analytics 事例紹介と一般的な話題(15分)
  • ALBERT 事例紹介と一般的な話題(15分)
  • 「レコメンドエンジンを作って大規模コールドスタート問題を解決した話」(30分、ARISE analytics社)
  • 休憩&交流会(20分)
  • 「リアルタイム画像処理システムにおける物体検知モデルの速度チューニング」(20分、ARISE analytics社)
  • 「3D Awareな生成モデル」(30分、ALBERT)
  • 休憩&交流会(20分)
  • クロージング

今回はそんな勉強会の様子をレポートしていきたいと思います。

瀧内さんセクション

ARISE analytics社の会社紹介ではCustomer Analytics DivisionのLeadを務める瀧内さんにお話を伺いました。

瀧内さんのお話では ARISE analytics 社で普段行われている業務に始まり、単なる分析受託業務では終わらないためにはどうしたら良いのかといった話に続き、Data Scientistの増加やAutoMLの台頭などのデータ分析業界を取り巻く状況の変化を踏まえながら、我々アナリストが「単なる作業者」で終わらないためにどうあるべきかといった非常に深いお話を伺うことができました。

瀧内さんには以前の合同勉強会でもARISE analytics社側の登壇者として発表いただき、その内容に思わず襟を正したことは記憶に新しいですが、今回もそんな瀧内節が発揮された素晴らしいお話だったと思います。

武田さんセクション

弊社の会社紹介では執行役員の武田が登壇しました。成長戦略として掲げているCATALYST戦略を中心として、「ALBERTとはどういう会社か」というテーマで、事例を交えながら発表をしました。

事例として紹介させていただいたのは、厚生労働省クラスター対策班との協業で行った、新型コロナウイルス感染拡大防止の為の分析支援や、東京海上日動様との事故状況再現システムの例などを取り上げ、プレスリリースだけでは中々見えない現場の話題を提供させていただく機会となり、ARISE analytics社の皆様にも評判良く受け入れていただけたと思います。

野尻さんセクション

Lightning Talk セクションではトップバッターとして ARISE analytics社 から野尻さんにご登壇いただきました。なんとご自身の趣味でもあるというコスプレを披露しての発表となり、一気に場の空気を掴むロケットスタートを決めてくださりました。

一方で話の内容は、レコメンドエンジンや分散処理をテーマに、実際にレコメンドシステムを構築するにあたっての苦労話などを踏まえ深い考察を含んだ硬派な内容の発表となりました。中には身につまされる内容も多く、深いテーマだったと思います。

ARISE analytics社のTech Blogで上記の発表を基にした記事が公開されていますのでご興味ある方はこちらもご参照ください。

秋元さんセクション

Lightning Talk セクションの2番手として引き続き ARISE analytics 社の秋元さんにご登壇いただきました。

一つ前のレコメンドの話題とは打って変わり画像系のDeep Learning の話題として 速度チューニングのお話をしていただきました。研究テーマとしては広く取り扱われているものの、実際に実用化をするためにはまだまだ壁があるとして、特にモデルの推論速度に関する考察をしていただきました。

上述の問題に対して、推論プラットフォームを変えることによって速度向上を図るといったアプローチやそれに対する丁寧な考察、まとめなど、非常に有意義なものでした。 また本セクションでは全体を通して、もっとも質問が活発で原籍問わず喧々諤々と議論が交わされ、両者にとって非常に意義深い時間だったのではないかと思っています。

こちらの内容もARISE analytics社のTech Blogで解説が行われている為、ご興味ある方は是非ご確認いただければと思います。

古川さんセクション

Lightning Talkセクションの大トリは弊社先進技術部から古川が登壇し、生成モデルと3D表現を組み合わせた技術についての潮流の紹介を行いました。

弊社のBlogでも以前NeRFについて記事を書かせていただきましたが、今回はGANの技術に対して3D表現が乗ったvolume renderingを組み合わせることによって画像を合成するアプローチを代表的なGRAFの論文などを引きながら説明していきました。

単に先行研究をなぞるだけではなく、ポイントとなる所に細かくコメントや、勘どころなどを抑えながら実務者だからこそできる説明が随所に盛られたALBERT らしい発表となりました。

上記内容に関連して、弊社技術ブログでNeRFに取り上げたことがあります。ご興味がある方は是非ご参照ください。

終わりに

今回で2回目となるARISE analytics社との合同勉強会でしたが、コロナ禍でのオンライン開催にも関わらず、90名もの方にご参加いただくことができました。ご参加いただいた皆様ありがとうございました。

ARISE analytics社との合同勉強会では、技術的・ビジネス的に学ぶことが多く、有意義な時間を過ごすことができました。今後ともARISE analytics社と定期的に合同勉強会を開催し、貴重な知見共有の場として継続させていけたらと考えております。

ALBERT では、データサイエンティストを積極募集しています。
ぜひ採用ページをご覧ください。

The post ARISE analytics社と2回目の合同勉強会を開催いたしました。 first appeared on ALBERT Official Blog.

カメラパラメータを用いないNeRFの学習

$
0
0
こんにちは、先進技術部でアルバイトをしている上垣です。

今回はカメラ姿勢情報を用いずに写真のみからNeRF(Neural Radiance Fields)の3次元表現を獲得する手法について紹介します。

NeRF[1]とは、ニューラルネットワークを用いてNovel View Synthesis(NVS)というタスクを解く手法になります。NVSは、あるシーンについて多視点から撮影した画像群を教師データとして、別の新しい視点から見た画像を生成するタスクになります。NeRFはこのタスクにおいて、シンプルなMLPを利用しながら非常にリアルな画像の生成を可能としたため、現在注目を集めています。しかし、オリジナルNeRFの学習では撮影された画像それぞれに対して、撮影しているカメラの情報が必要となります。このカメラ情報を推定するためには、COLMAP[2][3]等の別の推定器を利用する必要がありました。それに対し、最近では事前のカメラ情報推定を行うことなくNeRFを学習させる手法が提案されています。本記事では、NeRFの前提となるカメラ情報について触れながら、事前のカメラ情報推定を必要としないNeRFの学習について紹介します。

NeRF

まず前提となっているNeRFについて以降で簡単に紹介しますが、詳細は以前のブログ記事をご覧ください。

NeRFでは画像に映るシーンを、空間における座標(x, y, z)とカメラの光線方向 \phi を入力として、その座標における色(r, g, b)と物体の密度 \sigma を出力するニューラルネットワークの関数として表現します(図1)。各座標に対して色/密度を対応づけたものを輝度場を呼びます。

図1: NeRFの概要図(論文[1]からの引用)
NeRFの輝度場から画像を復元する際には、図1において目のイラストで表されているカメラから光線(黄色)を飛ばし、その光線上にある点について密度 \sigma で重み付けした色情報の和を、復元画像1ピクセルの色とします。つまり、ある1ピクセルの色を再現するためには、視点とそのピクセルを結ぶ光線上で積分をするわけです。そして密度とは、「その座標に物体が存在しているか」に近いものとなりますが、直接的な有無ではなく、あくまで連続的な値になります。あえて密度の和を取る計算を行うことで復元の枠組み全体が微分可能となり、復元された画像と教師画像間の色の差を損失としてニューラルネットワークを学習することができます。このようにレンダリングの枠組み全体を微分可能とした手法は微分可能レンダリング(Differentiable Rendering)と呼ばれます。

カメラパラメータ

冒頭で述べた通り、NeRFの学習にはカメラの撮影情報が必要となります。カメラの撮影情報のことを以降では「カメラパラメータ」と呼びます。ここではカメラパラメータの種類や内容についてピンホールカメラモデルを例に紹介します。

座標系

まず、カメラ撮影に関わってくる座標系について整理します。 カメラ撮影では、画像座標とカメラ座標、世界座標の3つの座標系が関わってきます。
  • 画像座標 (u, v): ピクセルを単位とする画像の座標に当たり、被写体を含む撮影対象の空間がこの座標平面上に画像として投影されます。 
  • カメラ座標 (x_c, y_c, z_c): カメラの焦点を原点として、画像平面や被写体を周囲に配置した座標です。
  • 世界座標 (x_w, y_w, z_w): 計測機器の基準など何かしらの基準によって、カメラや画像平面、被写体を配置した座標です(図2)。 NeRFモデルの入力となるのは、この座標系での情報になります。 
図2: 世界座標における被写体(青)、画像平面(赤)とカメラ焦点(緑)の配置例
カメラパラメータは、これらの座標同士を変換する役割を持ち、大きく二つに分けられます。 一つは画像座標とカメラ座標の関係を表す内部(intrinsic)パラメータで、もう一つは世界座標とカメラ座標の関係を表す外部(extrinsic)パラメータです。 この二つのパラメータについて、それぞれ紹介します。

内部パラメータ

内部パラメータは画像座標とカメラ座標の関係を表すもので、焦点距離と画像中心が含まれます。画像中心は名前の通り画像平面のピクセル単位の中心です。焦点距離は、画像中心から焦点までの距離です。
カメラの焦点距離をf、画像の縦横ピクセルサイズをW, H、画像中心を c_x, c_yとし、簡単にするために画像平面や焦点、被写体の一部をz軸上に配置した場合、それぞれの関係は以下の図3のように表せます。

図3: カメラ内部パラメータ変換の概要
カメラ座標系の点Pを点P’に投影する場合、△POCと△P’OC’が相似なためそれぞれの値は以下のように求められます。

x_c' = \frac{f}{z_c}x_c
y_c' = \frac{f}{z_c}y_c

加えて、画像解像度による縦横での焦点距離の違いを考慮して焦点距離fを f_x, f_y に分け、オフセットとして画像中心を利用すると、カメラ座標系から画像座標系へ変換は以下の関係で表せます。


u = f_x\frac{x_c}{z_c} + c_x
v= f_y\frac{y_c}{z_c} + c_y

この関係を行列の形で表すため、同次座標系を導入すると以下のようになります。

s \left[\begin{array}{c} u \\ v \\ 1 \end{array}\right] = \left[\begin{array}{ccc}f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{array}\right] \left[\begin{array}{c} x_c \\ y_c \\ z_c \end{array}\right]

sは画像座標のz座標を1に固定するためのものであり、z_cと等しくなります。式中の以下の部分はカメラ行列Kと呼ばれます。

K = \left[\begin{array}{ccc}f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{array}\right]

反対に、NeRF等のように生成する画像のピクセル座標(u, v)をカメラ座標(x_c, y_c, z_c)に変換する場合は、

x_c = \frac{1}{f_x} (u - c_x)
y_c = - \frac{1}{f_y} (v - c_y)
z_c = -1

とすることで求められます。

外部パラメータ

外部パラメータとは、カメラ座標と世界座標の関係(変換)を表すものでした。外部パラメータには、カメラの回転(Rotation)と移動(Translation)が含まれます。カメラ座標 (x_c, y_c, z_c) から世界座標 (x_w, y_w, z_w) への変換は、カメラ座標に回転行列をかけたものを並行移動させることで実現できます。つまり、回転を \mathbf{R} \in \mathbb{R}^{3 \times 3} 、移動を\mathbf{T} \in \mathbb{R}^3とおくと、以下の式で表現できます。

\left[\begin{array}{c} x_w \\ y_w \\ z_w \\ 1 \end{array}\right] = \left[\begin{array}{ccc|c} & & & \\ & \mathbf{R} & & \mathbf{T} \\ & & & \\ \hline 0 & 0 & 0 & 1 \\ \end{array}\right] \left[\begin{array}{c} x_c \\ y_c \\ z_c \\ 1 \\ \end{array}\right]

なお、 \mathbf{R} \mathbf{T}からなる変換行列の形で定義される変換のことはSE3な変換と呼び、その内の \mathbf{R}のみで定義される変換(回転)はSO3な変換と呼びます。上記の式における4行4列のSO3な行列をカメラのポーズ(姿勢)行列と呼びます。

カメラの回転

回転の表現にはいくつかの種類があります。ここでは代表的な回転行列と回転ベクトルについて説明します。
回転行列
回転の表現として、一般的に用いられるものの一つに、回転行列があります。3次元の回転行列は3行3列の行列で表現されます。例えば、z軸を中心に\thetaの角度だけ回転させた場合の回転行列は以下のようになります。

\mathbf{R} = \left[\begin{array}{ccc} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \\\end{array}\right]

前述のカメラ座標から世界座標への変換における\mathbf{R}も回転行列の形を取っていました。回転行列は、座標変換が行列の積で行われるため、変換前後の座標の対応関係が分かりやすいです。一方で、回転行列は表現としては冗長なため、より冗長性のない回転表現として回転ベクトルが用いられることもあります。
回転ベクトル
回転ベクトル \mathbf{\omega} \in \mathbb{R}^3 は、ベクトルの大きさ|\mathbf{\omega}|が回転の角度\thetaを表し、正規化されたベクトル\frac{\mathbf{\omega}}{\theta}が回転の軸を表します。回転ベクトルと回転行列はロドリゲスの公式と呼ばれる以下の公式をもとに相互に変換することができます。以下の式では、回転ベクトルを回転行列に変換することができます。

\frac{\mathbf{\omega}}{\theta} = \mathbf{\phi} = \left[\begin{array}{c} r_0 \\ r_1 \\ r_2 \end{array}\right]

\mathbf{\hat\phi} = \left[\begin{array}{ccc} 0 & r_2 & r_1 \\ r_2 & 0 & r_0 \\ r_1 & r_0& 0 \end{array}\right]

\mathbf{R} = \mathbf{I} + \frac{\sin(\theta)}{\theta}\mathbf{\hat\phi} + \frac{1-\cos(\theta)}{\theta^2}(\mathbf{\hat\phi})^2

カメラの移動

カメラの移動 \mathbf{T} \in \mathbb{R}^3 は名前の通り、カメラ座標から世界座標へのものの移動になります。 カメラ座標系でカメラは原点に存在していたので、\mathbf{T}そのものが世界座標におけるカメラの位置になります。 同様に、カメラ座標でカメラの周囲に配置していたレンズ平面や被写体は、回転後に移動ベクトルを加算することで世界座標へと変換されます。

カメラパラメータによる座標変換とNeRF 

NeRFにおけるレンダリングのように、焦点から画像の各ピクセルに向けた光線上で積分を行う場合、世界座標系での計算となるため、光線の始点であるカメラ焦点と光線の方向は世界座標系の値で得る必要があります。学習に使う画像は、画像座標系上のピクセルに色の情報が付与されたものなので、画像座標からカメラ座標、カメラ座標から世界座標という順番で変換することになります。世界座標における画像平面の(i, j)位置の座標を \mathbf{p_{ij}} \in \mathbb{R}^3 とすると、焦点の位置は \mathbf{T} なので、焦点から \mathbf{p_{ij}} へ向かう視線は以下のようになります。

\mathbf{d_{ij}} = \frac{\mathbf{p_{ij}}-\mathbf{T}}{|\mathbf{p_{ij}}-\mathbf{T}|}

この視線ベクトル \mathbf{d_{ij}} を伸ばした先に画像1ピクセルに映る色の情報が存在していると考えられます。視線ベクトルを延長した範囲からサンプリングした各座標に対して、ニューラルネットワークを用いて色と密度を求めることで、微分可能なレンダリングが可能になるわけです。

カメラのパラメータを用いないNeRF

以降では、事前のカメラパラメータ推定を行わずにNeRFの3次元表現を獲得する手法について紹介します。

NeRF--

NeRF--[4]は、カメラの内部パラメータ(焦点距離)と外部パラメータ(回転、移動)の最適化をNeRFの学習と同時に行う手法になります。具体的には、カメラのパラメータも全てニューラルネットワークのパラメータとして扱います。これまで見てきた通り、カメラパラメータによる座標変換は全て行列計算で表現できるため、NeRF学習の損失をそのまま逆伝播させることができます。図4はNeRF--学習の流れになります。

図4: NeRF--の学習ループ(論文[4]からの引用) 
NeRFと異なる点はカメラの回転\phiや移動\mathbf{t}、焦点距離 f_x, f_y をパラメータ化しているのみで、残りの処理は基本的にはNeRFと同じです。 カメラの回転については、回転行列を直接最適化する方法もありますが、回転行列には「行列式が1の直交行列である」という条件があり、直接最適化してしまうと条件を満たさなくなる可能性があります。そこで、モデル内パラメータとしては回転ベクトルの形で保持しておき、ロドリゲスの公式を使って回転行列に直しています。 回転ベクトルと移動ベクトルの初期値は全て0としています。回転ベクトルの全要素が0の場合、回転行列に直すと3行3列の単位行列となります。つまり、初期状態としてはすべてのカメラ座標系が世界座標の原点に置かれて-z軸方向を向いている状態から最適化がスタートします。 焦点距離については、画像の横ピクセル数Wと縦ピクセル数Hをそれぞれ f_x, f_y の初期値としています。 画像中心 c_x, c_y は以下のように固定しています。

c_x = \frac{W}{2}, c_y=\frac{H}{2}

図5は、正面向きに撮影した多視点画像データ(LLFFデータセット[5])についてNeRF--の再現実装を用いて学習したものになります。

図5: NeRF--によるLLFF[5]のRoomデータの生成画像(GIF) 
NeRF--は非常にシンプルな方法でカメラの最適化を行なっていますが、「被写体に対して概ね同じ向きで撮影する必要がある」「画像間でのカメラの移動は小さなものである必要がある」といった制限が残っています。例えば360度様々な視点から撮影したようなデータの場合、最適化が難しいです。

BARF

BARF[6](Bundle-Adjusting Neural Radiance Fields)はNeRF--と同時期に発表された手法で、カメラの内部パラメータは既に分かっているものとして、外部パラメータのポーズ行列推定/修正を行うモデルになります。BARFでは、NeRF--で行なっていたロドリゲスの公式による回転ベクトル変換は行わず、4行4列のポーズ行列を直接推定します。前述の通り、ポーズ行列そのものは冗長な表現なのですが、NeRFで用いられている位置エンコーディング(Positional Encoding)の扱いを工夫することで最適化できるようにしています。

NeRFでは、空間の高周波な情報を利用するため、ニューラルネットワークへの入力であるレンダリングの光線方向dとレンダリング光線上のサンプル点xに対して位置エンコーディングと呼ばれる変換を行います。位置エンコーディングは以下の式で表されます。

\gamma(\mathbf{x}) = [\gamma_0(\mathbf{x}), \gamma_1(\mathbf{x}),…, \gamma_{L-1}(\mathbf{x})] \in \mathbb{R}^{6L}

\gamma_k(\mathbf{x}) = [\cos(2^k\pi\mathbf{x}), \sin(2^k\pi\mathbf{x})] \in \mathbb{R}^6

位置エンコーディングよりも後段のニューラルネットワークのみを学習するオリジナルNeRFの画像生成では、この位置エンコーディングが重要な役割を果たしていました。しかし、位置エンコーディングよりも前段にあるカメラパラメータまで誤差の逆伝播が必要になるカメラパラメータ推定では問題が起こります。位置エンコーディングの勾配は以下の式のようになり、勾配が 2^k\pi だけ増幅されてしまいます。

\frac{\partial \gamma_k(\mathbf{x})}{\partial \mathbf{x}} = 2^k\pi[-\sin(2^k\pi\mathbf{x}), \cos(2^k\pi \mathbf{x})]

kは周波数帯の区分と考えられるため、kの大きな部分、つまり高周波な部分ほど勾配が増幅されることになります。このように位置エンコーディングの周波数帯によって勾配の大きさが変化することがカメラパラメータ推定を不安定にしているとして、BARFではそれを改善する方法を提案しています。具体的には、学習の経過に応じて位置エンコーディングに以下のような重みをつけてフィルタします。

\gamma(\mathbf{x}) = [\mathbf{x}, \gamma_0(\mathbf{x}), \gamma_1(\mathbf{x}),…, \gamma_{L-1}(\mathbf{x})] \in \mathbb{R}^{3+6L}

\gamma_k(\mathbf{x}; \alpha) = w_k(\alpha)[\cos(2^k\pi\mathbf{x}), \sin(2^k\pi\mathbf{x})] \in \mathbb{R}^6

w_k(\alpha) = \begin{cases} 0 & \alpha < k \\ \frac{1}{2}(1-\cos((\alpha-k)\pi)) & 0 \leq \alpha-k < 1 \\ 1 & \alpha-k \geq 1 \end{cases}

位置エンコーディングの\alphaは0からLまでの値を取り、論文では全体で2000epochの学習スケジュールの内400epoch(\alpha=0)から800epoch(\alpha=L)までの間で線形に変化させています。これは、学習初期にはサンプル座標xや光線方向dといった低周波成分のみを使い、学習が進むに連れて位置エンコーディングの高周波成分を含めて使うフィルタになっています(図6)。学習経過によって複雑な信号をフィルタする方法のことを、論文ではcoarse-to-fine registrationと呼んでいます。オリジナルNeRFのレンダリング方法にもcoarseとfineという2種類の方法がありますが、これとは別のものです。

図6: 位置エンコーディングとBARFのフィルタ 
BARFは位置エンコーディングに改良を加えることで、正面向き撮影データ(LLFFデータセット)では未知のパラメータから、様々な視点から撮影したデータ(NeRF Syntheticデータセット)ではCOLMAP推定値に一定のノイズを加えたパラメータから、それぞれ推定や修正を可能としています。具体的なノイズとしては、回転角度で14.9度、移動ベクトルの大きさで0.26をそれぞれの分散とした正規分布からのサンプリングノイズを加えているとのことでした。

実験

これまでに紹介したNeRF--やBARFの手法には、それぞれ制限がありました。NeRF--では概ね同じ向きでの撮影、カメラ移動の少なさといった制限があり、BARFでは360度様々な視点からの撮影であってもCOLMAP推定パラメータに一定のノイズを加えた範囲からの復元程度という制限でした。特にBARF論文におけるノイズの与え方は一定であり、どの程度の範囲まで対応できるのかが不明瞭であるため、今回は他モデルも含めてカメラパラメータ推定可能な範囲を調べる実験を行いました。

比較するモデルは以下の4条件としました。
  • 回転行列推定
    • NeRF PE条件: 位置エンコーディングにオリジナルNeRFのものを利用 
    • BARF条件: 位置エンコーディングにBARFを利用
  • 回転ベクトル推定
    • NeRF--条件: 焦点距離・画像中心をCOLMAP推定値で固定したNeRF--
    • BARF--条件: NeRF--条件の位置エンコーディングをBARFに変更 
学習設定は基本的にBARFの設定を利用し、視線上の点のサンプリング方法はcoarseのみ(ネットワークも一つのみ)で行い、1視線あたりのサンプリング数は128点としました。学習1ステップには4枚の画像を用い、画像1枚からのサンプリング数を1024点として2000epoch学習しました。学習率はNeRF部分で5e-4から1e-4まで、カメラパラメータ部分で1e-3から1e-5まで指数関数的な減衰をさせています。学習の前半はカメラポーズに対して大きめの学習率で最適化を行い、後半にNeRFのMLPに対して大きめの学習率で学習するスケジュールとなっています。
データセットにはDeepVoxelsデータセット[7]のGreekというデータを利用しています。このデータはNeRF--の紹介で利用したLLFFデータセットとは異なり、1つのシーンを様々な位置・角度で撮影したもので、より最適化の難しいデータセットだと考えられます。

まずはBARF論文と同様、角度が分散14.9度、移動が分散0.26となるように正規分布からサンプリングしたノイズを加えた場合について、カメラ姿勢推定結果の相対誤差とカメラプロット、生成画像を確認します。姿勢の誤差については、必ずしもCOLMAPと同じ基準で推定できるとは限らないため、RPG Trajectory Evaluation[8]というツールを利用して相対的な誤差を求めています。カメラのプロットと各評価指標について表1にまとめます。なお、カメラプロットについては、見やすさのために画像平面の縦横サイズを半分にし、撮影点も479件中20件をサンプルとして取り出しています。

カメラプロット平均回転誤差平均移動誤差
ノイズ
0.5761.053
NeRF PE
0.4660.687
NeRF--
0.3210.439
BARF
0.3010.434
BARF--
0.1620.255
表1: BARF論文のノイズ設定から復元した結果の比較


すべてのモデルである程度のカメラポーズ最適化ができていることがわかります。しかし、生成した画像(表2)をみると、NeRF PE条件では物体をレンダリング出来ていないフレームが確認できます。なお、画像は正解データ上で同じ撮影点にあたるフレームをスタートとして撮影点を回転させながらレンダリングしています。

手法NeRF PENeRF--BARFBARF--
生成GIF
表2: BARF論文のノイズ設定における生成GIF


NeRF PE条件とBARF条件を比較することで、BARFの位置エンコーディングには大きく二つの役割があることが分かります。一つ目はニューラルネットワーク上のカメラパラメータへの誤差逆伝播を安定させ位置ズレ修正を効果的にする役割です。二つ目は、学習初期に低周波成分のみを使うことでレンダリングに余裕を持たせ、大規模なポーズ修正が行われてもレンダリングに影響が出ないようにする役割です。 NeRF PE条件とBARF条件との生成画像比較で見られる差から後者の影響が確認できます。
NeRF--もNeRF PE条件よりも良い最適化が行えています。回転の情報をモデル内部で回転ベクトルとして保持しておくことで、回転行列を直接推定する場合よりも不要なパラメータ更新が減り、効果的に学習できていることが分かります。
BARF--条件では、BARF条件やNeRF--条件よりも更に精度が改善されています。単純な手法の掛け合わせであっても、BARFにおける位置エンコーディングマスクとNeRF--における回転ベクトルのそれぞれの役割が異なっているため、有効であったと考えられます。 特に、NeRF--条件では生成画像の品質に大きな問題が見られないことから、BARF手法がポーズ修正を効果的にしていることが確認できます。

カメラポーズ推定・レンダリングの両方ができたNeRF--、BARF、BARF--の3条件について、ポーズに加えるノイズを1.5倍(回転角度で分散約22.5度、移動ベクトルで分散0.39)として再度学習を行いました。特にBARF--については、BARF論文の設定で他2手法よりも精度的な余裕があったため、より強いノイズからの復元が期待できそうです。その結果が表3の通りです。

カメラプロット平均回転誤差平均移動誤差
ノイズ
0.8191.273
NeRF--
0.6651.035
BARF
0.4770.790
BARF--
0.4330.709
表3: 1.5倍のノイズ設定からの復元結果の比較 


カメラのプロットではBARF--だけはある程度ポーズ修正ができていそうです。誤差の数値でいえばBARFも近いので、ここでも生成GIFを比較してみます(表4)。

手法NeRF--BARFBARF--
生成GIF
表4: 1.5倍のノイズ設定での各手法の生成GIF 


BARFとBARF--のどちらの条件でも、生成画像ではレンダリングミスはさほど見られません。BARFのカメラプロットが大きくズレている理由として、元のノイズが大きかったために最適化する際の座標の基準が変わった可能性や、プロットのサンプル取得時に差の大きなものが固まった可能性などが考えられます。 
しかし、いずれにしても相対的な回転誤差が0.40以上、移動誤差が0.70以上であり、一つ目の実験で描画がうまくいかなかったNeRF PE条件に近い結果となっているため、1.5倍ノイズからの復元が限界のようです。実際にBARF条件、BARF--条件について2倍ノイズからの復元実験も行いましたが、どちらのモデルでもレンダリングミスが発生し始めていました。

以上から現在の手法では、回転角度の分散22.5度、移動の分散0.39程度の正規分布からのサンプリングノイズを修正するのが限界であり、実用上はBARF論文の設定である回転15度、移動0.26程度のノイズが見込まれる場合に利用するのが現実的だと考えられます。

まとめ

今回は、NeRFの派生手法について、事前にカメラパラメータ推定を行うことなくNeRFモデルを学習可能な手法の調査と実験を行いました。 
カメラパラメータ推定を含むモデルでは色と密度\sigmaに加え回転、焦点位置、焦点距離の全てが未知な状態で辻褄を合わせることになるため、各パラメータの初期値に依存しやすいです。理想は撮影位置や角度に影響されず様々な視点からの撮影が可能となることですが、現時点ではまだ難しいようです。 
現状の活用方法としては、画像のみからの一貫したNeRF表現の獲得というよりかは、前段のCOLMAPなどで推定誤差が発生した場合に頑健なパイプラインとしての活用が主になりそうです。今回の記事では対象としませんでしたが、最近ではカメラのレンズ歪みを考慮してカメラ姿勢誤差も修正できるSCNeRF[9](Self-Calibrating Neural Radiance Fields)という手法も提案されており、カメラ姿勢推定の後処理としても期待ができる技術だと思います。今後仮に撮影視点に関する問題を解決するような手法が出た場合、自己位置推定とマップ作成の同時最適化ができる一貫した手法として、SLAM技術への応用も期待できます。

ALBERTでは、様々な専門的バックグラウンドを持つリサーチャー・アナリストを募集しています。詳しくは採用ページをご覧ください。

参考文献

  1. Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng: “NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis”, Proc. ECCV 2020. 
  2. Schönberger, Johannes Lutz and Frahm, Jan-Michael: “Structure-from-Motion Revisited”, Proc. CVPR 2016. 
  3. Schönberger, Johannes Lutz and Zheng, Enliang and Pollefeys, Marc and Frahm, Jan-Michael: “Pixelwise View Selection for Unstructured Multi-View Stereo”, Proc.ECCV 2016. 
  4. Zirui Wang and Shangzhe Wu and Weidi Xie and Min Chen and Victor Adrian Prisacariu: “NeRF--: Neural Radiance Fields Without Known Camera Parameters”, arXiv preprint arXiv:2102.07064, 2021. 
  5. Ben Mildenhall and Pratul P. Srinivasan and Rodrigo Ortiz-Cayon and Nima Khademi Kalantari and Ravi Ramamoorthi and Ren Ng and Abhishek Kar: “Local Light Field Fusion: Practical View Synthesis with Prescriptive Sampling Guidelines”, ACM Transactions on Graphics (TOG), 2019. 
  6. Lin, Chen-Hsuan and Ma, Wei-Chiu and Torralba, Antonio and Lucey, Simon: “BARF: Bundle-Adjusting Neural Radiance Fields”, Proc. ICCV 2021. 
  7. Sitzmann, Vincent and Thies, Justus and Heide, Felix and Niessner, Matthias and Wetzstein, Gordon and Zollhöfer, Michael, “DeepVoxels: Learning Persistent 3D Feature Embeddings”, Proc. CVPR 2019. 
  8. Zhang, Zichao and Scaramuzza, Davide: “A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry”, Proc. IEEE 2018. 
  9. Yoonwoo Jeong, Seokjun Ahn, Christopehr Choy, Animashree Anandkumar, Minsu Cho, and Jaesik Park Park: “Self-Calibrating Neural Radiance Fields”, Proc. ICCV 2021. 

The post カメラパラメータを用いないNeRFの学習 first appeared on ALBERT Official Blog.

オンライン全社イベント『ALBERT DAY 2021』を開催しました。

$
0
0

9月22日、ALBERTでは初となるオンライン全社イベント「ALBERT DAY」を開催しました。

これまでは全員が集まって対面でのイベントを開催していましたが、今年は社会情勢も鑑みてオンラインでの開催となりました。当日は250名を超えるメンバーがオンライン会場に集まり、各プロジェクトの紹介や表彰などを通じて会社としての一体感が感じられ、大いに盛り上がりました。

今回は、そんな「ALBERT DAY 2021」の企画・準備から当日の様子までをまとめました。

メンバーによるメンバーのためのイベント開催を企画
今回は、従業員が主体のイベントとして「全体を知る、認め合う、わくわくする」の3つをテーマに、オンライン全社イベント「ALBERT DAY 2021」の企画を開始。会社の今を多面的に知る機会として、オンラインでもメンバー同士のつながりをしっかりと実感できるような参加体験を目指しました。

運営メンバーでアイデアを出し合い、テーマに沿って「プロジェクト紹介」「1問1答リレー」「ALBERT Award 2021」 の3つの企画を考えました。

さらに企画の他にも、今回はメンバーの存在感や会社としての一体感・つながりを感じてもらうことにこだわりました。リモートで盛り上がるには何が必要か、運営メンバーで相談しながらひとつひとつ検討・検証を重ねました。

結果として、今回は多数のツールの中から「oVice」と「Slack」を使うことにしました。
「oVice」はオンライン上でアバターを使って自由に動いて相手に話しかけたりすることができるコミュニケーションツールです。

ALBERTでは以前から社内コミュニケーション促進のためにoViceを導入しており操作に慣れているメンバーが多かったのと、ZoomやTeamsにはない「距離感」や「空間の共有」が視覚的に感じられるところがポイントでした。
オンライン会場では、知り合いを見つけて話しかけたりといったこともできる点も魅力です。

ALBERT DAY会場:会場が広すぎてわかりにくいですが、参加者がアバターアイコンでどこにいるか分かるようになっています。


もう一つの「Slack」も、ALBERTでは日常的に使用されているチャットツールです。
oViceにもチャット機能はありますが、使い慣れたツールで手軽にコメントしてもらえるよう、ALBERT DAY専用のコメントチャンネルを作成して併用しました。

動画を見ながら感想を共有したり、表彰されたメンバーへのお祝いコメントをみんなで送ったりなど、盛り上がっている様子がリアルタイムに感じることができました。

実際の参加者から見える画面はこんな感じでした。(oViceで動画を共有+Slackでコメント投稿)



■当日の様子(第1部)
運営メンバーは本社セミナールームから配信を行いました。

開始時間の間際には、ログインしてくる人(のアバター)で入り口がざわざわし、慣れない操作でうろうろしている人など、なんとなくリアルなイベントを思い出す風景でした。


いよいよイベントが始まり、まずはオープニングムービーが流れ出します。

・・・動かなくなりました(泣)!!!!

開始5分もたたないうちに、次々にSlackに送られてくる「見られない」「止まりました」「運営がんばれ!」のコメント。焦る運営。何度かやり直して、なんとか最後まで見てもらうことができました。

そんなオープニングムービーでは、設立から15年のALBERTの歩みやコロナ禍以降の会社の取り組み等について振り返りました。


■「プロジェクト紹介」 ~4つのプロジェクトを取材~
今回はALBERTが手掛ける多くのプロジェクトのうち、共同研究開発やデータサイエンティスト育成支援、事業会社の分析支援など4つのプロジェクトについて、チームメンバーへのインタビューや打合せ風景などを撮影させてもらいました。

各チームの個性や雰囲気がよく出ており、メンバー同士の関係性やそれぞれの人柄なども知ることができました。



■「1問1答リレー」 ~コロナ禍に入社したメンバーにライブインタビュー~
次は、コロナ禍でリモートワークが定着した期間に入社された8名の方に登壇してもらい、仕事観やこれまでの経験、プライベートまで、質問をリレー形式でつなげていく企画です。
運営メンバーがMCとなってトークが展開され、登壇メンバーの人柄を知る貴重な機会となりました。



■「ALBERT Award 2021」 ~行動指針を最も体現したメンバー、チームを表彰~
最後は、ALBERT Award 2021受賞者の発表です。
ALBERTには企業ミッションを実現するための7つの行動指針があるのですが、それぞれをもっとも体現した個人・チームにアワードが贈られます。
事前に各候補者を公開して社内投票をしており、当日はその結果発表を行いました。

Slack上では、受賞者が発表される度にお祝いのメッセージがたくさん送られ、社長からも直接のお祝いコメントがあったり、最後の企画にふさわしい盛り上がりでした。



■第2部 ~食事をしながらコミュニケーションタイム~
盛り上げ上手な社員2名に司会をバトンタッチし、飲食(もちろんアルコールも)ありの気軽なコミュニケーションの時間です。
企画の全員参加ビンゴ大会では豪華賞品を用意した甲斐があり、Slackでも大いに盛り上がりました。

日頃の業務では見られないメンバーの意外な一面が見れたり、楽しんでもらうことができたのではと思います。


・ビンゴ大会
10名以上に豪華景品があり、最後まで盛り上がりました。
後半のじゃんけん大会の熱気は本当にすごかったです。


・食事、ノベルティ、BOX
ロゴ入ダンボール、使いたくなるノベルティ、おいしい食事、などなど運営のこだわりがたくさん詰まったオリジナルBOXを事前に配達。Slackでは、そんなこだわりに気付いてくれたり共感してくれたりするコメントをたくさんいただきました。
オリジナルのロゴ入りBOX、軽食、メッセージカード、ロゴ入りタンブラー


■社内アンケートより
通信環境の整備に関しては大いに反省が残るものの、実施に関してはなんと8割~9割が「やって良かった」という高評価でした。


(以下、コメントの一部をご紹介します)
———————————————————-
“社員数の増加やリモート勤務などで近頃はALBERTに所属している実感が希薄になってしまっていたけれど、このイベントのおかげで久しぶりに実感がわき、改めてメンバーの良さに気付けたと思います。”

“普段が在宅で限られた人としか関わらないため、自分のプロジェクト以外に目を向けることが新鮮でよかったです。”

“気軽に参加できたのもよかったですし、slackでみんなでリアクションしながら進んでいくのも新鮮でした。”

“あのときアルバイトだった●●くんが今やPMだなんて、とウルウルいたしました。皆さんの成長が眩しいです!”

“産休中でも自宅から参加させていただけて有り難かったです。”

“東海からの参加だと東京までの移動で業務時間が削れてしまいますが、リモートだとそのあたり負担なく開催できるのが良かった。ただ、音声やVPN等、通信面での課題もあったなと思います。”

“オンラインではありますがリアルタイムで同じ内容を共有できるのは盛り上がるなと思いました。”

“表彰された方もそうでない方も仕事のモチベーションにつながってとても良い企画と感じました。自分も次回推薦されるよう尽力します。”

———————————————————-

■さいごに
様々な不安やハプニングがありながら、社内の協力のおかげで開催できた「ALBERT DAY 2021」。
やはり対面での開催がいいという意見もあるものの、懸念していた「オンライン開催では感動や熱量は伝わらないのではないか」という不安も工夫次第で解消できることがわかりました。

社内からも実施して良かったとの声が多く安心しましたが、一方でどんなにいい企画でもネット環境や通信がうまくいかないと熱量や感動は半減してしまうので、今回の反省を今後にしっかり活かしていきたいと思います。

コロナ禍ではどうしてもコミュニケーション機会が減ってしまいがちですが、今回ALBERT DAYを通じて会社という大きなチームの一体感や一緒に働くメンバーの存在を改めて感じてもらうことができました。
ますます働き方や価値観が多様化していくなかで、ARBERTらしい働き方ができる環境をつくれるよう、社内メンバーと協力して今後も様々な取り組みにチャレンジしていく予定です。


ALBERT では、一緒に働いてくれる仲間を積極募集しています。
興味をもっていただけたら、ぜひ採用ページをご覧ください。

The post オンライン全社イベント『ALBERT DAY 2021』を開催しました。 first appeared on ALBERT Official Blog.

Viewing all 191 articles
Browse latest View live