More Related Content
Similar to 【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた (20)
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
- 10. OpenVXで処理時間を測る
• graphの処理時間を測る
• nodeの処理時間を測る
vx_perf perf;
vxQueryGraph(graph1, VX_GRAPH_ATTRIBUTE_PERFORMANCE, &perf, sizeof(perf));
std::cout << (perf.tmp / 1000000.0) << “[ms]” << std::endl;
vx_perf perf;
vxQueryNode(node1, VX_NODE_ATTRIBUTE_PERFORMANCE, &perf, sizeof(perf));
std::cout << (perf.tmp / 1000000.0) << “[ms]” << std::endl;
- 12. サンプルコード(OpenVX)
vx_context context = vxCreateContext();
vx_image src;
vx_image dst;
vx_graph graph = vxCreateGraph(context);
vx_node node = vxColorConvertNode(graph, src, dst);
vxVerifyGraph(graph);
vxProcessGraph(graph);
vxReleaseNode(&node);
vxReleaseGraph(&graph);
vxReleaseImage(&vx_src);
vxReleaseImage(&vx_dst);
vxReleaseContext(&context);
①初期化
②Vision処理
③後処理
- 13. サンプルコード(OpenVX)
vx_context context = vxCreateContext();
vx_image src;
vx_image dst;
vx_graph graph = vxCreateGraph(context);
vx_node node = vxColorConvertNode(graph, src, dst);
vxVerifyGraph(graph);
vxProcessGraph(graph);
vxReleaseNode(&node);
vxReleaseGraph(&graph);
vxReleaseImage(&vx_src);
vxReleaseImage(&vx_dst);
vxReleaseContext(&context);
②Vision処理
③後処理
context生成
image生成
画像データをコピーする
処理は時間の都合上割愛。
- 14. サンプルコード(OpenVX)
vx_context context = vxCreateContext();
vx_image src;
vx_image dst;
vx_graph graph = vxCreateGraph(context);
vx_node node = vxColorConvertNode(graph, src, dst);
vxVerifyGraph(graph);
vxProcessGraph(graph);
vxReleaseNode(&node);
vxReleaseGraph(&graph);
vxReleaseImage(&vx_src);
vxReleaseImage(&vx_dst);
vxReleaseContext(&context);
②Vision処理
③後処理
graph生成
node生成
このサンプルは
色変換のnode
graph検証
graphが正しく作られて
いればVX_SUCCSESSが
返ってくる
- 15. サンプルコード(OpenVX)
vx_context context = vxCreateContext();
vx_image src;
vx_image dst;
vx_graph graph = vxCreateGraph(context);
vx_node node = vxColorConvertNode(graph, src, dst);
vxVerifyGraph(graph);
vxProcessGraph(graph);
vxReleaseNode(&node);
vxReleaseGraph(&graph);
vxReleaseImage(&vx_src);
vxReleaseImage(&vx_dst);
vxReleaseContext(&context);
③後処理
graph実行
graphの記述に沿った
処理が実行される
- 16. サンプルコード(OpenVX)
vx_context context = vxCreateContext();
vx_image src;
vx_image dst;
vx_graph graph = vxCreateGraph(context);
vx_node node = vxColorConvertNode(graph, src, dst);
vxVerifyGraph(graph);
vxProcessGraph(graph);
vxReleaseNode(&node);
vxReleaseGraph(&graph);
vxReleaseImage(&vx_src);
vxReleaseImage(&vx_dst);
vxReleaseContext(&context);
後処理
- 18. AMD OpenVX(AMDOVX)
• AMD APP SDKを使ったOpenVX Implementation
– OpenCL v2.0以降の機能を用いて実装されている
• C++11以降をサポートしているコンパイラが必要
• オープンソース!(なのでソースコードが読める)
– https://github.com/GPUOpen-ProfessionalCompute-
Libraries/amdovx-core
• Windows上での環境構築方法をまとめました
https://github.com/atinfinity/lab/wiki/AMD-OpenVX-
%28AMDOVX%29%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%A
F%89
- 19. NVIDIA VisionWorks
• CUDAを使ったOpenVX Imprementation
• 2016/4/8時点で最新のVisionWorks v1.0を使うには
CUDA Toolkit v7.0のインストールが必要
• Jetson TK1、TX1でも動作する!
– JetPack(https://developer.nvidia.com/embedded/jetpack)をイ
ンストールすることでVisionWorksが使える
• Webinarも用意されている
https://developer.nvidia.com/embedded/learn/tutorials#collapseVisionWork
s
- 24. NVIDIA VisionWorksの機能
• Image Arithmetic
– Add/Subtract/Multiply
– Not/Or/And/Xor
– LUT
– Color Convert
etc…
• Flow
– Median Flow
– Optical Flow
etc…
• Depth
– Stereo Block Matching
– Semi-Global Matching
etc…
• Geometric Transform
– Affine Warp
– Flip Image
– Remap
– Scale Image
etc…
https://developer.nvidia.com/embedded/visionworks から抜粋
- 25. NVIDIA VisionWorksの機能
• Filters
– Box Filter
– Convolution
– Gaussian Filter
– Laplacian Filter
etc…
• Features
– Fast Corners
– Harris Corners
– Hough Circles
– Hough Lines
etc…
• Analysis
– Histogram
– Histogram Equalization
– Integral Image
– Min Max Locations
etc…
https://developer.nvidia.com/embedded/visionworks から抜粋
- 27. 速度計測してみた
• 計測環境
– OS:Windows 10 Pro 64bit
– CPU:Intel Core i7-3930K@3.20GHz
– メモリ:32GB
– GPU:NVIDIA GeForce GTX 680
– VisionWorks:NVIDIA VisionWorks v1.0.25
– CUDA:CUDA Toolkit v7.0
– OpenCV:OpenCV 3.1
– コンパイラ:Visual Studio 2013 Update5
- 28. 速度計測してみた
0 1 2 3 4 5 6 7 8 9
2160p
4320p
処理時間[ms]
画像サイズ
グレースケール化
VisionWorks cuda::GpuMat Mat
- 29. 速度計測してみた
0 5 10 15 20 25 30 35 40 45 50
2160p
4320p
処理時間[ms]
画像サイズ
box filter
VisionWorks cuda::GpuMat Mat
- 30. 速度計測してみた
0 2 4 6 8 10 12
1024x440
処理時間[ms]
画像サイズ
stereoBM
VisionWorks cuda::GpuMat Mat
- 31. 速度計測してみた
0 20 40 60 80 100 120 140
1024x440
処理時価[ms]
画像サイズ
stereoSGBM
VisionWorks Mat
※OpenCV 3.1時点でGpuMatにSGBMの関数が未実装なのでGpuMatは比較対象から除外
- 32. OpenVXを使ってみた所感
• OpenCVに比べてまだまだ対応関数が少ない
– OpenVX v1.0ではプリミティブな関数のみの提供に留まっ
ているが以降のバージョンで追加していく予定らしい
– AMDはOpenCVを使った追加モジュールを公開している
• https://github.com/GPUOpen-ProfessionalCompute-
Libraries/amdovx-modules
• GraphやNodeの概念がちょっと独特
– UIでデータフローを作ってプログラミングをするツール
(http://www.adaptive-vision.com/en/software/ みたいな
の)とは相性が良さそう