Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GPUでステレオマッチング / Stereo-matching with GPU

GPUでステレオマッチング / Stereo-matching with GPU

Explanation of GPU architecture and Stereo-matching algorithm.
Conduct experiment to prove cuda implementation of stereo-matching greatly improve a performance.

shun74

May 26, 2023
Tweet

More Decks by shun74

Other Decks in Programming

Transcript

  1. CPUとGPUの違い CPU • 少数の強力なコア • 遅延の少ない処理 • 幅広いタスクに対応 GPU •

    大量の弱いコア • データ移動で遅延が起きやすい • 演算タスクに特化
  2. CUDAについて Compute Unified Device Architecture • NVIDIA社が提供しているGPUプログラミング環境 • C言語でCUDAのAPIを利用可能 •

    NVCCでコンパイル • リソースを監視できるプロファイラもある • PyTorchやTensorflowもCUDAのAPIを使っている
  3. セミグローバルマッチング ステレオマッチングの一般的なアルゴリズム 1. 画像の平滑化とグレイスケール変換をする 2. 決められたウィンドウで画像をセンサス変換する 3. マッチングコストを許容視差の範囲で計算 4. 動的計画法を使ったアルゴリズムでマッチングコストを最小化

    →最適な視差マップが完成 読みたい人は読んで ↓ https://github.com/opencv/opencv_contrib/blob/4.7.0/modules/cudastereo/src/stereosgm.cpp https://github.com/opencv/opencv_contrib/blob/4.7.0/modules/cudastereo/src/cuda/stereosgm.cu
  4. 最適な視差マップの生成 • 周辺ピクセルに対するマッチングコストを使った動的計画法 • 視差=0 → ペナルティー無し • 視差=1 →

    P1を追加 • 視差>1 → P2を追加 • 水平ラインを左から右にアルゴリズム適用 ノイズのような視差マップ 滑らかな視差マップ
  5. 考えてみる 1. センサス変換: → 各ピクセルごとに周辺との輝度差をスコア化 2. マッチングコストの計算: → 左右画像各ピクセルの特徴量のハミング距離を計算 3.

    最適な視差マップの生成: → 各y座標ごとに左から右に動的計画法 • 独立した操作が存在 ⇒ 並列化が可能!
  6. CPUとGPUの比較実験 OpenCVのcv::StereoSGBM(cpu)とcv::cuda::StereoSGM(gpu)を比較 • 実験環境 • OpenCV: 4.7.0 • CUDA: 12.1

    • CPU: Core i7-10700K (16コア) • GPU: RTX 3090 (24GB) • メモリ: 16GB • 結果 ◦ CPU平均: 1200 ms ◦ GPU平均: 6 ms ➡ 約200倍の高速化を確認 (※ RTX 3060は多分100~150倍ぐらい)
  7. 参考 • https://www.d3.ntt-east.co.jp/00101/ • https://e-words.jp/w/CUDA.html • https://developer.nvidia.com/blog/cuda-refresher-cuda-programming-model/ • http://www.sanko-shoko.net/note.php?id=cbgw •

    https://wooptix.com/drawbacks-of-widespread-stereo-matching-techniques/ • https://www.researchgate.net/figure/Census-transform-and-Hamming-distanc e-for-3-x-3-windows_fig2_261269856