SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
NVIDIA VisionWorks Tips紹介
第45回コンピュータビジョン勉強会@関東
2018/4/21
@dandelion1124
自己紹介
Twitter ID:@dandelion1124
webpage: http://atinfinity.github.io/
• 学生時代は画像処理、VRの研究に従事
• 現在は都内勤務エンジニア
• Build Insiderにて「OpenCV入門」という記事を連載中
– http://www.buildinsider.net/small/opencv
TL;DR
➢ NVIDIA VisionWorksの環境構築はとっても簡単
➢ CMake、OpenCVとの連携もできる
➢ VisionWorksやるならgraph mode
➢ 日本語情報少ないのでみんなで使って記事を書こ
う!
OpenVXとは
• Khronos Groupが仕様策定しているコンピュータビ
ジョンアプリケーション向けのライブラリ、フレーム
ワーク
– https://www.khronos.org/openvx/
• ターゲットは低消費電力、リアルタイムのアプリケー
ション
• 目的の処理を連結グラフで記述
OpenVXについて知りたい方は以前の発表資料もご参考ください。
https://www.slideshare.net/YasuhiroYoshimura/33openvx-nvidia-visionworks
NVIDIA VisionWorksとは
• NVIDIAが提供するOpenVX implementation
• ソフトウェアスタックはざっくりとこんな感じ
https://www.khronos.org/assets/uploads/developers/library/2016-embedded-vision-
summit/V2_VisionWorks_OpenVX_tutorial.pdf
NVIDIA VisionWorks Tips
JetPackでJetson、PC環境にセットアップできる
✓ わかりにくいけどホストPCのみインストールすることも可
ホストPCへのインストール
Jetsonへのインストール
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)
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
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();
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対応された
NVIDIA VisionWorks Tips
nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ
イリングできる
✓ nvvpを使ってJetson上で動作するVisionWorksプログラム
のプロファイルを取るときはホスト側のnvvpを起動して、
ssh経由でリモートプロファイリングする
NVIDIA VisionWorks Tips
nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ
イリングできる
✓ nvvpを使ってJetson上で動作するVisionWorksプログラム
のプロファイルを取るときはホスト側のnvvpを起動して、
ssh経由でリモートプロファイリングする
あっ、VisionWorks内部はOpenCVのcudev::GlobPtrSzを
引数にしたCUDAカーネルになっているのか(学び)
NVIDIA VisionWorks Tips
➢graph modeを使おう!
OpenVXには2つのモードがあります。
✓graph mode
✓同期処理が少ないので高速
✓immediate mode
✓内部的にはOpenVXのVision APIを1つのgraphとして処
理
✓つまり、同期処理が増えるので遅い
✓あくまでプロトタイプ用途
NVIDIA VisionWorks Tips
➢graph modeを使おう!
✓ graph modeの方が本当に速いのか実験
✓ 今回はSemiGlobalMatchingを使ったコードで実験
Color
Convert
SGM
left
gray
right
gray
disparity
right
画像データ ノード
Color
Convert
left
virtual image
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
NVIDIA VisionWorks Tips
➢graph modeを使おう!
✓ 計測結果
✓ graph mode: 20.9 ms
✓ Immediate mode: 31.6 ms
✓ 実行結果
✓下図は入力画像にdepth(colormap)を重畳したもの
✓ graph modeの方が高速!
✓ Jetson TX2でこの速度は魅力
NVIDIA VisionWorks Tips
➢ その他試したこと
✓ graph最適化レベル変更
✓vxSetGraphAttributeで最適化レベルを指定できる
特に指定しない場合、デフォルトでは-O2となっている
NVIDIA VisionWorks Tips
➢ その他試したこと
✓ graph最適化レベル変更
✓コード例はこんな感じ
✓今回のサンプルでは効果が見られなかった・・・
✓もう少し複雑なgraphじゃないと効果がないのかも?(要検証)
const char* option = "-O3";
vxSetGraphAttribute(graph, NVX_GRAPH_VERIFY_OPTIONS, option,
strlen(option));
vxVerifyGraph(graph);
O3を明示的に指定
TODO(という名の積み残し)
➢ カスタムOpenVXノード実装
✓ 自作のOpenVXノードを作る
➢ OpenVXのスケジューリングAPI周りを試す
✓ どの程度高速化に効いてくるのか気になる
➢ VisionWorksのCUDA連携
➢CUDA対応ライブラリや自作CUDAカーネルを組み込む時
に便利
➢ VisionWorksを使ったROSパッケージ作成
✓ SGM、Sfm、trackingあたりとか需要あるのでは?
まとめ
➢ NVIDIA VisionWorksの環境構築はとっても簡単
✓ JetPackでチェックするだけ
➢ CMake、OpenCVとの連携もできる
✓ CUDA連携については別の機会で
➢ VisionWorksやるならgraph mode
➢ 日本語情報少ないのでみんなで使って記事を書こ
う!

