【テクニカルノート】
深度認識のためのカスタム組み込みステレオシステムの構築方法

カメラ付きステレオビジョン、ライダー、飛行時間センサーなど、深度認識システムの開発
にはさまざまな3Dセンサーオプションがあります。各オプションには長所と短所があります。
ステレオ・システムは、通常、低コストで屋外での使用に十分な堅牢性を備え、高解像度
のカラー・ポイント・クラウドを提供できます。

この記事では、まずステレオビジョンシステムの主な部分について説明し、その後、既製のハードウェアコンポーネントとオープンソースソフトウェアを使用して、独自のカスタムステレオカメラを作成する方法を説明します。このセットアップは組み込み用途に焦点を当てているため、ホストコンピューターを必要とせずに、あらゆるシーンの深度マップをリアルタイムで計算します。別の記事では、スペースの制約が少ないホストコンピューターで使用するカスタムステレオシステムを構築する方法について説明します。

このようなオンボード処理システムを活かすことができる他のアプリケーションは、オブジェクト検出です。ディープラーニングの進歩により、オブジェクト検出をアプリケーションに追加することは比較的簡単になりましたが、専用のGPUリソースが必要なため、多くのユーザーにとって致命的なものになっています。この記事では、高価なホストGPUを必要とせずにステレオビジョンアプリケーションにディープラーニングを追加する方法についても説明します。この記事のサンプルコードとセクションをステレオビジョンとディープラーニングに分けましたので、アプリケーションでディープラーニングが必要ない場合は、ディープラーニングのセクションをスキップしてください。

ステレオビジョンの概要

ステレオビジョンとは、2つの視点からシーン内の情報を比較し、デジタル画像から3D情報を抽出することです。2つの画像平面におけるオブジェクトの相対位置は『カメラ』からのオブジェクトの深度に関する情報を提供します。

ステレオビジョンシステムの概要を図1に示しています。このシステムは、以下のように重要なステップで構成されています。



    1. 1.キャリブレーション:カメラキャリブレーションとは、内因性と外因性の両方を指します。内因性キャリブレーションは、画像の中心、焦点距離、歪みパラメーターを決定します。一方、外因性キャリブレーションは、カメラの3D位置を決定します。これは、多くのコンピュータービジョンアプリケーションにおいて、特に深度などのシーンに関するメトリック情報が必要な場合には、重要なステップです。キャリブレーションのステップについては、以下のセクション5で詳しく説明します

    1. 2.調整:ステレオ調整とは、カメラセンター間の線に平行な共通の平面上に画像平面を再投影するプロセスを指します。調整後、対応する点は同じ行に置かれ、これにより、マッチングのコストおよび曖昧さが大幅に減少します。このステップは、独自のシステムを構築するために提供されたコードで行われます。

    1. 3.ステレオのマッチング:これは、左右の画像間でピクセルを一致させるプロセスを意味し、これにより異なる画像が生成されます。セミグローバルマッチング(SGM)アルゴリズムは、独自のシステムを構築するために提供されるコードで使用されます。

    1. 4.三角測量:三角測量とは、3D空間内の点が2つの画像上に投影されることを考慮して、その点を決定するプロセスを指します。視差画像は3D点群に変換されます。

FLIR テックノート図1:ステレオビジョンシステムの概要

 

ディープラーニングの概要

ディープラーニングは、脳の構造と機能に触発されたアルゴリズムを扱う機械学習のサブフィールドです。それは人間の脳の学習能力を模倣しようとします。ディープラーニングアルゴリズムは、物体認識、分類、セグメンテーションなどの複雑な操作を効率的に実行できます。とりわけ、ディープラーニングにより、機械はそれに供給された画像内の人や物体を認識できます。私たちが興味を持っているアプリケーションは、人の検出です。独自のディープラーニングアルゴリズムをトレーニングするには、ラベル付けされた大量のトレーニングデータが必要ですが、オープンソースの事前トレーニング済みモデルを使用すると、誰でも簡単にこれらのアプリケーションを開発できます。

