Scene Flow
シーンフローがフレーム間でどのように3Dモーションを推定するか、オプティカルフローや深度推定との違い、そして自動運転、ロボット工学、YOLO26のビジョンワークフローをどのようにサポートするかについて学びます。
シーンフローは、動的なシーンの時間経過に伴う3次元のモーションフィールドです。フレーム間での現実世界の3D空間における可視点の移動(横方向、垂直方向、カメラに向かう方向やカメラから離れる方向の動きを含む)を記述します。コンピュータビジョンにおいて、シーンフローは画像内で何が動いているように見えるかだけでなく、周辺のジオメトリが実際にどのように変化しているかをシステムが理解するのに役立ちます。
シーンフローによる3Dモーションの表現方法#
シーンフローの推定では、観測された各シーンのポイントに3D変位ベクトルまたは速度ベクトルが割り当てられます。たとえば、歩行者がカメラに近づきながら道路を横切る場合、対応するベクトルは、横方向の動きと、カメラまでの距離が縮まる様子をどちらも記述します。
これは、2次元の画像平面全体の見かけ上のピクセル移動を表すオプティカルフローとは異なります。Carnegie Mellon Scene Flow projectで説明されているように、オプティカルフローは、3Dシーンフローをカメラ画像に投影したものとして理解できます。そのため、深度方向の動きが異なっていても、2つのポイントの画像上の動きが類似している場合があります。
デンスシーンフローは可視点の大部分のモーションを推定し、スパースシーンフローは選択された特徴量、追跡されたポイント、またはLiDARの反射データを対象とします。デンス出力はより豊富なジオメトリの詳細を提供しますが、より多くの計算と、フレーム間の信頼性の高い対応関係が必要です。
シーンフローと関連するビジョン関連概念の比較#
シーンフローは、空間構造と時間的なモーションを組み合わせたものであり、いくつかの関連タスクの中間に位置します:
- OpenCVによるオプティカルフロー推定: ピクセルの水平方向および垂直方向の変位を推定します。オブジェクトが深度方向に移動したのか、それともカメラが原因で見かけ上の動きが発生したのかを独立して判断することはできません。
- 深度推定: 通常は1つのフレームに対して、サーフェスがカメラからどのくらい離れているかを決定します。シーンフローはさらに、それらの3D位置が時間とともにどのように変化するかを記述します。
- ステレオビジョン: 同期されたカメラからの対応するピクセルを使用して深度を復元します。OpenCVステレオ深度ワークフローでは、ビュー間の視差がどのように3D再構築をサポートするかを説明しています。
- オブジェクトトラッキング: 通常バウンディングボックスやマスクを使用して、フレーム間でオブジェクトのアイデンティティを維持します。一方、シーンフローはポイントまたはピクセルレベルでモーションを推定し、1つの変形するオブジェクト内で異なるモーションを表現できます。
- 点群モーション: LiDARおよびRGB-Dシステムは、3D点群の間で直接シーンフローを推定する場合があります。Open3D点群ガイドでは、このような多くのパイプラインで使用される幾何学的表現について紹介しています。
シーンフローはカメラのジオメトリにも依存します正確なOpenCVカメラキャリブレーションは、実際のシーンのモーションを、カメラの回転、平行移動、またはレンズの歪みによって引き起こされた変化から分離するのに役立ちます。
実社会での応用#
-
自動運転: 知覚システムは、近くの車両が車線を変更しているのか、急速に接近しているのか、あるいは交通の流れに合わせて移動しているのかを推定できます。2Dモーション単体とは異なり、シーンフローには深度軸沿いの動きが含まれているため、衝突までの時間(TTC)の推論をサポートします。これは、自動車向けコンピュータビジョンソリューションにおいて、検出、トラッキング、および深度の各コンポーネントを補完することができます。KITTI scene flow benchmarkは、カメラの動きや独立して移動するオブジェクトを含む道路シーンでの評価を示しており、一方NHTSA automated vehicle safety guidanceは、安全性に特化した知覚システムに関するより広い文脈を提供します。
-
ロボティクス: モバイルロボットは、シーンフローを使用して、静止している棚と移動中の作業員を区別し、障害物の3D軌道を推定し、衝突が発生する前にその経路を更新することができます。ロボティクスビジョンソリューションでは、この情報をカメラ、深度センサー、およびLiDARと組み合わせることができます。ROS sensor message documentationは、ロボットコンポーネント間で画像、カメラ情報、および点群を交換するための共通インターフェースを定義しています。
推定の課題とデータ#
シーンフローは、ステレオビデオ、RGB-Dカメラ、LiDARシーケンス、あるいは学習済みの深度およびモーションの手がかりを持つ単眼ビデオから導き出すことができます。ステレオセンサーおよびアクティブ深度センサーはより強力な幾何学的測定値を提供しますが、単眼システムは視覚的文脈からスケールを推測し、あいまいさを解決する必要があります。
一般的な失敗ケースには、オクルージョン、モーションブラー、反射面、テクスチャのない領域、薄い構造、照明の変化、およびフレーム間の高速な移動が含まれます。システムが自己モーション(エゴモーション)を独立して移動するオブジェクトから分離する必要があるため、カメラの動きがさらなる課題を生み出します。エラーが発生すると、不正確な3D軌道が生成され、下流のナビゲーションや衝突予測システムが速度と距離を誤認する原因となります。
トレーニングデータには、RGBフレーム、深度または視差、オプティカルフロー、セグメンテーション、およびカメラパラメータが含まれる場合があります。Freiburg Scene Flow datasetsは、これら補完的なラベルがジオメトリとモーションをどのように組み合わせて記述できるかを示しています。
実践的なワークフロー#
Ultralytics YOLO26は、ドキュメント化された単眼深度推定タスクを通じて、シーンフローパイプラインの深度コンポーネントを提供できます。次の例では、1つのフレームのデンス深度マップを生成します。
from ultralytics import YOLO
# Estimate the scene's per-pixel 3D structure.
model = YOLO("yolo26n-depth.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
result.save(filename="depth_result.jpg")
print(result.depth.data.shape)このYOLO26ワークフロー自体はシーンフローを計算しません。これはピクセルごとの深度を提供し、完全なパイプラインはそれを連続するフレーム、時間的対応関係、およびキャリブレーションされたカメラポーズと組み合わせて3D変位を推定できます。実際には、特にオクルージョンや深度境界の周辺において、チームは完全なモーションフィールドを評価する前に、各コンポーネントを個別に検証する必要があります。






