Enviar pesquisa
Carregar
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
•
19 gostaram
•
16,428 visualizações
Yasuhiro Yoshimura
Seguir
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 57
Recomendados
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
Yasuhiro Yoshimura
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
Recomendados
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
Yasuhiro Yoshimura
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
例外設計における大罪
例外設計における大罪
Takuto Wada
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
Fixstars Corporation
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
Yasuhiro Yoshimura
20160728 hyperscale #03
20160728 hyperscale #03
ManaMurakami1
Mais conteúdo relacionado
Mais procurados
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
例外設計における大罪
例外設計における大罪
Takuto Wada
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
Fixstars Corporation
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
Mais procurados
(20)
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
メタプログラミングって何だろう
メタプログラミングって何だろう
Pythonによる黒魔術入門
Pythonによる黒魔術入門
例外設計における大罪
例外設計における大罪
できる!並列・並行プログラミング
できる!並列・並行プログラミング
HTTP/2 入門
HTTP/2 入門
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
中3女子でもわかる constexpr
中3女子でもわかる constexpr
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
CUDAプログラミング入門
CUDAプログラミング入門
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Semelhante a 【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
Yasuhiro Yoshimura
20160728 hyperscale #03
20160728 hyperscale #03
ManaMurakami1
画像処理でのPythonの利用
画像処理でのPythonの利用
Yasutomo Kawanishi
Open modeler
Open modeler
Yoshiki Izumi
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
2012 kanemotolablecture1
2012 kanemotolablecture1
ytanno
20150227 イタンジプログラミング講座テキスト第4回
20150227 イタンジプログラミング講座テキスト第4回
Yusuke Yokozawa
2012 kanemotolablecture2
2012 kanemotolablecture2
ytanno
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
Openshift 20191121
Openshift 20191121
Yasushi Osonoi
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
de:code 2017
OCaml でデータ分析
OCaml でデータ分析
Akinori Abe
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
Megagon Labs
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
130710 02
130710 02
openrtm
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
OpenCLに触れてみよう
OpenCLに触れてみよう
You&I
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
H2O Space. Co., Ltd.
Semelhante a 【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
(20)
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介
20160728 hyperscale #03
20160728 hyperscale #03
画像処理でのPythonの利用
画像処理でのPythonの利用
Open modeler
Open modeler
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
2012 kanemotolablecture1
2012 kanemotolablecture1
20150227 イタンジプログラミング講座テキスト第4回
20150227 イタンジプログラミング講座テキスト第4回
2012 kanemotolablecture2
2012 kanemotolablecture2
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Openshift 20191121
Openshift 20191121
Nodejuku01 ohtsu
Nodejuku01 ohtsu
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
OCaml でデータ分析
OCaml でデータ分析
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
130710 02
130710 02
Nodeにしましょう
Nodeにしましょう
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
OpenCLに触れてみよう
OpenCLに触れてみよう
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
Último
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Último
(10)
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
1.
OpenCVのOpenCL実装oclMat 関東GPGPU勉強会#2 2013/6/1 @dandelion1124
2.
自己紹介(1/3) Twitter:@dandelion1124 • 学生時代は画像処理の研究に従事。 • 現在は都内勤務エンジニア。 •
研究室向けOpenCVのTipsサイトを作っていたら OpenCV関連の書籍を書くことになり今に至る。 blog: http://www.atinfinity.info/blog/ wiki: http://www.atinfinity.info/wiki/
3.
自己紹介(2/3) • 書籍執筆 – OpenCVプログラミングブック •
和訳本の原稿チェック – 詳解 OpenCV – 実践 コンピュータビジョン • 雑誌関連 – 日経ソフトウェア(2011年3月号) 特集記事担当
4.
自己紹介(3/3) • メインで活動している勉強会 – 関東コンピュータビジョン勉強会
#cvsaisentan http://sites.google.com/site/cvsaisentan/
5.
というわけで ステマはここまで
6.
本日のアジェンダ • OpenCLとは? • OpenCVとは? •
OpenCVのデータ構造 • oclMatとは? • oclMatを使うには • oclMatの内部処理 • oclMat性能評価 本日のメイン 本題に入る前の前準備
7.
OpenCLとは? • Open Computing
Languageの略称。 • ヘテロジーニアスな環境でプロセッサ(GPU, DSP, Cell/B.E., CPU )の違いを吸収した共通API等を用いて 並列処理を記述するためのフレームワーク。Apple社 にて提案後、Khronos Groupが仕様策定。 • C99ベースの「OpenCL C言語」でデバイス向けのプロ グラム開発を行うことができる。 http://www.khronos.org/opencl/
8.
OpenCVとは? Intelが開発・公開したOpen SourceのComputer Vision ライブラリ。現在はWillow
Garageが開発を行って いる。 • 公式サポートOS – Windows/Linux/Mac OS/Android/iOS • 公式サポート言語 – C/C++/Python/Java ※有志による非公式ラッパーは以下のサイトにまとめています。 http://www.atinfinity.info/wiki/index.php?OpenCV%2FOpenCV%20wrapper%20list
9.
OpenCVのデータ構造 OpenCVで画像を格納するために使うデータ構造は おおまかに以下の3つ。 • cv::Mat 画像データの入れ物(CPU版) •
gpu::GpuMat 画像データの入れ物(CUDA版) • ocl::oclMat 画像データの入れ物(OpenCL版) 今日のお話はこの部分がメイン
10.
oclMatとは? • OpenCLデバイス上で画像処理を行うために用い るデータ構造 • cv::Matとほぼ同じようにコーディングできる →学習コストが少なくて済む •
CUDA版のgpu::GpuMatも基本的に使い方が同じ ※GpuMatの方がoclMatより対応関数が多い
11.
本題に入る前に ちょっと脱線します
12.
oclMatをtwitterで検索すると・・・
13.
oclMatをtwitterで検索すると・・・
14.
oclMatをtwitterで検索すると・・・ 自分しかいない\(^o^)/ 布教しよう!(今回の主目的)
15.
oclMatをtwitterで検索すると・・・ 1週間前は凄い悲壮感が というか色々ひどい・・・
16.
というわけで 本題に戻ります
17.
oclMatを使うには ■CMake CMakeで以下の手順を行うことで ソリューションファイルが生成される ①「WITH_OPENCL」にチェックを入れる ②「Configure」ボタンを押す ③「Generate」ボタンを押す ■OpenCL環境導入 PCにOpenCLのSDKをインストールして おく必要がある 詳細なAPIは以下を参照。 http://docs.opencv.org/modules/ocl/doc/ocl.html
18.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } グレースケール化 ①ヘッダ読み込み ②oclMat初期化 ③画像読み込み ④oclMat処理 ⑤画像書き込み
19.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } ②oclMat初期化 ③画像読み込み ④oclMat処理 ⑤画像書き込み oclMatを使うにはocl.hppの インクルードが必要 ①ヘッダ読み込み OpenCVのヘッダをインクルード
20.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } ③画像読み込み ④oclMat処理 ⑤画像書き込み OpenCLデバイスリストの取得 (※ここではGPUのみを取得) 以下のような指定も可能。 CVCL_DEVICE_TYPE_ALL OpenCLデバイスを全て取得 CVCL_DEVICE_TYPE_CPU CPUのみを取得 etc... 注意点 oclMatを使う前にocl::getDeviceを 必ず呼ばないといけない点に注意。 ②oclMat初期化
21.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } ④oclMat処理 ⑤画像書き込み 画像ファイルを読みこんで cv::Mat形式で格納する。 ③画像読み込み
22.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } ⑤画像書き込み oclMatのコンストラクタを生成して、 cv::Matの画像データをOpenCL デバイスに転送する ④oclMat処理 oclMatの画像データに対して グレースケール化を行う グレースケールにした結果を ホスト側に転送する
23.
サンプルコード(グレースケール化) #include <opencv2/core/utility.hpp> #include <opencv2/core/core.hpp> #include
<opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui.hpp> #include <opencv2/ocl/ocl.hpp> using namespace cv; int main(int argc, char** argv) { std::vector<ocl::Info> oclinfo; int devnums = ocl::getDevice(oclinfo, ocl::CVCL_DEVICE_TYPE_GPU); Mat src = imread("lena.jpg", IMREAD_UNCHANGED); Mat dst; ocl::oclMat oclsrc(src), ocldst; ocl::cvtColor(oclsrc, ocldst, COLOR_BGR2GRAY); ocldst.download(dst); imwrite(“output.jpg", dst); return 0; } ⑤画像書き込み グレースケール化した画像を ファイルに書き込む
24.
ねっ、簡単でしょう?
25.
使う分には簡単なのは わかったけど
26.
内部でどんな処理が 動いてるんだろう?
27.
oclMatの内部処理(初回実行) OpenCLデバイス カーネルバイナリ (Map形式でキャッシュ) OpenCL ランタイムライブラリ oclMatの画像処理関数 カーネル ソース ①カーネル読み込み ②カーネルコンパイル ③キャッシュ ④カーネル実行
28.
oclMatの内部処理(2回目以降) OpenCLデバイス カーネルバイナリ (Map形式でキャッシュ) OpenCL ランタイムライブラリ oclMatの画像処理関数 ①キャッシュから必要なカーネルを探す ③カーネル実行 ②カーネル 読み込み カーネルコンパイルが 不要!
29.
oclMatの内部処理(補足) • OpenCL 1.1以上でないと使えない •
2.4.5時点では同一環境に複数OpenCLデバイ スがあっても同時に使えない →Titan 2枚刺しフルに使えない\(^o^)/ • oclMatはbuffer objectとして処理される ( image objectではない) http://docs.opencv.org/modules/ocl/doc/introduction.html
30.
oclMatの内部処理(まとめ) • 初回実行時はカーネルコンパイルが走る(の でその分時間がかかる) • 2回目以降はキャッシュから引っ張れるので カーネルコンパイルは不要 •
良く使うカーネルは事前に(主にプログラムの はじめ)にダミーとして呼んでおくと良い
31.
oclMat性能評価 ■計測方法 対応するMat、oclMatの関数を5回処理した処理時間 を計測。 oclMatはダミー処理を事前に呼んでおいて 計測。※ホスト、デバイスの転送時間は含まない。
32.
oclMat性能評価 ■計測関数 1. cvtColor 2. threshold 3.
absdiff 4. Laplacian 5. matchTemplate 6. bilateralFilter ■入力画像 1~4、6: 512x512[pixel] 5: 探索画像:748x576[pixel] テンプレート画像: 52x93[pixel]
33.
Intel OpenCL編
34.
oclMat性能評価(Intel OpenCL編) ■計測環境 CPU:Intel Core
i7-3930K@3.20GHz (6コア) メモリ:32.0GB GPU:NVIDIA GeForce GTX 680 コンパイラ:Visual Studio 2010 Professional ■OpenCL Intel OpenCL SDK 3.0
35.
0 0.5 1 1.5 2 2.5 3 cvtColor threshold absdiff
Laplacian 処理時間[ms] 計測結果(1) Mat oclMat oclMat性能評価(Intel OpenCL編) OpenCL(CPU版)
36.
oclMat性能評価(Intel OpenCL編) 0 1000 2000 3000 4000 5000 6000 7000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat ocMat OpenCL(CPU版)
37.
oclMat性能評価(Intel OpenCL編) 0 0.5 1 1.5 2 2.5 3 cvtColor threshold
absdiff Laplacian 処理時間[ms] 計測結果(1) Mat oclMat OpenCL(GPU版)
38.
oclMat性能評価(Intel OpenCL編) 0 1000 2000 3000 4000 5000 6000 7000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat oclMat OpenCL(GPU版)
39.
GpuMat編(おまけ)
40.
GpuMat性能評価 ■計測環境 CPU:Intel Core i7-3930K@3.20GHz
(6コア) メモリ:32.0GB GPU:NVIDIA GeForce GTX 680 コンパイラ:Visual Studio 2010 Professional ■CUDA NVIDIA CUDA5
41.
GpuMat性能評価 0 0.5 1 1.5 2 2.5 3 cvtColor threshold absdiff
Laplacian 処理時間[ms] 計測結果(1) Mat GpuMat
42.
GpuMat性能評価 0 1000 2000 3000 4000 5000 6000 7000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat GpuMat
43.
性能比較
44.
性能比較 0 0.5 1 1.5 2 2.5 3 cvtColor threshold absdiff
Laplacian 処理時間[ms] 計測結果(1) Mat oclMat(CPU) oclMat(GPU) gpuMat
45.
性能比較 0 1000 2000 3000 4000 5000 6000 7000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat oclMat(CPU) oclMat(GPU) gpuMat
46.
Titan+NVIDIA OpenCL編 (おまけ)
47.
oclMat性能評価(Titan編) ■計測環境 CPU:Intel Xeon CPU
E5-2630L@2GHz (/proc/cpuinfoによると24コア?) メモリ:32.0GB GPU:NVIDIA GeForce GTX Titan コンパイラ:gcc 4.4.7 ■OpenCL NVIDIA OpenCL(CUDA 5)
48.
oclMat性能評価(Titan編) 0 0.5 1 1.5 2 2.5 3 cvtColor threshold absdiff
Laplacian 処理時間[ms] 計測結果(1) Mat oclMat
49.
oclMat性能評価(Titan編) 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat ocMat
50.
性能比較 (発表からの追加分)
51.
oclMat性能評価(追加評価) ■計測関数 1. cvtColor 2. threshold 3.
absdiff 4. Laplacian 5. matchTemplate 6. bilateralFilter ■入力画像 1~4、6: 2560x2560[pixel] 5: 探索画像:3840x2880[pixel] テンプレート画像: 260x465[pixel] 最初の計測から 画像サイズを5倍にしてみると Matとの速度差に違いが出る?
52.
oclMat性能評価(Intel OpenCL編) OpenCL(CPU版) 0 5 10 15 20 25 30 35 40 45 cvtColor threshold
absdiff Laplacian 処理時間[ms] 計測結果(1) Mat oclMat
53.
oclMat性能評価(Intel OpenCL編) OpenCL(CPU版) 0 50000 100000 150000 200000 250000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat ocMat
54.
oclMat性能評価(Intel OpenCL編) OpenCL(GPU版) 0 5 10 15 20 25 30 35 40 45 cvtColor threshold
absdiff Laplacian 処理時間[ms] 計測結果(1) Mat oclMat
55.
oclMat性能評価(Intel OpenCL編) OpenCL(GPU版) 0 50000 100000 150000 200000 250000 matchTemplate bilateralFilter 処理時間[ms] 計測結果(2) Mat ocMat
56.
まとめ • 自力でゴリゴリOpenCLカーネルを書かなくてもお手軽に メニーコアの恩恵が得られる • 既存のMatで書いていた処理をoclMatに置き換えるだ けで簡単に高速化できる可能性がある(関数や画像サ イズはMatより遅くなるものもあるので事前に確認した 方が良い) •
GPUで思ったより速くならないのはGPU向けに特化した チューニング実装が足りないせい?(ただし、最近 oclMat関連のコミットが活発なので今後改善される可能 性あり)
57.
おわり