ディープラーニングにも高性能 GPUが必要ですが、TX2用のQuartet ソリューションには、ほんの一部のフォームファクターと消費電力で、より大きなGPUのすべての機能が付属しています。TX2でディープラーニングモデルを実行することには、モビリティの付加価値でもあり、人を検出して人を避ける必要があるモバイルロボットの完璧な候補です。

設計例

ステレオシステムの設計例を見てみましょう。動きの速い物体による動的な環境での移動ロボットアプリケーションの要件は次のとおりです。対象の対象サイズは2m、カメラから対象までの距離は3m、求められる精度は3mで1cmです。深度誤差は、以下によって求められます。ΔZ=Z²/Bf *Δd は、以下の要因に依存します。

・Zは範囲
・Bはベースライン(筐体のベース)です。
・fはピクセル単位の焦点距離で、カメラの視野と画像の解像度に関連しています。


これらの要件を満たすことができる、さまざまな設計オプションがあります。上記の対象のサイズと距離の要件に基づいて、特定のセンサーのレンズの焦点距離を決定できます。ベースラインと共に、上記の式を使用して3mでの予想される深度誤差を計算し、精度要件を満たしていることを確認します。

より長いベースラインを持つ低解像度カメラ、またはより短いの高解像度カメラを使用した2つのオプションを図2に示しています。最初のオプションは大型カメラですが、コンピュータ処理の必要性が低く、2番目のオプションは小型カメラで、コンピュータ処理の必要性が高くなります。モバイルロボットにとってはコンパクトなサイズがより望ましいため、このアプリケーションでは2つ目のオプションを選択しました。処理ニーズに対処するために強力なGPUを搭載したTX2用Quartet Embedded Solutionを使用できます。

FLIR テクニカルノート図2:サンプルのアプリケーション用のステレオシステム設計オプション

ハードウェア要件

この例では、IMX273 Sony Pregiusグローバルシャッターセンサーを使用して、ベースライン12cmのバーに、2台のBlackfly Sボードレベル1.6 MPカメラを取り付けます。どちらのカメラも、同様の6mmのSマウントレンズを備えています。

カメラは、2本のFPCケーブルを使用してTX2 カスタム・キャリア・ボード用のQuartet Embedded Solutionに接続します。左右のカメラを同期して画像を同時に捉えるには、2つのカメラを接続する同期ケーブルを制作します。図3に、カスタム埋め込みステレオシステムの前面図と背面図を示します。

FLIR テクニカルノート図3:カスタム埋め込みステレオシステムの前面図と背面図

次の表には、すべてのハードウェアコンポーネントを示しています。

部品 説明 数量 リンク
ACC-01-6005 Quartet Carrier、TX2モジュール8GB付き 
1 https://www.flir.com/products/quartet-embedded-solution-for-tx2/
BFS-U3-16S2C-BD2 1.6 MP、226 FPS、Sony IMX273、カラー  2 https://www.flir.com/products/blackfly-s-board-level
ACC-01-5009 ACC-01-5009:BFSカラーボードレベルカメラ用Sマウント& IRフィルター  2 https://www.flir.com/products/s_mount-front
BW3M60B-1000 6 mm Sマウントレンズ   http://www.boowon.co.kr/site/down.asp?fileName=BW3M60B-1000.pdf
ACC-01-2401 ボードレベルBlackfly S用15 cm FPCケーブル 2 https://www.flir.com/products/15-cm-fpc-cable-for-board-level-blackfly-s/
XHG302 NVIDIA® Jetson™ TX2/TX2 4GB/TX2i アクティブ ヒートシンク 1 https://connecttech.com/product/nvidia-jetson-tx2-tx1-active-heat-sink/
  同期ケーブル(独自に制作) 1 https://www.flir.com/support-center/iis/machine-vision/application-note/configuring-synchronized-capture-with-multiple-cameras/
  取り付けバー(独自に制作) 1  

どちらのレンズも、用途に必要な距離範囲にカメラの焦点を合わせるために、調整する必要があります。各レンズのネジ(図4で赤い丸で囲まれたもの)を締めて焦点を合わせます。

FLIRテクニカルノート図4:レンズスクリューを示すステレオシステムの側面図

ソフトウェア要件