Mais conteúdo relacionado

Mais procurados

新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ慎一 古賀
 
Introduction to VSCode
Introduction to VSCodeIntroduction to VSCode
Introduction to VSCodeYuki Igarashi
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet将 高野
 
DroidKaigi - Welcome talk
DroidKaigi - Welcome talkDroidKaigi - Welcome talk
DroidKaigi - Welcome talkMasahiro Hidaka
 
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリde:code 2017
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Atsushi Nakamura
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureKazushi Kamegawa
 
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)YuzoHirakawa
 
20140905 AWS Night in ITHD LT2
20140905 AWS Night in ITHD LT220140905 AWS Night in ITHD LT2
20140905 AWS Night in ITHD LT2Nobuyuki Matsui
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来Akira Inoue
 
DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法CASAREAL, Inc.
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介Yuta Matsumura
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
red-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deploymentred-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deploymentTetsuya Sodo
 
第5回業開中心会議
第5回業開中心会議第5回業開中心会議
第5回業開中心会議Kaoru NAKAMURA
 
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修akkuma
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 

Mais procurados (20)

新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
Introduction to VSCode
Introduction to VSCodeIntroduction to VSCode
Introduction to VSCode
 
業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet業務アプリケーション開発を支える.NET技術 #ngtnet
業務アプリケーション開発を支える.NET技術 #ngtnet
 
DroidKaigi - Welcome talk
DroidKaigi - Welcome talkDroidKaigi - Welcome talk
DroidKaigi - Welcome talk
 
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
Visual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger FeatureVisual Studio 2012 Native Debugger Feature
Visual Studio 2012 Native Debugger Feature
 
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
 
DevOps、その前に
DevOps、その前にDevOps、その前に
DevOps、その前に
 
20140905 AWS Night in ITHD LT2
20140905 AWS Night in ITHD LT220140905 AWS Night in ITHD LT2
20140905 AWS Night in ITHD LT2
 
.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
 
DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
red-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deploymentred-hat-forum-2017-openshift-baremetal-deployment
red-hat-forum-2017-openshift-baremetal-deployment
 
第5回業開中心会議
第5回業開中心会議第5回業開中心会議
第5回業開中心会議
 
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 

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

【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみたYasuhiro Yoshimura
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7ytanno
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
Webテクノロジー@2012
Webテクノロジー@2012Webテクノロジー@2012
Webテクノロジー@2012彰 村地
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料Kenji Nagase
 
ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発YASUKAZU NAGATOMI
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money FowardNaoki Shimizu
 
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発Takayoshi Tanaka
 
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介Yasuhiro Yoshimura
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~Yuki Ando
 
UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発Takuya Kitamura
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCDaisuke Nishino
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)Yasuhiko Yamamoto
 
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料Y OCHI
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダJAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダKenichi Yoshida
 
うちのデザインシステム.pdf
うちのデザインシステム.pdfうちのデザインシステム.pdf
うちのデザインシステム.pdfIida Yukako
 

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

【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
 
2012 kanemotolablecture7
2012 kanemotolablecture72012 kanemotolablecture7
2012 kanemotolablecture7
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Webテクノロジー@2012
Webテクノロジー@2012Webテクノロジー@2012
Webテクノロジー@2012
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料
 
ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
 
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
 
第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)
第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)
第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
 
UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発UXデザイン✕アジャイル✕受託開発
UXデザイン✕アジャイル✕受託開発
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
 
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料
教育システム情報学会関西支部若手研究者フォーラムKinect勉強会(Hackathon)資料
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダJAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
 
