MATLAB CoderTMと - MathWorks...講演内容(15:30-16:20) ビジョン処理と高速化...
Transcript of MATLAB CoderTMと - MathWorks...講演内容(15:30-16:20) ビジョン処理と高速化...
自己紹介
(むらまつ しょうご) 所属
新潟大学 自然科学系(工学部) 電気電子工学科
画像・映像信号処理の教育研究に従事 学部:「プログラミング」,「画像情報工学」 修士:「画像処理特論」,博士:「多次元信号処理論」 学会:IEEE、電子情報通信学会、映像情報メディア学会
著書など 「マルチメディア技術の基礎DCT入門」 (CQ出版社, 1997年)
「MATLABによる画像&映像信号処理 」 (CQ出版社, 2007年)
2012/10/30 MATLAB EXPO 2012 | JAPAN 2
講演内容(15:30-16:20)
ビジョン処理と高速化 プロファイル処理、並列化、MEX化
金属加工検証システム開発事例 (総務省助成事業、研究協力者) DLL/EXE生成とOpenCVとの連携
指向性画像変換研究・開発事例 (科研費助成事業、研究代表者) Simulink®からBeagleBoardへの実装
2012/10/30 MATLAB EXPO 2012 | JAPAN 3
ビジョン処理の背景
センサネットワーク、クラウド、ビッグデータ (サイバー・フィジカル・システム)
遠隔・協調化、劣悪なセンシング、リアルタイム性
画像応用への高品質化・高機能化の要求
圧縮、復元、特徴抽出、認識等の発展に期待大
2012/10/30 MATLAB EXPO 2012 | JAPAN 4
ビジョン処理の特徴
「百聞は一見にしかず」映像データ量は膨大
地デジ・ハイビジョン放送: 最大16.8Mbps
音声:144kbps(1ch)~384kbps(5.1ch)
映像:平均約14Mbps
多様かつ高度な要求
電力、速度、サイズ、価格などの制約
2012/10/30 MATLAB EXPO 2012 | JAPAN 5
膨大なデータに対し、シビアなトレードオフの探求が必須
音声に比べ
30~100倍のレート
ビジョン処理とMATLAB/Simulink
システム設計 アルゴリズム開発
実験・実装・検証
本講演の使用オプション
Image Processing
ToolboxTM
Image Acquisition
ToolboxTM
Computer Vision System
ToolboxTM
Parallel Computing
ToolboxTM
MATLAB Coder
MATLAB EXPO 2012 | JAPAN 6 2012/10/30
MATLAB
Simulink
R2012b
高速化の手段
ビジョン処理の課題
膨大なデータの高速実現/リアルタイム処理
MATLABにおける高速化の手段を紹介
実行時間解析
並列化
MEX化
2012/10/30 MATLAB EXPO 2012 | JAPAN 7
私の研究開発ツール(第53回) “MATLABによる映像処理システム開発”
映像情報メディア学会誌
Vol.65, No.11, pp.1571~1574 (2011)
http://www.ite.or.jp/data/journal/passed_issues/tool1111/
【例】画像の変換と逆変換
非分離ウェーブレット変換
変換
逆変換
A. Adachi, S. Muramatsu, H. Kikuchi, Constraints of Second-Order Vanishing Moments on Lattice Structures for
Non-separable Orthogonal Symmetric Wavelets, IEICE Trans. Fundamentals, Vol. E92-A, No. 3, pp.788-797, Mar. 2009
2012/10/30 MATLAB EXPO 2012 | JAPAN 8
実行時間解析
プロファイラ―
メニューから利用する方法
「エディター」→「実行および時間の計測」
コマンドウィンドウ(スクリプト)から利用する方法
» profile on % 解析開始
» profile off % 解析終了
» profile viewer % 解析結果表示
2012/10/30 MATLAB EXPO 2012 | JAPAN 9
main_ex_prf.m
高速化の戦略を立てる
並列化
Parallel Computing Toolbox
有効性の確認
「Parallel」→「Manage Cluster Profiles…」 →「Validate」
パラレルFORループを利用する方法
» matlabpool % MATLABプール開始
» parfor … % パラレルFORループ開始
» end % パラレルFORループ終了
» matlabpool close % MATLABプール終了
2012/10/30 MATLAB EXPO 2012 | JAPAN 10
main_ex_par.m
測定開始id = tic;
測定終了
toc(id)
MEX化(GUI)
MATLAB Coder C/C++経由で実行形式へ 準備
» mex –setup % C/C++コンパイラの設定
GUIを利用する方法 » coder % MATLAB Coder GUI の起動
2012/10/30 MATLAB EXPO 2012 | JAPAN 11
function y = fun(x) %#codegen
% FUN
…
y = …
ターゲット関数には、
忘れずに記載
MEX化(スクリプト)
MATLAB Coder
C/C++経由で実行形式へ
コマンドウィンドウ(スクリプト)から利用する方法(例) » cfg = coder.config(‘mex’); % MEXに設定
» cfg.DynamicMemoryAllocation = ‘off’;
» x = coder.typesof(double(0), [8 1], [1 0]); % 型設定
» codegen –config cfg fun –arg { x } % コード生成
2012/10/30 MATLAB EXPO 2012 | JAPAN 12
型 サイズ
可変/固定
ビルド・スクリプトを作成すれば管理がし易く便利
function y = fun(x) %#codegen
% FUN
…
y = …
ターゲット関数には、
忘れずに記載
もしくは‘AllVariableSizeArrays’
MEX関数
呼び出しの例
デフォルトでは “_mex”が関数名の末尾に付く
2012/10/30 MATLAB EXPO 2012 | JAPAN 13
…
ftype = exist(‘fun_mex’,‘file’); % ファイルの確認
if ftype == 3
y = fun_mex(x); % MEX関数の呼び出し
else
y = fun(x); % M関数の呼び出し
end
…
パス上にMEX/DLLがあれば
値 ‘3’ を返す
拡張子は実行環境毎に異なる
(例、Win32⇒’mexw32’)
main_ex_mex.m
main_ex_pmx.m
応用事例紹介
金属加工検証システムの実装
レンズ歪補正デモ(MATLAB)
レンズ歪推定デモ(MATLAB)
指向性画像変換の組込み実装
画像修復デモ(MATLAB)
画像解析デモ(Simulink)
2012/10/30 MATLAB EXPO 2012 | JAPAN 14
MATLAB Coder と System object の活用事例を紹介
main_udst_cui.m
main_dest_cui.m
main_imrstrip.m
sowavedec2embd.slx
【応用事例1】 金属加工検証システム開発事例 総務省戦略的情報通信研究開発推進制度(SCOPE) 「クロスネットワークを機軸とした地域間データ共有機能を有する金属加工形状検証システムの研究開発」 (研究代表者:新潟大学 教授 鈴木孝昌)
高精度レンズ歪推定・補正実現にMATLABを利用
2012/10/30 MATLAB EXPO 2012 | JAPAN 15
アルゴリズム検証 スタンドアローン
アプリケーション
DLL/EXE DLL M
EX
金属加工検証システムの概要
板金加工工程の効率化
検査データの共有
再受注の迅速化
納期短縮
2012/10/30 MATLAB EXPO 2012 | JAPAN 16
工場(検査端末)
工場(検査端末) 発注元
検査データ
受注確認
検査データ
発注
検査データ 受注確認
ホストサーバー
地域・企業間ネットワーク
(燕三条地域)
検査端末の開発を担当
高精度レンズ歪推定・補正の概要
レンズ歪推定 レンズ歪補正
MATLAB EXPO 2012 | JAPAN 17 2012/10/30
局所射影変換
デジカメ
FPD
位相限定相関
レンズ歪補正へ 形状照合へ
半径方向歪モデルと併用 (Camera Calibration Toolbox)
試作機(板金:戸塚金属工業㈱製)
スタンドアローン化の要求
形状照合・管理ソフト(テクノケア社)との連携のため
コード生成に対応した高機能なSystem objectを利用
利用したクラス(Computer Vision System Toolbox)
vision.FFT, vision.IFFT,
vision.ImageFilter, vision.BlobAnalysis,
vision.MorphologicalClose,
vision.ShapeInserter, vision.Maximum,
vision.GeometricTransformEstimator,
vision.GeometricTransformer
コード生成対応
System object の活用
MATLAB EXPO 2012 | JAPAN 18 2012/10/30
http://www.mathworks.co.jp/jp/help/coder/ug/system-objects-supported-for-code-generation.html
コード生成対応のSystem object 一覧
関数定義の例
コード生成対応
System object の利用法
MATLAB EXPO 2012 | JAPAN 19
function y = fun(x) %#codegen
% FUN
persistent h;
if isempty(h)
h = vision.Xxx(…);
end
y = step(h,…);
2012/10/30
持続変数の宣言
プロパティの設定
System object生成
処理の実行
入力
http://www.mathworks.co.jp/jp/help/vision/gs/use-system-objects-for-code-generation-from-matlab.html
コード生成対応のSystem object 利用法
main_udst_cui.m
main_dest_cui.m
LIB/DLL生成
2012/10/30 MATLAB EXPO 2012 | JAPAN 20
もしくは‘dll’
もしくは‘AllVariableSizeArrays’
複数の関数を列挙
もしくは‘C’
Visual C++等で利用できる
EXE生成
main関数を定義しEXE生成へ
型、初期化/終了、メモリ割当/解放等に約束事あり
OpenCVと連携可能(imread,imwrite,XML操作等)
2012/10/30 MATLAB EXPO 2012 | JAPAN 21
XML <opencv_strage>
main_udst_cui.m main_dest_cui.m
main_udst_cui.cpp main_dest_cui.cpp
XML <opencv_strage>
レンズ歪推定 レンズ歪補正
【応用事例2】 指向性画像変換研究・開発事例 科学研究費助成事業(基盤研究(C)) 「高機能画像表現のための傾斜平面分離性能を有する二次元直交変換の設計と実時間実現」 (研究代表者:新潟大学 准教授 村松正吾)
System object定義からBeagleBoard実装まで
2012/10/30 MATLAB EXPO 2012 | JAPAN 23
アルゴリズム検証 BeagleBoard-xM
PIL/EXE
MATLAB
Coder
不要
指向性画像変換の概要
斜めエッジ・テクスチャに強い変換
MATLAB Central>File Exchange
>DirLOT Toolbox にて公開中
2012/10/30 MATLAB EXPO 2012 | JAPAN 24
“Directional Lapped Orthogonal Transform: Theory and Design,”
IEEE Trans. on Image Process., Vol.21, No.5, pp.2434-2448 (2012)
原画像 4x4 DCT 2-Lv. 9/7DWT
提案法
8.0bpp 0.5bpp 0.5bpp 0.5bpp
提案法の特徴
重複・直交・非分離
ブロック処理が可能
重い…
2012/10/30 MATLAB EXPO 2012 | JAPAN 25
垂直
変換
水平
変換
水平
変換
水平
変換
水平
変換
水平
逆変換
水平
逆変換
水平
逆変換
水平
逆変換
垂直
逆変換
帯域形状
水平
垂直
変換
水平
垂直
逆変換
帯域形状
可分離変換
非分離変換
“Boundary Operation of 2-D
Nonseparable Linear-Phase
Paraunitary Filter Banks,”
IEEE Trans. on Image
Process., Vol.21, No.4,
pp.2314-2318 (2012)
コード生成対応
System object の定義
組込実装したい
matlab.System
子クラスを定義
2012/10/30 MATLAB EXPO 2012 | JAPAN 26
classdef MyClass < matlab.System %#codegen
properties
…
end
methods
function obj = MyClass(varargin)
…
end
end
methods (Access = protected)
function value = stepImpl(obj,x)
…
end
end
end
継承してクラスを定義
コンストラクタ フィールド
step処理の実装
SimulinkからBeagleBoardへ
BeagleBoard実装準備
» targetinstaller
Simulink モデルの作成
System object MATLAB Function ブロック
2012/10/30 MATLAB EXPO 2012 | JAPAN 27
http://www.mathworks.co.jp/jp/help/simulink/beagleboard.html?lang=en
sowavedec2embd.slx BeagleBoard関連情報
まとめ
ビジョン処理の背景を紹介 シビアなトレードオフの探究
実行時間解析と並列処理、MEXによる高速化 profileコマンドの紹介
matlabpool コマンドと parforループの紹介
codegen コマンドの紹介
既存System objectの利活用 MEX/LIB/DLL生成の事例紹介
OpenCVとの連携、EXE生成の事例紹介
自作System objectの定義 Simulinkモデル→BeagleBoard実装の事例紹介
2012/10/30 MATLAB EXPO 2012 | JAPAN 28
謝辞
本講演で紹介した成果の一部は、総務省戦略的情報通信研究開発推進制度(SCOPE)「クロスネットワークを機軸とした地域間データ共有機能を有する金属加工形状検証システムの研究開発(102304003)」、科研費「高機能画像表現のための傾斜平面分離性能を有する二次元直交変換の設計と実時間実現(23560443)」の助成による。
本講演資料の作成にご協力をいただいた新潟大学大学院自然科学研究科博士前期課程の寺澤憲久氏、原伸太郎氏に謝意を表す。
2012/10/30 MATLAB EXPO 2012 | JAPAN 29
主な参考資料
インターフェース2011年12月号特集 “手を動かし実践する!MATLABプログラミング”,CQ出版社,2012年12月
Camera Calibration Toolbox for MATLAB, (URL) http://www.vision.caltech.edu/bouguetj/calib_doc/
OpenCV2プログラミングブック製作チーム:“OpenCV2プログラミングブック”,マイナビ,2011年12月
村松正吾:“MATLABによる映像処理システム開発”,映像情報メディア学会誌Vol.65, No.11, pp.1571~1574 (2011)
鈴木孝昌,村松正吾,追立俊朗,村田光由:“クロスネットワークを機軸とした地域間データ共有機能を有する金属加工形状検証システムの研究開発”,ICTイノベーションフォーラム2012,2012年10月
原伸太郎,古屋幸祐,村松正吾:“DirLOTのツリー構成と組込み実装”,第27回信号処理シンポジウム,2012年11月(発表予定)
2012/10/30 MATLAB EXPO 2012 | JAPAN 30