a. Spinnaker
Teledyne FLIR Spinnaker SDKはQuartet Embedded SolutionsのTX2用にプレインストールされています。Spinnakerはカメラと通信する必要があります。

b. CUDAサポート付きOpenCV 4.5.2
使用しているステレオマッチングアルゴリズムであるSGMには、OpenCVバージョン4.5.1以降が必要です。この記事のコードを含むzipファイルをダウンロードし、StereoDepthフォルダーに解凍します。OpenCVをインストールするスクリプトはOpenCVInstaller.sh.です。ターミナルに次のコマンドを入力します。

cd ~/ StereoDepth
chmod +x OpenCVInstaller.sh
./OpenCVInstaller.sh

インストーラーが管理者パスワードの入力を求めます。OpenCV 4.5.2のインストールを開始します。OpenCVのダウンロードと構築には、2時間ほどかかる場合があります。

c. Jetson-inference (ディープラーニングが必要な場合)
Jetson-inferenceは NVIDIAのオープンソースライブラリで、TX2などの Jetsonデバイスで GPUアクセラレーションによるディープラーニングに使用できます。このライブラリは、NVIDIA GPUでの高性能推論を容易にする TensorRT SDK を利用しています。Jetson-inference は、事前にトレーニングされ、すぐに使用できるディープ ラーニング モデルの配列と、TensorRTを使用してこれらのモデルをデプロイするためのコードをユーザーに提供します。Jetson-inferenceをインストールするには、ターミナルで次のコマンドを入力します。

/cd ~/StereoDepth
chmod +x InferenceInstaller.sh
./InferenceInstaller.sh

キャリブレーション

ステレオ画像を取り込み、キャリブレーションするコードは、“Calibration”フォルダー内にあります。SpinView GUIを使用して、左右のカメラのシリアル番号を特定します。設定では、右のカメラがマスター、左のカメラがスレーブです。マスターおよびスレーブカメラのシリアル番号をgraveStereoImages.cppファイルの60行目と61行目にコピーします。ターミナルで次のコマンドを使用して、実行可能なファイルを作成します。

cd ~/StereoDepth/Calibration
mkdir build
mkdir -p image/{left, right}
cd build
cmake ..
make

このリンクからチェッカーボードパターンを印刷し、平らな表面に取り付けてキャリブレーション対象として使用します。図5に示すように、較正中に最良の結果を得るには、SpinViewで自動露出をオフに設定し、チェッカーボードパターンをクリアにして、白い四角形が露出しすぎないように露出を調整します。キャリブレーション画像を収集した後、ゲインと露出をSpinViewで自動に設定することができます。

FLIR テクニカルノート図5:SpinView GUIの設定


FLIR テクニカルノート図6:キャリブレーションの画像サンプル
画像の収集を開始するには、次のように入力します。

./grabStereoImages
コードは、毎秒約1フレームで画像の収集を開始する必要があります。左の画像は、Image/leftのフォルダーに、右の画像は、Image/rightのフォルダーに保存されます。ターゲットを動かして、画像のすべてのコーナーに見えるようにします。ターゲットを回転させて、近くや遠くから画像を撮影できます。デフォルトでは、プログラムは100個の画像ペアを撮像しますが、コマンドライン引数で変更できます。

./grabStereoImages 20
これにより、20組の画像のみが収集されます。フォルダーに書き込まれた画像は上書きされます。図6にキャリブレーションの画像サンプルを示します。

画像を収集した後、次のように入力してキャリブレーションPythonコードを実行します。

cd ~/StereoDepth/Calibration
python cameraCalibration.py
これにより、ステレオシステムの固有パラメータと外部パラメータを含む、“intrinsics.yml” と “extrinsics.yml” という2 つのファイルが生成されます。このコードはデフォルトでは30mmチェッカーボードの正方形のサイズを想定していますが、必要に応じて編集することができます。キャリブレーションの最後に、キャリブレーションがどの程度良好であるかを示すRMSエラーが表示されます。良好なキャリブレーションとしての一般的なRMS誤差は、0.5ピクセル未満である必要があります。

リアルタイムの深度マップ

リアルタイムで差異を計算するコードは、“Depth”フォルダー内にあります。カメラのシリアル番号をlive_disparity.cpp ファイルの230行目と231行目にコピーします。最後に次のコマンドを使用して、実行可能なファイルを作成します。

