自動運転:距離推定にステレオビジョンをどのように活用するのか?

自動運転:距離推定にステレオビジョンをどのように活用するのか?

自動化システムでは、ディープラーニングとコンピュータービジョンが広く普及し、あらゆる場所で利用されています。コンピュータービジョンの分野、特に障害物検出の分野は、過去 10 年間で急速に発展しました。

YOLO や RetinaNet などの障害物検出アルゴリズムは、画像内の障害物の位置を示す 2D 注釈ボックスを提供します。

各障害物までの距離を測定するために、エンジニアはカメラと、レーザーを使用して深度情報を返すLIDAR(光検出および測距)センサーを融合しました。センサー融合技術は、コンピューター ビジョンと LiDAR の出力を融合するために使用されます。

LiDAR を使用する際の問題は、高価であることです。エンジニアが使用する便利なトリックは、2 台のカメラを一直線に並べ、幾何学の原理を使用して各障害物までの距離を計算することです。私たちはこの新しいセットアップを疑似ライダーと呼んでいます。


単眼視と立体視

疑似 LiDAR は幾何学的原理を使用して深度マップを作成し、それを物体検出と組み合わせて 3 次元距離を取得します。

ステレオビジョンを使用して距離を推定するにはどうすればよいですか?

距離を取得するには、次の 5 ステップの疑似コードを使用します。

  • 2台のカメラをキャリブレーションする(内部キャリブレーションと外部キャリブレーション)
  • エピポーラスキームの作成
  • まず視差マップを作成し、次に深度マップを作成します

次に、深度マップを障害物検出アルゴリズムと組み合わせて、境界ボックスのピクセルの深度を推定します。詳細はこの記事の最後をご覧ください。

さあ始めましょう!

1. 内部および外部校正

すべてのカメラは調整する必要があります。キャリブレーションとは、[X、Y、Z] 座標を持つ 3D ポイント (ワールド内) を [X、Y] 座標を持つ 2D ピクセルに変換することを意味します。

カメラモデル

今日のカメラはピンホールカメラモデルを採用しています。

ピンホールを使用して少量の光をカメラに通し、鮮明な画像を生成するという考え方です。

画像の中央に障害物がなければ、すべての光線が通過し、画像はぼやけてしまいます。また、ズームと鮮明度を向上させるために焦点距離 f を決定することもできます。

カメラをキャリブレーションするには、カメラ座標を介してワールド座標をピクセル座標に変換する必要があります。


カメラのキャリブレーションプロセス

ワールド座標からカメラ座標への変換は、外部キャリブレーションと呼ばれます。外部パラメータは、R (回転行列) と T (変換行列) と呼ばれます。

カメラ座標からピクセル座標への変換は、固有キャリブレーションと呼ばれます。焦点距離、光学中心などのカメラの固有値が必要です。

固有パラメータは K と呼ばれる行列です。

較正

K マトリックスはカメラのキャリブレーションを通じて見つけることができます。

通常、チェッカーボードと自動アルゴリズムを使用して実行します。 これを行うと、チェス盤上の点 (例: 0,0,0) が画像内のピクセル (例: 545, 343) に対応することをアルゴリズムに伝えます。


校正例

これを行うには、カメラでチェッカーボードの画像を撮影し、いくつかの画像といくつかのポイントを取得した後、キャリブレーション アルゴリズムが最小二乗損失を最小限に抑えてカメラのキャリブレーション マトリックスを決定します。

通常、画像の歪みを除去するにはキャリブレーションが必要です。 ピンホールカメラモデルには歪み、「GoPro 効果」が含まれます。 補正された画像を得るためには、キャリブレーションを実行する必要があります。 変形は放射状または接線方向に行うことができます。 キャリブレーションは画像の歪みを補正するのに役立ちます。


画像調整

カメラのキャリブレーションによって返される行列は次のとおりです。

f は焦点距離、(u₀、v₀) は光学中心です。これらは固有のパラメータです。

すべてのコンピューター ビジョン エンジニアは、カメラのキャリブレーションを理解し、習得する必要があります。これは最も基本的かつ重要な要件です。私たちはオンラインで画像を処理することに慣れており、ハードウェアに触れることはありませんが、これは間違いです。

