Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介

1,026 views

Published on

【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介

  1. 1. NVIDIA VisionWorks Tips紹介 第45回コンピュータビジョン勉強会@関東 2018/4/21 @dandelion1124
  2. 2. 自己紹介 Twitter ID:@dandelion1124 webpage: http://atinfinity.github.io/ • 学生時代は画像処理、VRの研究に従事 • 現在は都内勤務エンジニア • Build Insiderにて「OpenCV入門」という記事を連載中 – http://www.buildinsider.net/small/opencv
  3. 3. TL;DR ➢ NVIDIA VisionWorksの環境構築はとっても簡単 ➢ CMake、OpenCVとの連携もできる ➢ VisionWorksやるならgraph mode ➢ 日本語情報少ないのでみんなで使って記事を書こ う!
  4. 4. OpenVXとは • Khronos Groupが仕様策定しているコンピュータビ ジョンアプリケーション向けのライブラリ、フレーム ワーク – https://www.khronos.org/openvx/ • ターゲットは低消費電力、リアルタイムのアプリケー ション • 目的の処理を連結グラフで記述 OpenVXについて知りたい方は以前の発表資料もご参考ください。 https://www.slideshare.net/YasuhiroYoshimura/33openvx-nvidia-visionworks
  5. 5. NVIDIA VisionWorksとは • NVIDIAが提供するOpenVX implementation • ソフトウェアスタックはざっくりとこんな感じ https://www.khronos.org/assets/uploads/developers/library/2016-embedded-vision- summit/V2_VisionWorks_OpenVX_tutorial.pdf
  6. 6. NVIDIA VisionWorks Tips JetPackでJetson、PC環境にセットアップできる ✓ わかりにくいけどホストPCのみインストールすることも可 ホストPCへのインストール Jetsonへのインストール
  7. 7. NVIDIA VisionWorks Tips CMakeで使うときはfind_package(VisionWorks)でOK • VisionWorks_FOUND:システムからの検出可否 • VisionWorks_INCLUDE_DIRS:インクルードパス • VisionWorks_LIBRARIES:ライブラリファイル find_package(VisionWorks REQUIRED) if(VisionWorks_FOUND) include_directories(${VisionWorks_INCLUDE_DIRS}) add_executable(hoge ${SOURCES}) target_link_libraries(hoge ${VisionWorks_LIBRARIES}) endif(VisionWorks_FOUND)
  8. 8. NVIDIA VisionWorks Tips 下記の場所に各種ファイルがある。 ➢ インクルードパス ✓ /usr/include/VX ✓ /usr/include/NVX ➢ ライブラリパス ✓ /usr/lib ➢ サンプルコード、データ ✓ /usr/share/visionworks/sources/samples ✓ /usr/share/visionworks/sources/demos ✓ /usr/share/visionworks/sources/data
  9. 9. NVIDIA VisionWorks Tips ➢ OpenCVとの連携(cv::Mat) ✓ NVIDIA VisionWorksに連携APIが用意されている ✓ NVX/nvx_opencv_interop.hppをインクルードする必要が ある // Mat->vx_image cv::Mat src = cv::imread(“hoge.png”); vx_image v_src = nvx_cv::createVXImageFromCVMat(context, src); // vx_image->Mat nvx_cv::VXImageToCVMatMapper mapper(v_dst, 0, NULL, VX_READ_AND_WRITE, VX_MEMORY_TYPE_HOST); cv::Mat result = mapper.getMat();
  10. 10. NVIDIA VisionWorks Tips ➢ OpenCVとの連携(cv::cuda::GpuMat) ✓ NVIDIA VisionWorksに連携APIが用意されている ✓ NVX/nvx_opencv_interop.hppをインクルードする必要が ある // GpuMat->vx_image cv::cuda::GpuMat d_src(src); vx_image v_dsrc = nvx_cv::createVXImageFromCVGpuMat(context, d_src); // vx_image->GpuMat nvx_cv::VXImageToCVMatMapper mapper(v_ddst, 0, NULL, VX_READ_AND_WRITE, NVX_MEMORY_TYPE_CUDA); cv::cuda::GpuMat d_result = mapper.getGpuMat(); 最近やっと 3.x対応された
  11. 11. NVIDIA VisionWorks Tips nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ イリングできる ✓ nvvpを使ってJetson上で動作するVisionWorksプログラム のプロファイルを取るときはホスト側のnvvpを起動して、 ssh経由でリモートプロファイリングする
  12. 12. NVIDIA VisionWorks Tips nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ イリングできる ✓ nvvpを使ってJetson上で動作するVisionWorksプログラム のプロファイルを取るときはホスト側のnvvpを起動して、 ssh経由でリモートプロファイリングする あっ、VisionWorks内部はOpenCVのcudev::GlobPtrSzを 引数にしたCUDAカーネルになっているのか(学び)
  13. 13. NVIDIA VisionWorks Tips ➢graph modeを使おう! OpenVXには2つのモードがあります。 ✓graph mode ✓同期処理が少ないので高速 ✓immediate mode ✓内部的にはOpenVXのVision APIを1つのgraphとして処 理 ✓つまり、同期処理が増えるので遅い ✓あくまでプロトタイプ用途
  14. 14. NVIDIA VisionWorks Tips ➢graph modeを使おう! ✓ graph modeの方が本当に速いのか実験 ✓ 今回はSemiGlobalMatchingを使ったコードで実験 Color Convert SGM left gray right gray disparity right 画像データ ノード Color Convert left virtual image
  15. 15. NVIDIA VisionWorks Tips ➢graph modeを使おう! ✓ 実行環境 ✓NVIDIA Jetson TX2 ✓JetPack 3.2 ✓VisionWorks 1.6 ✓ 入力画像 ✓画像サイズ:1240x375 ✓ オリジナル画像サイズは1242x375だが、VisionWorksのSGMでは入力する画 像幅が4の倍数でないといけない制約があるため ✓KITTI stereo datasetを使用 ✓ http://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo
  16. 16. NVIDIA VisionWorks Tips ➢graph modeを使おう! ✓ 計測結果 ✓ graph mode: 20.9 ms ✓ Immediate mode: 31.6 ms ✓ 実行結果 ✓下図は入力画像にdepth(colormap)を重畳したもの ✓ graph modeの方が高速! ✓ Jetson TX2でこの速度は魅力
  17. 17. NVIDIA VisionWorks Tips ➢ その他試したこと ✓ graph最適化レベル変更 ✓vxSetGraphAttributeで最適化レベルを指定できる 特に指定しない場合、デフォルトでは-O2となっている
  18. 18. NVIDIA VisionWorks Tips ➢ その他試したこと ✓ graph最適化レベル変更 ✓コード例はこんな感じ ✓今回のサンプルでは効果が見られなかった・・・ ✓もう少し複雑なgraphじゃないと効果がないのかも?(要検証) const char* option = "-O3"; vxSetGraphAttribute(graph, NVX_GRAPH_VERIFY_OPTIONS, option, strlen(option)); vxVerifyGraph(graph); O3を明示的に指定
  19. 19. TODO(という名の積み残し) ➢ カスタムOpenVXノード実装 ✓ 自作のOpenVXノードを作る ➢ OpenVXのスケジューリングAPI周りを試す ✓ どの程度高速化に効いてくるのか気になる ➢ VisionWorksのCUDA連携 ➢CUDA対応ライブラリや自作CUDAカーネルを組み込む時 に便利 ➢ VisionWorksを使ったROSパッケージ作成 ✓ SGM、Sfm、trackingあたりとか需要あるのでは?
  20. 20. まとめ ➢ NVIDIA VisionWorksの環境構築はとっても簡単 ✓ JetPackでチェックするだけ ➢ CMake、OpenCVとの連携もできる ✓ CUDA連携については別の機会で ➢ VisionWorksやるならgraph mode ➢ 日本語情報少ないのでみんなで使って記事を書こ う!

×