JetsonでOpenCV @tomoaki_teshima CV 勉 強 会 @ 関 東 2015. 1. 31
今 の 要 約 Jetson NVIDIAの 紹 介 Jetson 上 でOpenCVをビルド らせてみる OpenCVやARMに 関 する ネタ 紹 介 注 : 私 はNVIDIAやARMの 回 し 者 ではありません
Jetsonとは
Jetson とは 組 み 込 み のNVIDIA 製 GPU Tegraの 開 発 ボード 4コアのCPU(ARM Cortex-A15)と 192コアのGPU(Kepler)が 搭 載 されている 192$で 販 売 されている http://www.bdti.com/insidedsp/2014/04/29/nvidia
Keplerが 乗 っている CUDAがそのまま る!
OpenCVとは わずと 知 れたコンピュータビジョンライブラリ そろそろ3.0のmajor release を 控 えている ( 出 る 出 る 詐 欺 ) 様 々なプラットフォームがサポートされている
OpenCVのプラットフォーム http://www.slideshare.net/eugenekhvedchenya/opencv-30-latest-news-and-the-roadmap
Jetson 上 でLinuxが る *)ARM 上 でLinuxが るボードはJetsonよりも 前 から 沢 ありました
OpenCVのビルド NVIDIAからTegra のパッケージが 出 て いる パッケージを 使 う 代 わりにコードからビ ルド ビルド 体 もJetson 上 で う
過 去 の 努 シングルコアのノートPCで 乗 実 験 をしたM1の 冬 4kgぐらいする 重 量 級 のノートPCを 持 って 速 道 路 を った 涙 ぐましい 最 適 化 をして なんとかQVGA 4fps を 達 成 してた ノートPC webcam
10 年 経 ってみて あれ?これJetsonでできたんじゃね?
パフォーマンス 測 定 NEON 最 適 化 (CPU) CUDA 6.5 OpenCL 1.2 を 有 効 にしてOpenCV-3.0-betaをビルド 簡 単 な 処 理 をしてみて 所 要 時 間 を 計 測 残 念 ながらOpenCLのコンフィグに 失 敗 したようで そこはまた 今 度 に 参 考 までに Corei7+GT650MのMBPとも 較
パフォーマンス 測 定 CPU 版 (NEON 利 ) GPU 版 (CUDA 利 ) GPU 版 (OpenCL 利 ) CPU GPU Jetson
測 定 法 50 回 処 理 した 場 合 と10 回 処 理 した 場 合 の 差 分 から 所 要 時 間 を 測 定 50 回 処 理 10 回 処 理
フレーム 差 分
フレーム 差 分 の 結 果 さすがに650Mには 及 ばない しかし 対 値 段 効 果 対 消 費 電 効 果 はTK1の が 上 (らしい) absdiff 関 数 とただのsubtract でここまで 差 が 出 る 原 因 は 謎
フレーム 差 分
Sobel
warpperspective
較 結 果 192$でこのパフォーマンス! 12V1A ぐらいの 電 使 量 (らしい) 絶 対 的 な 性 能 はデスクトップマシンには 今 ひと つ 及 ばない もともと 載 向 けのSoC http://elinux.org/jetson/computer_vision_performance#power_draw_during_computer_vision_tasks
ネタ( 書 き ) CPU (cv::mat) CUDA (cv::cuda::gpumat) OpenCL (cv::umat) using namespace cv; Mat homography; Mat input = imread(filename); Mat result; warpperspective(input, result, homography, input.size()); using namespace cv; Mat homography; Mat input = imread(filename); cvtcolor(input.clone(), input, COLOR_RGB2RGBA); cuda::gpumat gpuinput = cuda::gpumat(input); cuda::gpumat gpuresult; cuda::warpperspective(gpuinput, gpuresult, homography, gpuinput.size()); using namespace cv; Mat homography; Mat input = imread(filename); UMat umatinput = input.getumat(access_read); UMat umatresult; warpperspective(umatinput, umatresult, homography, umatinput.size()); このあたりはdandelion1124 先 という が 詳 しいです
ネタ(ARM) ARM 社 は 設 計 をライセンス 販 売 する Intelと 違 い チップを 売 るのではない サードパーティー 性 のARMの 互 換 チップもあ る Apple (Apple A5-A8) Qualcomm (Snapdragon) Marvell (Sheeva) http://ja.wikipedia.org/wiki/arm%e3%82%a2%e3%83%bc%e3%82%ad%e3%83%86%e3%82%af%e3%83%81%e3%83%a3 ARMアーキテクチャ
ネタ(NEON) ARMv7シリーズから 実 装 されたSIMD 命 令 NEON の 実 時 判 定 が 実 装 されてなかったの で 実 装 してみた AndroidかLinuxならば /proc/cpuinfo /proc/self/auxv あたりを 調 べればわかる getauxval を 使 って 調 査 コードを 書 いてみた
ネタ(NEON) よしプルリクだ! betaには 実 装 されてないが masterで 年 末 にコ ミット 済 みorz. https://github.com/itseez/opencv/blame/master/modules/core/src/system.cpp
ネタ(ARM) メーカー 機 種 名 SoC 購 年 CPU アーキテクチャ NEON HTC HT-03A MSM7201A 2010 ARM11 ARMv6 NO Samsung SC-01C Exynos3 S5PC110 2010 Cortex-A8 ARMv7-A YES Samsung SC-02C Exynos4 4210 2011 Cortex-A9 ARMv7-A YES LG Nexus5 Snapdragon 800 2013 Krait 400 ARMv7-A YES SONY SO-02F Snapdragon 800 2012 Krait 400 ARMv7-A YES HTC Nexus7 Tegra3 30L 2012 Cortex-A9 ARMv7-A YES nvidia Jetson Tegra K1 2014 Cortex-A15 ARMv7-A YES QNAP TS-409 Feroceon 2010 Sheeva ARMv5TE NO http://tessy.org/wiki/index.php?arm
ネタ(cuda::threshold) マルチチャンネル 実 装 しかし テストを 書 いてる 最 中 どうしてこうなった
最 適 化 と 実 装 と 研 究 学 時 代 最 適 化 したい! 速 化 したい! ただの 最 適 化 は 研 究 としては 評 価 されない 通 常 実 装 速 化 後
研 究 で 最 適 化 して 良 い 状 況 アルゴリズムで 速 化 する 場 合 分 のプログラムを 利 する 状 況 が 常 に 限 定 されていて かつ 速 化 が 必 須 の 場 合 息 を 吸 う 様 にSIMDが 書 ける 息 を 吸 う 様 にOpenCLが 書 ける 息 を 吸 う 様 に680 倍 に 速 化 する 時 間 とってプログラミングの 速 化 がした い! という はそれに を 出 すのは めてお いた が 良 い
輪 の 再 発 明 研 究 においては 避 けた が 良 い なるべくならOpenCVの 実 装 を 使 いまわした がtotal で 近 道 理 解 するためにあえて 実 装 する or コードを 読 むはOK
まとめ お 祝 いにJetsonをもらいました OpenCVでプログラムを らせてみた CUDAも るよ!
紹 介 都 内 で 勤 務 するCVエンジニア 勉 強 会 に 第 1 回 から 参 加 して OpenCVのソースコードを 解 説 したWiki http://tessy.org/wiki https://twitter.com/tomoaki_teshima http://www.slideshare.net/tomoaki0705
参 考 献 http://www.slideshare.net/fukushimanorishige/ssii-33751285 Fukushima Norishige, マルチコアを いた 画 像 処 理 http://d.hatena.ne.jp/wosugi/20131208 杉 本 憲 治 郎,ハミング 距 離 の 計 算 はホントに 速 いのか http://www.slideshare.net/yasuhiroyoshimura/gpgpu-dandelion1124-201301130 Yasuhiro Yoshimura, 関 東 GPGPU 勉 強 会 #3 OpenCVの 新 機 能 UMatを 先 取 りしよう http://ja.wikipedia.org/wiki/arm%e3%82%a2%e3%83%bc%e3%82%ad%e3%83%86%e3%82% AF%E3%83%81%E3%83%A3 ARMアーキテクチャ http://www.slideshare.net/eugenekhvedchenya/opencv-30-latest-news-and-the-roadmap Eugene Khvedchenya, OpenCV 3.0 - Latest news and the Roadmap http://www.bdti.com/insidedsp/2014/04/29/nvidia http://man7.org/linux/man-pages/man3/getauxval.3.html https://github.com/itseez/opencv http://elinux.org/jetson/computer_vision_performance#power_draw_during_computer_vision_t asks