- カメラのキャリブレーションのために OpenCV を実行してみてください。

同じタイプの座標

カメラのキャリブレーション中に、ワールド内のポイント O をピクセル空間に変換する 2 つの式があります。

世界をカメラに変える


外在的校正式

カメラから画像への変換


内部校正式

計算すると、次の式が得られます。

ワールドから画像への変換

完全な式

マトリックスの次元を見ると、不一致があります。

したがって、O_worldを[XYZ]から[XYZ 1]に変更する必要があります。

この「1」を同次座標と呼びます。

2. エピポーラ幾何学 - 立体視

立体視は、2 つの画像間の奥行きを見つけることに基づいています。

私たちの目は2台のカメラのようなものです。同じ画像を異なる角度から見るため、2 つのビューの違いを比較し、距離の推定値を計算できます。

以下はステレオカメラのセットアップの例です。ほとんどの自動運転車に同様の機能が搭載されています。

ステレオカメラが奥行きを推定する方法

左側に 1 台、右側に 1 台の計 2 台のカメラがあるとします。 2 台のカメラは同じ Y 軸と Z 軸上に配置されています。基本的に、唯一の違いは X 値です。

それでは、以下の説明をご覧ください。


ステレオカメラ図

私たちの目標は、点 O (画像内の任意のピクセルを表す) の Z 値、つまり深度距離を推定することです。

  • X は位置合わせ軸です。
  • Yは高さです。
  • Z は深さです。

2 つの青い平面は、2 台のカメラからの画像に対応します。

さて、これを鳥瞰的に考えてみましょう。

ステレオカメラ鳥瞰図の説明:

  • xL は左カメラの光学中心に対応し、xR は右カメラの光学中心に対応します。
  • b はベースライン、つまり 2 台のカメラ間の距離です。

タレスの定理を適用すると、2つの方程式が得られることがわかる。

左カメラの場合:


左カメラ方程式

? Z = X*f / xL となります。

  • 適切なカメラの場合:

右カメラ方程式:

  • ? Z = (X — b)*f/xRが得られます。

これをまとめると、正しい視差 d = xL -- xR とターゲットの正しい XYZ 座標を見つけることができます。

3. 視差と深度マップ

視差とは何ですか? 視差とは、2 つの異なるカメラ角度からの画像内の 3D ポイントの位置の差です。


ステレオビジョンの公式

? 立体視により、あらゆる物体の奥行きを推定できます。マトリックスキャリブレーションを正しく行ったと仮定します。深度マップや視差マップを計算することもできます。


視差マップ

なぜ「ベースラインジオメトリ」なのか?

視差を計算するには、左側の画像のすべてのピクセルを見つけて、右側の画像のすべてのピクセルと一致させる必要があります。 これをステレオ対応問題と呼びます。

この問題を解決するには――

  • 左の画像のピクセルを取り出しましょう
  • 右側の画像でこのピクセルを見つけるには、ベースライン上で検索するだけです。 2D 検索を行う必要はありません。ポイントはこの線上にあるはずで、検索は 1D に縮小されます。


ベースライン

これは、両方のカメラが同じ軸に沿って配置されているためです。

ベースライン検索の仕組みは次のとおりです。

ベースライン検索

応用: 疑似ライダーの構築

さて、これを実際のシナリオに適用し、ステレオビジョンを使用して物体の奥行きをどのように推定できるかを見てみましょう。

2つの画像を見てみましょう。


ステレオビジョン

各画像には外部パラメータ R と t があり、これらはキャリブレーション (ステップ 1) によって事前に決定されます。

視差

各画像について、他の画像に対する視差マップを計算できます。私たちは次のことを行います:

  • 2 つの画像間の視差を決定します。
  • 投影行列は、カメラの内部行列 K と外部行列 R,t に分解されます。
  • 前の 2 つの手順で収集したデータを使用して深さを推定します。

左画像と右画像の視差マップを取得します。

違いの意味をよりよく理解できるように、Stack Overflow で素晴らしい説明を見つけました。

視差マップとは、一対のステレオ画像間の見かけのピクセル差または動きを指します。

