このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
こんにちは、エンジニアの高木です。
私は現在、弊社が公開している視差計算ライブラリ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化を担当していただいた、インターンの田中雄基さんと杉田陽亮さんの多大な貢献に感謝いたします。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...