うちのデザインシステム.pdf
うちのデザインシステム.pdfうちのデザインシステム.pdf
うちのデザインシステム.pdf
 

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

  • 2. 自己紹介 Twitter ID:@dandelion1124 webpage: http://atinfinity.github.io/ • 学生時代は画像処理、VRの研究に従事 • 現在は都内勤務エンジニア • Build Insiderにて「OpenCV入門」という記事を連載中 – http://www.buildinsider.net/small/opencv
  • 3. TL;DR ➢ NVIDIA VisionWorksの環境構築はとっても簡単 ➢ CMake、OpenCVとの連携もできる ➢ VisionWorksやるならgraph mode ➢ 日本語情報少ないのでみんなで使って記事を書こ う!
  • 4. OpenVXとは • Khronos Groupが仕様策定しているコンピュータビ ジョンアプリケーション向けのライブラリ、フレーム ワーク – https://www.khronos.org/openvx/ • ターゲットは低消費電力、リアルタイムのアプリケー ション • 目的の処理を連結グラフで記述 OpenVXについて知りたい方は以前の発表資料もご参考ください。 https://www.slideshare.net/YasuhiroYoshimura/33openvx-nvidia-visionworks
  • 5. NVIDIA VisionWorksとは • NVIDIAが提供するOpenVX implementation • ソフトウェアスタックはざっくりとこんな感じ https://www.khronos.org/assets/uploads/developers/library/2016-embedded-vision- summit/V2_VisionWorks_OpenVX_tutorial.pdf
  • 6. NVIDIA VisionWorks Tips JetPackでJetson、PC環境にセットアップできる ✓ わかりにくいけどホストPCのみインストールすることも可 ホストPCへのインストール Jetsonへのインストール
  • 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. 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. 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. 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. NVIDIA VisionWorks Tips nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ イリングできる ✓ nvvpを使ってJetson上で動作するVisionWorksプログラム のプロファイルを取るときはホスト側のnvvpを起動して、 ssh経由でリモートプロファイリングする
  • 12. NVIDIA VisionWorks Tips nvprof、 NVIDIA Visual Profiler(nvvp)で簡単にプロファ イリングできる ✓ nvvpを使ってJetson上で動作するVisionWorksプログラム のプロファイルを取るときはホスト側のnvvpを起動して、 ssh経由でリモートプロファイリングする あっ、VisionWorks内部はOpenCVのcudev::GlobPtrSzを 引数にしたCUDAカーネルになっているのか(学び)
  • 13. NVIDIA VisionWorks Tips ➢graph modeを使おう! OpenVXには2つのモードがあります。 ✓graph mode ✓同期処理が少ないので高速 ✓immediate mode ✓内部的にはOpenVXのVision APIを1つのgraphとして処 理 ✓つまり、同期処理が増えるので遅い ✓あくまでプロトタイプ用途
  • 14. NVIDIA VisionWorks Tips ➢graph modeを使おう! ✓ graph modeの方が本当に速いのか実験 ✓ 今回はSemiGlobalMatchingを使ったコードで実験 Color Convert SGM left gray right gray disparity right 画像データ ノード Color Convert left virtual image
  • 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. NVIDIA VisionWorks Tips ➢graph modeを使おう! ✓ 計測結果 ✓ graph mode: 20.9 ms ✓ Immediate mode: 31.6 ms ✓ 実行結果 ✓下図は入力画像にdepth(colormap)を重畳したもの ✓ graph modeの方が高速! ✓ Jetson TX2でこの速度は魅力
  • 17. NVIDIA VisionWorks Tips ➢ その他試したこと ✓ graph最適化レベル変更 ✓vxSetGraphAttributeで最適化レベルを指定できる 特に指定しない場合、デフォルトでは-O2となっている
  • 18. NVIDIA VisionWorks Tips ➢ その他試したこと ✓ graph最適化レベル変更 ✓コード例はこんな感じ ✓今回のサンプルでは効果が見られなかった・・・ ✓もう少し複雑なgraphじゃないと効果がないのかも?(要検証) const char* option = "-O3"; vxSetGraphAttribute(graph, NVX_GRAPH_VERIFY_OPTIONS, option, strlen(option)); vxVerifyGraph(graph); O3を明示的に指定
  • 19. TODO(という名の積み残し) ➢ カスタムOpenVXノード実装 ✓ 自作のOpenVXノードを作る ➢ OpenVXのスケジューリングAPI周りを試す ✓ どの程度高速化に効いてくるのか気になる ➢ VisionWorksのCUDA連携 ➢CUDA対応ライブラリや自作CUDAカーネルを組み込む時 に便利 ➢ VisionWorksを使ったROSパッケージ作成 ✓ SGM、Sfm、trackingあたりとか需要あるのでは?
  • 20. まとめ ➢ NVIDIA VisionWorksの環境構築はとっても簡単 ✓ JetPackでチェックするだけ ➢ CMake、OpenCVとの連携もできる ✓ CUDA連携については別の機会で ➢ VisionWorksやるならgraph mode ➢ 日本語情報少ないのでみんなで使って記事を書こ う!