これを体験するには、片方の目を閉じて、もう片方の目を開けながら素早く閉じてみてください。非常に近くにある物体は遠くまでジャンプするように見えますが、遠くにある物体はほとんど動きません。この動きが視差です。ステレオカメラからの一対の画像では、各ポイントでの各ピクセルの見かけの動きを測定し、測定値から強度画像を作成できます。


視差から深度マップへ

2 つの視差マップがあり、基本的には 2 つの画像間のピクセルの変位がわかります。

各カメラには、投影行列 P_left と P_right があります。深さを推定するには、K、R、t を推定する必要があります。


ワールド座標系からカメラ座標系への変換は

OpenCV 関数 cv2.decomposeProjectionMatrix() はこれを実行し、P から K、R、t を取得します。次に、各カメラに対して深度マップを生成します。深度マップは、他の画像と視差マップを使用して、画像内の各ピクセルがどれだけ離れているかを示します。

プロセスは次のとおりです。

  • 行列 K から焦点距離 f を取得します。
  • 変換ベクトルtの対応する値を使用してベースラインを計算します。
  • 前の式と視差マップ d を使用して画像の深度マップを計算します。


ステレオビジョンの公式

この計算をピクセルごとに実行します。

障害物の深さの推定

各カメラには深度マップがあります。ここで、これを YOLO などの障害物検出アルゴリズムと組み合わせるとします。 アルゴリズムは、障害物ごとに 4 つの数値 [x1; y1; x2; y2] を持つ境界ボックスを返します。 これらの数字は、ボックスの左上隅と右下隅の座標を表します。

たとえば、このアルゴリズムを左側の画像で実行し、左側の深度マップを使用できます。

これで、この境界ボックス内で最も近い点を取得できます。画像内の各点の距離がわかっているので、それがわかります。境界ボックスの最初のポイントは障害物までの距離です。

すごいですね!疑似LIDARを構築したばかりです!

立体視により、画像内にどのような障害物があるのか​​だけでなく、それらが自分からどのくらい離れているかも分かります。この障害物は 28.927 メートル離れています。

ステレオビジョンは、単純なジオメトリと追加のカメラを使用して、2D 障害物検出を 3D 障害物検出に変換する技術です。現在、新しい OpenCV AI キットや Raspberry および Nvidia Jetson カードへの統合など、新興のエッジ プラットフォームのほとんどはステレオ ビジョンを考慮しています。

コスト面では、LiDAR を使用する場合に比べて比較的安価でありながら、優れたパフォーマンスを提供します。ライダーの機能を代替できるため、疑似ライダーと呼びます。障害物を検出し、分類し、3D で位置を特定します。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式サイトにアクセスして許可を申請してください。

<<:  インテリジェントな人間と機械のインタラクションがデジタルサービスを新たなレベルに引き上げます

>>:  機械学習の新たな嵐: ML モデルを使用して住宅価格を予測する方法とは?

ブログ    
ブログ    

推薦する

5G技術と人工知能のインテリジェントな組み合わせ

5GとAIは未解決の問題に解決策を見つけることができる5G はエッジの究極の未来です。 5G は、普...

...

法律教育ロボット「ダニウ」が潼南で任務に就き、一般市民に無料の法律サービスを提供

[[373347]]最近、法律相談ロボット「ダニウ」が潼南区公共サービス法律センターで正式に運用され...

...

...

...

変化する生活: テクノロジーと私たちの未来

私たちがテクノロジーによってますます、そして不可逆的に動かされている世界に生きていることは疑いの余地...

Alibaba Cloud がバッチおよびストリーム機械学習プラットフォーム Alink をオープンソース化し、アルゴリズム開発のハードルを下げる

11月28日、アリババクラウドは、世界初の統合バッチ・ストリームアルゴリズムプラットフォームでもある...

金属の巨人からディープラーニングまで、人工知能の(ごく)短い歴史

[[202011]]クレタ島を海賊や侵略者から守るために、人々は巨大な青銅の戦士タロスを創造しました...

...

[GPT-4理論] GPT-4のコア技術を探る

序文GPT-4はリリースされてからしばらく経ちますが、セキュリティなどのさまざまな理由から、Open...

ヘルスケアの革命: アジア太平洋地域におけるスマートホーム技術の台頭

アジア太平洋地域では、スマートホーム技術の登場により、ヘルスケア業界の大きな変革が起こっています。こ...