このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
こんにちは、エンジニアの高木です。
私は現在、弊社が公開している視差計算ライブラリlibSGMの開発に携わっています。
さて、私たちは過去の記事Realizing Self-Driving Cars with General-Purpose Processorsで、
SGMをセグメンテーションに応用したSegmentation SGMというアルゴリズムを紹介していましたが、この度その実装をGithubに公開いたしました。
Segmentation SGMは視差画像を入力としてシーンを物体と路面に分類し、物体領域を抽出するアルゴリズムです。出力例を以下に示します。
こちらは連番画像を入力した際のデモ動画です。画面上は入力の視差画像で、libSGMを使って計算しています。画面下がSegmentation SGMの出力になります。
アルゴリズムについて少しだけ紹介します。
Stereo SGMはコスト関数の最小化によって視差を推定するアルゴリズムです。コスト関数はマッチングコストとペナルティの2つの項から構成されます。マッチングコストは左右の画素間の類似度によって定義されます。ペナルティは視差の連続性を考慮し、隣接画素間の視差値の差に応じて設定されます。
Segmentation SGMは、Stereo SGMの枠組みを応用してピクセル毎の分類を行うアルゴリズムです。視差の代わりに、物体(Object)や路面(Ground)といったラベルを推定対象とします。マッチングコストは、観測視差がそのラベルに属すると仮定した場合の評価値によって定義されます。ペナルティはラベル間の遷移の妥当性に応じて設定しますが、Stereo SGMよりも複雑なケース分けを行っています。
より詳細なアルゴリズム説明もGithubで公開しています。興味がある方はこちらも是非ご覧ください。
fixstars/segmentation-sgm/wiki/Segmentation-SGM
また、Segmentation SGMはCUDAで実装・最適化されており、Jetson TX2上でも40~60FPSの性能を達成しています。
Device \ Width x Height x Max Disparity | 1024 x 440 x 64 | 1024 x 440 x 128 |
---|---|---|
Tegra X2 | 16 [ms] (64FPS) | 23[ms] (44FPS) |
具体的な使用方法についてはヘッダやサンプルコードをご参照下さい。libSGMとともにSegmentation SGMも是非使っていただけると幸いです。
最後に、Segmentation SGMメイン部分のCUDA化を担当していただいた、インターンの田中雄基さんと杉田陽亮さんの多大な貢献に感謝いたします。
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....