cd ~/StereoDepth/Depth
mkdir build
cd build
cmake ..
make

“intrinsics.yml ” とキャリブレーションのステップで取得した “extrinsics.yml” ファイルをこのフォルダーにコピーします。リアルタイム深度マップデモを実行するには、次のように入力します。

FLIR テクニカルノート図7:左カメラ画像と対応する深度マップのサンプル。下部の深度マップには、特定のポイントの深度も表示されます。
./live_disparity
左側のカメラ画像(未整流の生画像)と深度マップ(最終出力)が表示されます。出力の例を図7に示します。カメラからの距離は、深度マップの右側の凡例に従って色分けされます。深度マップの黒い領域は、その領域に格差データがないことを意味します。NVIDIA Jetson TX2 GPUにより、1440×1080の解像度で毎秒5フレームまで、720×540の解像度で毎秒13フレームまで実行できます。

特定のポイントの深度を表示するには、深度マップでそのポイントをクリックすると、図7の最後の例に示すように、深度が表示されます。

人物検出

Jetson-inference によって提供される DetectNet を使用して、画像フレーム内の人間を検出します。DetectNet には、オブジェクト検出用のディープラーニングモデルアーキテクチャを選択するオプションが付属しています。シングルショット検出(SSD)アーキテクチャと MobileNetV2 バックボーンを使用して、速度と精度の両方を最適化します。デモを初めて実行するとき、TensorRT はシリアル化されたエンジンを作成して推論速度をさらに最適化しますが、完了するまでに数分かかる場合があります。このエンジンは、さらに実行するためにファイルに自動的に保存されます。使用されるアーキテクチャは非常に効率的であり、~50fpsで検出モジュールを実行することが期待できます。人物検出機能とリアルタイムのステレオ深度のコードは、「DepthAndDetection」フォルダーにあります。カメラのシリアル番号を271行目と 272行目live_disparity.cppファイルにコピーします。最後に次のコマンドを使用して実行可能ファイルをビルドします。

cd ~/StereoDepth/DepthAndDetection
mkdir
buildcd
buildcmake ..
make

キャリブレーション手順で取得した「intrinsics.yml」ファイルと「extrinsics.yml」ファイルをこのフォルダにコピーします。リアルタイムの深度マップのデモを実行するには、次のように入力します。

FLIR テクニカルノート図 8:左カメラ画像と対応する深度マップのサンプル。すべての画像は、画像で検出された人物とカメラからの人物の距離を示しています。

FLIR テクニカルノート図 9:左の画像と深度マップは、画像内で検出された複数の人物と、カメラからの対応する距離を示しています。
./live_disparity
左の補正カラー画像と深度マップを示す2つのウィンドウが表示されます。深度マップは、深度マップをよりわかりやすくするために色分けされています。どちらのウィンドウにも、フレーム内の人物を囲む境界ボックスがあり、カメラから人物までの平均距離が表示されます。ステレオ処理とディープラーニング推論の両方を使用して、デモは1440×1080の解像度で約 ~4 fps、720×540の解像度で最大11.5 fpsで実行されます。


人物検出アルゴリズムは、妨害された困難な状況でも複数の人物を検出することができます。このコードは、以下に示すように、画像で検出されたすべての人物までの距離を計算します。

さいごに


ステレオビジョンを使用して深度認識を展開すると、屋外での良好な効果、高解像度の深度マップを提供する能力、低コストの既製のコンポーネントで非常にアクセスしやすいという利点が得られます。要件に応じて、市販のステレオ・システムが多数あります。カスタム組み込みステレオシステムを開発する必要がある場合は、ここに記載されている説明を使用することで、比較的簡単な作業で済みます。

レスターは、
これまで蓄積された豊富な実績とノウハウを活かし、
お客様に最適なソリューションをご提案いたします。
まずはお気軽にご相談ください。

オンライン商談受付中。当社営業担当とのオンライン商談を受け付けています。商談可能な日時は平日9:00~17:30。お申し込みはこちら。
お問い合わせフォームはこちら
ページTOP