Blog
本記事は、2020年夏のインターンシップに参加された宮本柊吾さんによる寄稿です。
はじめに
2020年度PFN夏季インターンに参加していた東京大学の宮本です。大学では数値流体力学の計算手法について研究しています。今回のインターンでは、微分可能レンダラと物理シミュレーションの融合をテーマに、複数視点からの画像を用いたケーブルの状態推定に取り組みました。本稿ではその内容をご紹介します。
概要
ロボティクスや医療などの様々な分野において、変形するオブジェクトの状態推定を行うことが重要な場面が存在します。これらのオブジェクトは事前に形状を予測することが難しいため、カメラから得た情報を元にその形状を推定する技術が重要となります。
Yan et al. [1] による研究では、単一視点による画像を元にケーブルの状態を推定する方法が提案されていますが、ケーブルの形状が複雑になったり、結び目が発生したりすると推定が困難になる問題があります。
今回のインターンでは、複数視点から観測した画像を元に、静止したケーブルの3次元情報を復元する課題に取り組みました。推定には微分可能レンダラ [2] の一種である PyTorch3D [3] を用いた勾配計算を利用し、推定を補助するために物理シミュレーションを行います。さらに、既存手法では難しかった結び目などの複雑な形状に対応させるため、ケーブル延長とディレクション損失項を導入する手法を新たに提案します。
微分可能レンダラ
微分可能レンダラを用いることで、ラスタライズ方式によるレンダリング、すなわち、3次元空間上に存在するメッシュを仮想的なカメラを用いて2次元のスクリーン上に射影し、スクリーン上のピクセルを着色する作業が全体を通して微分可能になります。
したがって、レンダリング後の画像を用いて計算した損失関数について、その偏微分係数をメッシュの頂点座標やカメラのパラメータ、さらにはテクスチャの画素値に対して求めることができます。これにより、例えばメッシュの情報と目標となるレンダリング結果が与えられたとき、カメラのパラメータに対して勾配降下法を利用することで、目標のレンダリング結果が得られるようなカメラ位置を推定するといったことが可能になります。また、メッシュの頂点座標に対して勾配降下法を適用すれば、目標のレンダリング結果に合うようなメッシュを推定することができます。
ケーブルの表現と状態の推定
ケーブルは複数の頂点を用いた折れ線として表現します。レンダリングを行う際は、これらの頂点座標を用いて筒状のメッシュを生成します。このとき、微分可能な演算を用いてメッシュを作成することで、レンダリング結果をケーブルの頂点座標に対して微分することができ、頂点座標の最適化が可能となります。
推定のプロセス
全体の推定プロセスは以下の図のようになっています。
ケーブルの形状を保つために物理シミュレーションを実行しつつ、目標画像へのフィッティングとケーブルの延長を行うループになっています。
損失関数
ケーブルの状態を推定するために、複数種類の画像により損失関数を計算します。これらの画像は、推定する目標に合わせて事前に用意しておく必要があります。
シルエット画像による損失
シルエット画像による損失では、ケーブルをスクリーンに投影した “影” によって位置合わせを行います。複数の視点から得られる画像を複合的に用いることにより、ケーブルの3次元構造を捉えることができます。レンダリングによって得られた画像と目標の画像の平均二乗誤差をシルエット画像による損失項として損失関数に加えます。
ディレクション画像による損失
ディレクション画像による損失では、各ピクセルにおいて記録された方向ベクトルを用いてケーブルの進行方向を合わせます。記録された方向ベクトルは、スクリーン空間におけるケーブルの進行方向を表す単位ベクトルであり、以下の式を用いてピクセルごとに進行方向の不一致度を測り、全ピクセルにおける平均値をディレクション画像による損失項として損失関数に加えます。
\[1-(\boldsymbol v^\text{input}\cdot\boldsymbol v^\text{target})^2\]
ここで、\(\boldsymbol v^\text{input}\) はレンダリングによって得た単位方向ベクトル、\(\boldsymbol v^\text{target}\) は目標画像の単位方向ベクトルを表します。ケーブルの前後の方向には任意性があるため、180度反転したベクトルは同一の方向として扱われます。この損失項により、シルエットによる推定に加え補助的な補正を行う効果が期待されます。
物理シミュレーションによる頂点座標の修正
勾配ベクトルを用いた頂点座標の修正を繰り返すと、部分的に伸び縮みする、自分自身にめり込むなど、ケーブルが物理的に正しくない状態に陥ることがあります。そのため、推定と同時にケーブルの物理シミュレーションを実行することで、物理的に正しい状態を保ったまま頂点座標の修正を行います。
シミュレーションには位置ベースの手法を用います。ケーブルの各頂点を質点と見なし、隣接する頂点間を疑似的なバネで接続して計算を行います。また、頂点を球体と見なして自己衝突処理を行うほか、ケーブルが過度に折れ曲がるのを防ぐための拘束を導入しました。今回のシミュレーションでは、物理的な正確さよりも安定性・高速性が重視されるため、Shape Matching 法に似た手法を採用しています。
ケーブルの延長
推定開始時にはケーブルは非常に短い長さで初期化され、推定の進行に合わせて少しずつ長さを伸ばしていきます。これにより、ケーブルが局所的に正しい位置に収まったまま推定が進むため、誤った局所解に陥りにくくする効果があります。
ケーブル延長手法を適用せずに結び目に対するフィッティングを行うと、以下のような結果が得られます。ケーブルの連続性を保ったまま各頂点が独立にシルエットを合わせようと動くため、全体として正しい位置に収束しません。
また、延長を行う際は、ケーブルが端点を超えて伸びないよう、前後のどちらに伸ばすかを損失関数に対する深さ 1 の貪欲探索により決定します。
端点を超えてケーブルが伸びた場合、シルエットの一致しない領域が発生するため、損失関数の値が増加します。一方、シルエットに収まる方向にケーブルが伸びた場合、シルエットの差分が減少するため、損失関数の値は減少します。実際に損失関数の値がより小さくなった方向にケーブルを伸ばすことにより、間違った方向にケーブルを伸ばす可能性を下げることができます。
複数視点の利用
先述の通り、複数視点からの画像を用いることでシルエットの情報から3次元構造を推定することが可能になります。そこで、ケーブルの推定対象となる物体を半球面上の複数の視点から撮影/描画し、損失関数の目標画像として利用します。視点の数に合わせて計算時間が線形に増大しないよう、勾配の計算時には、ランダムに選択した視点について求めた損失関数を利用します。
結果と考察
以下に推定結果の例を示します。
シンプルな結び目の推定結果の例です。ケーブルが伸びながらフィッティングが進行している様子が確認できます。ケーブルの左側が端点に到達した後は、推定の終了まで右側に伸び続けています。
もう少し複雑な結び目による計算例です。ケーブルが交差する地点において物理シミュレーションによる自己衝突処理が働き、めり込みを防いでいる様子が確認できます。先程の例と同様に、左側が端点に到達した後はもう片方が伸び続けています。
以上の例では合計 32 視点を用いて推定を行いましたが、同様の推定目標に対しては共に 6 視点でのフィッティングに成功しています。今後はさらに必要な視点数を減らすことや、実写画像に対するディレクション情報のアノテーションを自動で付加する仕組みの開発が課題として挙げられます。
おわりに
今年のインターンはオンラインでの開催となり、期間も例年より短い約一ヶ月でしたが、様々な方によるサポートがあり、有意義なインターンにすることができました。私自身の機械学習ライブラリの利用経験が少なかったこともあり、取り組んだテーマの難しさを日々実感しながら進めていましたが、最終的に目に見える形で成果を残すことができたことは非常に嬉しく思います。メンターの松元さん、副メンターの菊池さんには期間中大変お世話になりました。また、他にも多くの方々から沢山の有益なアドバイスを頂きました。この場を借りて御礼申し上げます。
参考文献
[1] Yan, Mengyuan, et al. “Self-Supervised Learning of State Estimation for Manipulating Deformable Linear Objects.” IEEE Robotics and Automation Letters 5.2 (2020): 2372-2379.
[2] Kato, Hiroharu, et al. “Differentiable Rendering: A Survey.” arXiv preprint arXiv:2006.12057 (2020).
[3] Ravi, Nikhila, et al. “Accelerating 3D Deep Learning with PyTorch3D.” arXiv preprint arXiv:2007.08501 (2020).
Area