SlideShare a Scribd company logo
1 of 74
Download to read offline
コンピュータビジョンの最新ソフトウェア開発環境
OpenCV,PCLの導入・機能紹介、
プログラミング言語の選択と開発ツールの活用
慶應義塾大学 先端科学技術研究センター研究員
林 昌希
1
SSII2015チュートリアル講演会
本日の内容と目的
コンピュータビジョン分野で研究開発活動をされている皆様に、以下の2テーマで
最新のソフトウェア開発環境について紹介
1. 前編:代表的ツール類の紹介
OpenCV/PCLの最近の話と、Python科学技術計算全般について
2. 後編:研究を進める上で
2-①どのプログラミング言語をいつ選択するか
2-②どのようなプロセスや判断基準で行うか、ツールを選択するか
2
本日の目的:
よって、そんなところで苦労しないで済むようにしていただき、
本当に大事なことに、今後より集中できるようにする
(もしくは今後自分で習熟していくのが楽になるための導入解説)
開発テクニックやツールの使いこなしは研究開発の手段であっても目的で
はない。しかし、これらの使いこなしや知識が成果に直結する時代
講師の立ち位置
• 普段の研究分野は画像認識/機械学習(動画からの人物追跡/姿勢推定/行動認識)
• 数理モデルや機械学習の理論寄りの話は強くない(これらはツールとして使う側)
• Point Cloud Library周辺の点群処理系の仕事/研究をしてきた経験あり
• 博士課程の前は4年間プログラマーでした(C#,C++,Javaなどで小チーム開発)
• 従って、一般的なソフトウェア開発テクニック + ここ3年の画像認識での研究の
経験が両方あります(逆に言うとどちらもまだ深くはないです)。
3
一般的な話や公平な提案を心掛けていますが、やはり著者が得意なところに
フォーカスのあたる発表である事には注意 (Pythonをプッシュする点など)
1.前編:ビジョン周辺の
最新ソフトウェア開発環境
(OpenCV/PCLとPython科学技術計算)
4
1.前編:目次
• 1.1 OpenCVについて
• OpecCV3.0の新機能
• 便利なPythonインターフェースも身につけましょう
• OpenCVといえど万能ではない。。
• 1.2 Point Cloud Library
• PCLとロボットについて
• PCL1.7.xの最新機能
• 点群処理にも慣れておく意味
• 1.3 Python科学技術計算環境
• どうしてPython?
• IPython, Python向けのIDE, scikit-learn など
5
OpenCV 3.0の新機能(1/2)
• GSoC等のおかげで多数の新アルゴリズムや機能が追加:
• 魚眼レンズカメラモデル
• 形状の距離計算とマッチング(Shape Context , Earth Movers Distance)
• KAZE/ A-KAZE feature
• HDR処理やPoisson Image Editing
• Saliency / Objectness(物体検出候補検出)
• シーン画像中からのテキスト検出とテキスト認識
• TLDトラッカーなどのオンライントラッキング
• xobjdetect:車検出(Waldboost) と人検出 (Integral Channel Feature)
• viz : 3D可視化ツール(vtkベース)と RDG-Dモジュール
※DERiVEメルマガで、各アルゴリズムを
毎回1つ取り上げ、概要を紹介中
1.1 OpenCVについて
6
詳しくは http://opencv.org/opencv-3-0-alpha.html 等を参照 
• 開発環境や演算高速化周り
• cv::Mat の高速foreach処理
• GPU/OpenCL対応の強化
• 主要Computer Visionデータセットの操作ツール
• Python3サポート
• Matlabバインディング
• ARMのNEON命令向けの最適化
• Intel Performance Primitivesのデフォルト統合
OpenCV 3.0の新機能(2/2)
1.1 OpenCVについて
7
• OpenCV3.0を用いたデモ
• TLD MIT trackerによるオンライン物体追跡
• Poisson Image Editingによる画像合成
8
1.1 OpenCVについて
OpenCVの他言語バインディング
• OpenCV2.0系のプログラミング言語
• メイン:C++
• バインディング:Java, Python
• 有志による非公式のバインディング:Ruby, C#など
• このうち現状Pythonインターフェースだけが、スクリプ
ト言語からOpenCVを使用可能な公式サポート言語
1.1 OpenCVについて
9
便利なOpenCVのPythonインターフェース
1.1 OpenCVについて
OpenCV/C++と全く同じ引数で用意された関数群をPythonで叩ける
C++
Python
関数同じのままPythonでOpenCVで使えるので、
既にC++でOpenCVを使ってきた方には移行が簡単
10
cv2.imshow( test ,img)
imshow( test ,img);
cascade = cv2.CascadeClassifier(“haarcascade_frontalface_alt.xml”)Python
C++
CascadeClassifier face_cascade;
face_cascade.load(“haarcascade_frontalface_alt.xml”);
C++
Python
HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
クラスでもほぼ同じ使用感
※2.後編にて、実際の使い方を改めて紹介
OpenCVの存在する価値
• 業界の人なら共通に知ってる/使えるものとして(万国共通語)
• 画像系の初心者:OpenCVで基礎教育が簡単に。
• 中級者:アルゴリズムは自力実装できるレベル人でも、基本ツー
ルとしての存在が生産性を向上(画像の基本操作やcv::Matなど)
• オープンソース:コードさえ読めば標準的なアルゴリズムが学べる
• 専門外の人:仕組みは詳しく知らず、自分で実装まではできない
人も各アルゴリズムをツール/APIとして使える(例:スマホアプリ
開発や、インタラクション系など)
11
1.1 OpenCVについて
• 英語圏のWebではCUDA/OpenCL周りは結構バグが多いと
の報告あり( 3.0以降は改善していく?)
• 「OpenCV最先端のアルゴリズムまで搭載されている」よう
に感じてしまうが、そんなことはない!(各問題設定やや新
しいものや最初の提案が最低1つ入っているのみ。
OpenCV3.0で改善)
• 画像認識に弱い:画像特徴 も機械学習アルゴリズムも共に
最小限のものしか登録されていない(MLモジュールも最低
限の道具しか搭載されていない)
OpenCVも万能神ではない
1.1 OpenCVについて
12
Point Cloud Library(PCL)
• ロボットビジョンを目的としたC++言語による点群処理ライブラリ
• Kinectと同じ頃に登場:リアルタイムに動画で点群が取得できる => 点群を簡単に処
理できる(OpenCV的な)ライブラリが3Dビジョンにも欲しい
• 最新版はver. 1.7.2(2015年4月現在)
1.2 PCLについて
13
PCLとロボット
• ロボットは3D環境を把握することで働ける => ビジョン技術がとても大事
• 物の場所や種類を認識 => 特定の物体だけ把持する。欠陥検査。テーブル上の物体認識
• 人の位置や様子(行動)を認識 => 人とのインタラクション、行動認識、ジェスチャー認識
• 環境の3D地図や変化を認識 => 自動車の前方監視。自律移動ロボットの自己位置把握,
SLAM。広範囲レーザー測量(LIDARなど)による巨大地形マップの獲得(位置合わせ)や解析
1.2 PCLについて
14
15
1.2 PCLについて
標準的な点群処理が
PCLには全て収録
※ これらはPCL1.5
くらいまでの主要構成
標準的な点群処理が
PCLには全て収録
• 基礎 標準レベルのビジョン系処理がPCLには収録されている
• IO周りや可視化を簡単に済ませられるものが充実
(OpenNIGrabberやPCLVisualizerなど)
1.2 PCLについて
• 理由(私の憶測):ロボット
業界の人たちはコンピュー
タビジョン的なところで苦
労したくない??
点群処理はとにかく
PCLに集約させよう!!
(=ロボット屋はビジョン部分は
PCLで済むようにしよう!)
16
構成モジュール(PCL 1.7):
新規モジュールが多数追加中。既存モジュールも
機能増加中(Segmentationなど)
17
1.2 PCLについて
pcl::PointCloud<PointT> 型
18
基本的な宣言方法:
pcl::PointCloud<PointT>::Ptr cloud( new PointCloud<PointT>() );
Point Cloudに含まれる点の形式を表すPointTの例:
pcl::PointXYZ - float x, y z
pcl::PointXYZI - float x, y z + 輝度
pcl::PointXYZRGBA - float x, y z + RGBA
pcl::PointNormal - float x, y z +normal[3] + curvature
pcl::Histogram - float histogram[N] 
例):各点がPointXYZRGBAのPoint Cloud型オブジェクトの作成
PointCloud<pcl::PointXYZRGBA>::Ptr data(new PointCloud<pcl::PointXYZRGBA>());
「色付きの3D点群、法線」などのデータを格納する
PCLで一番よく使うオブジェクト: std:vectorライクなデータ構造
1.2 PCLについて
例: Filtersモジュール
• 点群向けのノイズや外れ値除去、平滑化などのフィルタリングを提供
• 主なアルゴリズム:
• 特定の領域だけ抽出(PathThrough)
• 平滑化(Bilateral Filter)
• ダウンサンプリング(VoxelGrid filter)
• 外れ値除去(StatisticalOutlierRemoval)
19
1.2 PCLについて
例:PassThrough Filter
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud
(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered
(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setFilterFieldName ("z");
pass.setFilterLimits (0.0, 1.0);
pass.filter (*cloud_filtered);
指定した1次元方向(ここではz)の範囲
(setFilterLimits)の点群のみを残す
20
1.2 PCLについて
Unorganized Point Cloud
(RGBDセンサーで撮影)
一見すると不均一だが。。
21
1.2 PCLについて
Unorganized Point Cloud
(RGBDセンサーで撮影)
距離画像上においては
各点は整列されている!
(各画素ごとに
対応する3D点が存在する)
22
画像平面
1.2 PCLについて
Organized Point Cloud in PCL
23
•点群中の各3D点を、距離画
像へ投影した座標(x,y)の順番
で保持.
•画像処理likeな、2次元画像構
造を利用した高速な近傍処理
(画像処理で言う「連結成分
処理」)が可能に
PCLでは:
1.PointCloud<PointT>に画素の順に並べて点を挿入する(普段は height=1で boost
のvectorとして点群を扱っている)
2.挿入済みのOrganizedPointCloudをOrganized対応の関数やクラスに渡すことで高
速処理(法線計算や平面検出など)
width
height
1.2 PCLについて
People モジュール:
RGB-D人物検出
24
http://www.pointclouds.org/documentation/tutorials/
ground_based_rgbd_people_detection.php#ground-based-rgbd-people-detection
画像:IAS2014
PCLチュートリアルより
• 処理手順;
• 床平面初期化、Euclidian Clustering
• そのサブクラスタ群を:
• 人のサイズまで分割と統合
• 身長やサイズの拘束でノイズを削除
• 人候補領域のみで画像からHOG +SVM検出
1.2 PCLについて
Recognitionモジュール
テンプレート点群とテスト点群との間で、キーポイント特徴記述子を
対応付けすることで特定物体認識
1.2 PCLについて
pcl::HypothesisVerification
複数物体同時認識時の
妥当性確認
pcl::GeometricConsistencyGrouping
pcl::Hough3DGrouping
25
これらは「登録済みの物体点群モデル
とのマッチング」である点に注意
(物体カテゴリー認識ではない)
Segmentationモジュール
の最近の新機能
※上記3つとも、公式サイトにチュートリアルあり
pcl::RegionGrowing
pcl::SupervoxelClustering
26
pcl::MinCutSegmentation
1.2 PCLについて
(普段2D画像で問題を解いていても)
PCLで点群処理を少しでも触っておくメリット
• 画像での3D幾何のイメージがつきやすくなる(私も点群処理を通してカメラ
幾何や剛体変換などに強くなりました)
• セグメンテーションや人認識、物体認識は3Dの方が楽 :この感覚をつかん
でおけば、画像でそれらを行う時のハードルが下がる(引き出しも増える)。
• 3Dで関連する、グラフィックス、ロボット、インタラクションなどの周辺分
野の知識が入りやすくなる
• ICPによる位置合わせ、法線特徴量などにより「形状特徴の応用」に親しむ
ことができる:画像のエッジ特徴やセグメンテーションの理解度アップ。
27
1.2 PCLについて
Python科学技術計算環境
• IPython と Jupyter(旧称 「IPython notebook」)
• Spyder IDE , Python Tools fo Visual Studio
• Numpy,Scipy, Matplotlib(基本三種の神器)
• Scikit-learn, Scikit-image
• Pandas, PyTables (Big Data, データ解析)
• Numba, PyCuDA
1.3 Python科学技術計算環境
28
著者がPythonを薦める理由
• 個人的な体験:かつてC++メインだったのがPythonに移行して以降、コーディ
ングに関してストレスを感じずに研究できている(=Pythonは簡潔なので楽)
• OpenCVをPythonから用いて、scikit-learn等と共に用いれば、画像認識、機械
学習で有利(ツールも豊富なので楽で快適)
• また、インタラクティブな作業ができるので、プロトタイピングやアイデア練り
出しに有利(2.後編で詳しく説明)
• 大学や会社で画像処理や画像認識を初めて学ぶ時に、Pythonは楽!(初心者の
教育や最初の一歩に有利)
1.3 Python科学技術計算環境
29
「Scipy lecture notes -1.科学技術計算のためにPythonを始めよう」もチェック
(※筆者はIPythonリード開発者のFernando Perez)
IPython
IPython本体:通常のPython対話実行環境を強化して、
科学技術計算向けにインタラクティブに作業しやすくしたもの
おもなサブ機能:
• IPython Notebook (Jupyter): ノートとして作業かつ記録
• IPython Parallel:手軽に並列、分散計算を行うための仕組み
30
1.3 Python科学技術計算環境
http://ipython.org/
Jupyter
(旧IPython Notebook)
• サーバークライアント形式のノートブック型Python実行環境
• Pythonだけでなく、各スクリプト言語(Julia,R,Rubyなど)でも
Notebook作成/実行が可能 (「試行錯誤」作業に適した環境)
• Github上でノートブックの共有閲覧が盛ん:CS系のチュートリアルの
代表的提供手段になりつつある (例:Caffeのチュートリアルも.ipynb)
31
1.3 Python科学技術計算環境
IPython コンソール/ Notebookへの
Matplotlibのinline統合
matplotlibの図表を、別窓表示ではなく
コンソール内やノートブック内で表示可能
通常は別ウィンドウに
matplotlibの
figureは表示される ノートブックやコンソール内でも表示可能
32
1.3 Python科学技術計算環境
NBViewer :Githubと統合された
IPythonノートブックのWeb共有
著者のgithubレポジトリを
nbViewerからexploreしている様子
33
1.3 Python科学技術計算環境
Githubに.ipynbファイルをアップロードしておくと、自動的にこのサイトで閲覧可能に
(ただし、Python自体はサイト上では実行できずStaticなノートに変換される)
http://nbviewer.ipython.org/
Spyder IDE
• Matlab的な科学計算向けIDE (IPythonと統合済み)
• AnacondaやPython(x,y)の推奨IDE
• Matlabのように、変数もデバッグ/実行中にその場でGUIで確認できる(ただし
オブジェクトの中までは見れない)
34
1.3 Python科学技術計算環境
PTVS(Python Tools for Visual Studio)
• Microsoft Visual Studioに統合されたPythonの開発環境
• Visual Studioの強力な開発環境そのままでPythonの開発が可能 (例:Intellisenseなど)
https://pytools.codeplex.com/
35
1.3 Python科学技術計算環境
scikit-learn
• データマイニング、データ解析向けのシンプルさと効率的な機械学習ラ
イブラリ(BSDライセンスで商用可能)。もちろん画像認識にも使用可能
• Numpy,Scipy,Matplotlibを基盤とした使用およびソースコード
36
1.3 Python科学技術計算環境
scikit-image
• 画像処理ライブラリ(※ 規模小さめのライブラリなので画像処理初心者におすすめ)
• 古典的な画像処理 + HOG, 局所特徴量やsuperpixelなど古典的画像特徴量から構成
• Pythonでは、OpenCVに足りないものを補間する使い方にもGood
37
1.3 Python科学技術計算環境
重要:これらのPythonライブ
ラリは全てオープンソース
• scikit-learnやscikit-imageで画像処理や機械学習の基本ア
ルゴリズムを全て読める(良い時代??)
• Matlabのツールボックスはどれもフルスタックで便利だが、
中のコードまでは読むことができない。
• 同じアルゴリズムをC/C++のライブラリで読んでも良いの
ですが。。:PythonやMatlabの方が、簡潔で行列-likeな
表現なので可読性が良い(=短い時間で理解もしやすい)。
38
1.3 Python科学技術計算環境
 前編まとめ
• OpenCV, PCLについて、最新状況の紹介とこれらを
用いる事のメリットを改めて整理
• 画像系の皆様だけではなく科学計算行う型全般に役
に立つ、Python科学計算環境の基本について
39
ここまではソフトウェアやツールの列挙でしか
なかったので(なぜPython?もまだ不明)、
後編では実際の研究開発での使いこなしや
言語やツールを選択する判断基準の話へ
後編:プログラミング言語
と研究開発環境
40
2. 後編:目次
• 2.1 プログラミング言語の選択と比較
• C/C++? それとも Python/Matlab?
• プロトタイピングの重要性
• 高速化、並列化
• 数学的記述、関数型プログラミング
• 2.2 Pythonを実際に研究に使ってみる
• PythonでOpenCVと一緒に機械学習ツールを使う(例;scikit-learn)
• Python + Matlplotlibで効率的な実験評価
• 2.3 開発テクニック(を研究に):IDE, テスト、バージョン管理
• テスト、リファクタリング、ドキュメント共有、などのエッセンスを研究に持ち込む
41
画像センシングによく
用いられるプログラミング言語
• コンパイルを行う言語(静的型付け):C/C++, Java, C# etc..
• スクリプト言語(動的型付け):Matlab, Python etc..
2.1 プログラミング言語の選択と比較
「型付け」以外の選定基準:
• 画像系、機械学習系のライブラリの豊富さ
• 計算速度の必要性 ( 最速確保にはやはりcやFortran)
• その環境ではその言語しか使えない(例:組み込みだからc言語。
iOSだからObjective-C、など)
• その言語が昔から得意なので(果たしてそれで良いのか??)
42
C/C++ v.s. Python/Matlab
2.1 プログラミング言語の選択と比較
C/C++(Java,C#など)
• 計算速度が速い
• 型定義が厳格
• 古くからのC/C++の資産が全て使
える
• 設計終了後の本番用チューニング
に向く
• 行列/数式的記述がしづらい(※)
• cv::Matの関数や配列forアクセス
よる画像操作
Python/Matlab
• 計算速度が(やや)遅い
• 型定義が緩い(引数などで)
• 近年の画像認識/機械学習の資産
が多い
• インタラクティブな実験的/探
索的作業に向く
• 行列/数式的記述がしやすい
• numpyでの行列操作-likeな画像
の代入/スライス操作
43
※概要の把握し易さから2項対立的に比較しているが、反対側の特徴も併せ持っているものも多い点には注意
※関数プログラミング等が導入されてきたことで、最近はそうでもない。また、行列や線形代数演算についても、C++
ではEigenライブラリなら簡潔に書ける。
画像操作:C++ v.s. Python
• OpenCV/C++でグレー画像grayのROIを取得
cv::Rect roi(10, 20, 100, 50);
cv::Mat gray_roi = gray(roi);
• OpenCV/python,numpyでグレー画像grayのROIを取得
roi = gray[10:(10+100), 20:(20+50)]
• OpenCV/python,numpyでカラー画像colorImgのROIのチャンネル0のみを取得
roi_0 = colorImg[10:(10+100), 20:(20+50),0]
注意:行数が同等な時でも、Pythonでは1行ずつ
すぐに実行して試せることが重要
2.1 プログラミング言語の選択と比較
44
C++
Python
「スクリプト言語によるプロトタイピング」
の科学技術計算での重要性
• C/C++は古来から画像系でよく用いられてきたが:
• 「何度もコードを書き換える」と毎回再コンパイルの時間が失われる
• 「画像/行列」の操作は、数式と同じ形でコーディングしづらい
本日の主提案「プロトタイピングフェーズの導入」:
(1)PythonやMatlab等の動的スクリプト言語でプロトタイピング
を行い、アルゴリズムの設計を固めたのちに、
(2)C/C++等で安定した最終版を設計に基づき実装する
プロトタイピング/設計済みのアルゴリズムなら、その後は設計済みなので
(最小の時間で)C/C++でコーディング => 研究時間ロスの削減!
2.1 プログラミング言語の選択と比較
45
• デモ:IPython上で、インタラクティブにOpenCV
を実行(画像を読み込み、人検出を行い結果を表示)
46
2.1 プログラミング言語の選択と比較
インタラクィブなプロトタイピング作業により
「アイデア」を練り出す
• C++やJavaで実装 => 少しずつ変更してすぐ試す事はしづらい (※JavaやC#などはコ
ンパイル時間短いが、対話的実行環境ではない)
• PythonやMatlabなどを用いてプロトタイピング:
• 少し思いついただけでもすぐ試せる! 
• 「やってみないとわからない」「目標がまだ定められていない」という時に有利
• やってみてダメなら何度でも作り直せばOK!
• 動的片付け言語では行列や関数型プログラミングと仲良くなりやすい(数式に近い形
でそのまま記述できる言語が多い)
2.1 プログラミング言語の選択と比較
※最初から完成系が描けて、コードにもすぐ書ける型の場合、
プロトタイピングによるアイデア出し作業の必要性は少ない
47
設計も重要
• プロトタイピング作業だけに偏ると、方向性も完成系のイメージも無し
の「手を動かしてるだけ!」になりがち (他人の論文も読まないし、設計
も用意していないままの適当作業)。
• 設計もしましょう:
• 数式やアルゴリズムの式を書く
• 開発者的に「UML」で設計する
• グループで案を議論する など
2.1 プログラミング言語の選択と比較
「設計」と「プロトタイピング」のバランスは、
あなたの脳がどちらがより得意か次第とも言える
(アイデアはどちらが思いつきやすい??練りやすい?)
48
プロトタイピング環境
49
帰納的作業が得意な方は
こちらの割合を増やす
動的型付け言語:Matlab, Python, Ruby etc.. 静的型付け言語で:C/C++, Java, C# etc..
「アイデア出し」、
「うまく行くかを試す」
を優先
「設計済み」、
「正しく動く」
を優先
演繹的作業が得意な方は
こちらの割合を増やす
本番環境
色々試しながら考えたい
(勉強中、修行中、新しい問題に
チャレンジ中の)方はこちらが有利
既に熟練している場合や
設計が固まっている場合
はこちらが有利
2.1 プログラミング言語の選択と比較
※作業フロー例
※どちらかのみの使用や、逆の順でも
自分の目的に合致したフローであれば当然OK
アルゴリズムが複雑で新規なほど(図中右上方向)
簡潔な記述とプロトタイピングが効いてくる
アルゴリズムが
複雑で長い
アルゴリズムが
単純で短い
既存のアルゴリズム
新規設計/研究のアルゴリズム
プロトタイピングほぼ必要なし
(OpenCVやscikit-learnのクラス
をつなげるだけの程度)
一気に書いてうまく動くかどうかは怪しい。。
(長いアルゴリズムは論文読んだだけでは
理解も難しい)
コードにはすぐ書けるが、
まずは実験的に試していく
2.1 プログラミング言語の選択と比較
未開の地!ジャングル!
(プロトタイピングがあなたを助ける!)
設計済みなものほど、静的型付け言語で
• 静的型付け言語(C,C++,Java,C#など)のメリット:
• 型をコンパイル前に限定できる(※キャストなどにより型変化できるので型不
変ではないことには注意)
• 速度最適化をとことんまで突き詰められる(C++の闇)
• テンプレート、ジェネリックコード、メタプログラミングの恩恵を受けられ
る(C++の闇)
2.1 プログラミング言語の選択と比較
51
アルゴリズムが既に確定している場合C/C++などの静的型付けプログラムで厳格に
コーディング!(本番環境向けに洗練されたバグのないものを作る)
※もちろん慣れていればC++/Java/C#などでプロトタイピングするのでもOK
ただし、複雑な科学計算アルゴリズムは動的言語+対話環境のほうがおすすめ
コンパイル時の型推論
最近は、静的片付け言語(C#, C++11, Java8 など)でも、
var 変数名 = new クラス名()
とコンパイル時に型推論する仕組みもある (varが何型かの決定をコンパイラにおまかせできる)
52
型推論に頼ると
静的型付け言語の「静的な記述による厳格さ」は減る
v.s.
動的型付け言語的な「簡潔に書けてすぐに試せる」は増える
2.1 プログラミング言語の選択と比較
def function1(input):
result = input + 1.0 #この行の実行で、inputが数値型でないとエラー)
※動的型付け言語では、(基本的に)引数の型は実行時に動的にしかチェックできない
※この機能のメリット:コードの冗長性を避ける(varにすれば同じクラス名の表記を
繰りかえさずに、短い記述のvarだけで済み、スッキリする)
Pythonでの例
スクリプト言語での高速化
• Matlabでの仕組み:MEX
• C/Fortranで書いた関数をコンパイル済みにしておき、Matlabから呼び出せる(その部分
だけ高速実行できる)
• Matlabの場合、C言語でAPIが提供されている外部機器との通信手段ともなる(RS-232Cや
Ethernetなど)
• Python:
• MEXのPython版のようなものがいくつかある(Cython, scipy.weaveなど)
• NumbaやNumexprで配列操作も結構簡単に高速化できる
• IPython ClusterやpyCUDAなど、(大規模)並列計算もPythonでは楽に使いやすい
2.1 プログラミング言語の選択と比較
Matlab/Pythonには、部分的にコンパイル済みにしたり、Pythonからお手軽に高
速化/並列化を行う仕組みが提供されている(C++並みの速度も案外簡単に出せる)
53
C系言語:SIMDプログラミングや
OpenMPで並列化
• 昨年のSSII2014での福嶋先生のチュートリアル「マ
ルチコアを用いた画像処理」を参照
2.1 プログラミング言語の選択と比較
54
関数型プログラミング
• 関数内で再代入不可(Immutable)を推奨するプログラミングスタイル。
• 命令型プログラミングのように計算機への命令やデータ構造の抽象化優先でなく、数学
的な「純粋関数」による記述を優先(直感的に記述できる)
• 関数も引数として使えるので(第1級関数)、汎関数(関数の関数)を扱える (例:
scipy.opimizeの多項式フィッティングなどでは、当てはめ対象の関数を引数に与える)
• 高階関数(map(), reduce(), filter()など関数を引数として取る関数)を駆使した関数操作
• 遅延評価や、Pythonジェネレータなどにより「簡潔な記述 かつ 繰り返し計算が高速」
を実現しやすい。(再帰関数などで、計算中のメモリの温存=高速化につながる)
• 直感的(数式的に)にかつ簡潔にかけるので、対話実行時に有利
55
2.1 プログラミング言語の選択と比較
※「コンピュータビジョン」や「数値計算」に特化したメリットについて、
著者がまだ整理できなかったので、ビジョン周辺に特化した話は割愛
どういった時に関数型プログラミングを優先すべき?
• 世の流れ:統計、機械学習周辺では、過去のLisp -> Mathematica等の流
れから、近年はR, Juliaなどの関数プログラミング寄りの対話的科学計算
環境へ(もちろんPythonやMatlabで関数型プログラミングしてもよい)
56
ただし、関数型プログラミング初心者には手続き型、命令型の方が楽
for やif 無しで、再代入無しというルールは(簡潔で安全になるとはいえ)初心者にはわ
かりづらい、書きづらい。慣れるまではC++/Java的に書くほうがベター
2.1 プログラミング言語の選択と比較
関数型言語/プログラミングだとC/C++までの速度最適化はしづらい
実行速度がやや落ちようとも、記述の綺麗さや見やすさを優先したいなら、関数型プ
ログラミング重視でOK(論文中での抽象的な記述との一致を図れるのもGOOD)
ソフトウェアが中規模以上になってくると「関数だけ」の構成は少し見辛い
クラスも使った方が大きなプログラムだと整理しやすい ? でもアルゴリズムは関数プロ
グラミング的に作ると良い?※私もまだ正しい解が提供できず、今後議論したい点
RとPython
for データサイエンス
フリー、オープンソースで統計や機械学習の共有が:
1. まずはR言語で進む:研究者のプロトタイピング向け
2. その後、実際のデプロイ環境でも解析ルーチンを動かしたいので、
Pythonにscikit-learn(これがゲームチェンジャー)などが登場
3. ビジネスでも使用者が多くなり、Webやカンファレンスなどでの情
報共有が活発に ( = 統計、機械学習の初歩が学びやすくなっている)
日本では:
日本語のRの教科書が充実したこともあり、Rユーザーは多いが、
Pythonによるデータサイエンスの人材はまだ少なめ
欧米では:
scipyやPyDataなどのカンファレンスが毎年開かれ、既にWebやデー
タサイエンスの世界でPythonが使われている
57
2.2 Pythonを実際に研究に使ってみる
Pythonの機械学習系ツールと
OpenCVを同時に使う
※「C++/OpenCVのMLモジュールに収録されているものしか
機械学習を使いこなせない」とはなっていませんか??
58
2.2 Pythonを実際に研究に使ってみる
OpenCV
Pythonインターフェース
scikit-learn
caffe
+numpy/scipy
基本的な画像処理や
特徴量計算を担当
特徴量計算や認識モデル
と評価(sciki-learn)
を担当
他
pystruct
例:scikit-learnで人検出器を学習
from sklearn import svm
lin_clf = svm.LinearSVC()
lin_clf.fit(X, y) # Xはn個のHOG特徴ベクトルで、yはn個の出力ラベル(1 or -1)
手順2. 計算した特徴ベクトルと正解ラベルでSVMを学習
※ コードはDERiVEメルマガの
「scikit-learnとscikit-imageで学ぶ人検出」より抜粋
手順1.学習画像ごとにHOG特徴ベクトルを計算し、リストXに格納
2.2 Pythonを実際に研究に使ってみる
#OpenCVのHOGDescriptorクラスで計算する場合
hogvec = hog.compute(imgWin)
X.append(hogvec)
#(こちらでも可能)scikit-imageのhog関数で計算する場合。ただしOpenCVとはHOGベクトルの算出方法
が異なる。
hogvec = hog(pos_roi, orientations=9, pixels_per_cell=(8,8),cells_per_block=(2,2), visualise=False)
X.append(hogvec)
PythonからOpenCVを使うメリット
• Pythonなのでインラタクティブに作業できる
• cv::Matの代わりに画像をNumpyのArray(2/3次元配列)として使
用するので行列操作が(C++,Eigenライブラリなど)より楽に書ける
• Numpy経由で繋がる多くのPython科学計算ライブラリと連携可
• Matlab/Mathematicaライクな環境が全て無料で手に入る
• PythonをC言語のように入門言語として使うと、画像処理の初歩を
短時間で身につけやすい
60
2.2 Pythonを実際に研究に使ってみる
OpenCV/Numpyだと
画像の操作が数式的かつ簡潔
スライスによる指定ROI領域への値の代入
これらの操作はNumpyのndarray(2or3次元配列)への操作なので
scipyのimageモジュールやscikit-imageでも書き方が共通!
(※OpenCVだけ画像のデータ型が少し違うので同時に使う場合は注意)
チャンネルnの画素値(i,j)へのアクセス
# グレー画像grayの(10,20)が左上で100*50の矩形に画素値0を代入
gray[10:(10+100), 20:(20+50)] =0
# カラー画像colorImgの(i, j) のチャンネル0の値を表示
print str(colorImg[i,j,0])
61
2.2 Pythonを実際に研究に使ってみる
※C++では2重forループに
なるのが1行で記述が済む!
# グレー画像grayのインデックスmaskの画素(前景など)のみへ0を代入
gray[mask] =0
Matplotlib
Matplotlib:Matlabやgnuplotのような図を、似たような関数
インターフェースを用いて作成できるPythonのplotライブラリ
62
2.2 Pythonを実際に研究に使ってみる
Python+Matplotlibで
実験評価+可視化
メインのコードはC++などの場合も、実験結果を一旦保存して
PythonとNumpyで精度評価計算+結果のグラフ化を実行
「開発はC++で引き続きやる!Pythonには移行しない!」という方
や「Excel (+VBAやExcelの関数)で実験結果はまとめています」と
いう方にもオススメ
OpenCV/C++
で実験を実施
Numpy,Pandasで
評価値を計算
実験結果のデータ
(CSVファイル)
Matplotlibで
結果や評価値を
グラフ化
これらがPythonに
移ることで、
サクサク試せて
やり直しも楽になる
63
2.2 Pythonを実際に研究に使ってみる
例(機械学習):識別器のROC曲線を
scikit-learn + Matplotlibで計算/可視化
http://scikit-learn.org/stable/auto_examples/model_selection/
plot_roc.html#example-model-selection-plot-roc-py
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
roc_auc = auc(fpr, tpr)
64
ROC曲線とAUCの計算
matplotlibで結果をプロット
pl.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
2.2 Pythonを実際に研究に使ってみる
チーム開発時には、リッチなIDEの恩恵を
受けながらコーディングしましょう
Emacs/Vimなどのコーディングエディタ(+コマンドラ
イン)だけで開発する悪しき習慣はやめましょう!
画像系など専門性の高い(複雑で規模の大きなソフトウェ
ア)のプログラミングにはIDEの助けが不可欠です
(一般的な開発では「チーム開発」で特に活きるのがIDE)
65
IDEの便利な機能を使わずに、勝つ自信がありますか?
「例:タブ補完、IDE上でのデバッグ、変数の状態確認
クラス構成全体の把握、バージョン管理とのエディタ連携」
2.3 開発テクニックを研究に生かす
テスト
製品出荷前に行うテスト:
機能テスト
性能テスト
目的:テスト時に発生した不具合の修正を行うことで、設計した通りの
安定したソフトウェアシステムを世の中にリリースする
66
2.3 開発テクニックを研究に生かす
• 研究寄りのコードは、機能テストが「実験」の執筆である程度済む
• しかし「テスト」を行わない限りはコードの正しさは保証されない
• 研究段階では製品をリリースするわけではないので、たとえば「重要な関数
だけ単体テストする」などがちょうど良さそう?(※研究レベルの複雑で長
い処理に対して、細かいテストを全て実施するのは負荷があまりにも高い)
開発中に(こまめに)行うテスト
単体テスト
テスト駆動開発(TDD)
先にテストコードを書き、そのテストを通過するように、
設計してコードを書いていく手法
メリット:
• テストが文章より正確な仕様になる(文書による曖昧な仕様定
義を回避)
• 目標地点を提供する(※単体テストが全て通ればその関数は完
成、など)
• 毎回テストを行う保証ができるので、ソフトウェアの安定性
につながる
• c系の組み込み開発などにも威力を発揮。(言語やアルゴリズ
ムが複雑なほど、テスト駆動が活きる)
67
2.3 開発テクニックを研究に生かす
(デザイン)パターン/リファクタリング
整理された簡潔なコードにこまめに保守することは、
規模が大きいシステム/長期的に使うシステム/チーム
で開発・共有するシステムほど重要 (※一点物の小さ
いシステムではあまり気にしないでもOK)
研究活動の中での例:実験を終えて、論文を提出した
=> 3ヶ月後査読が返ってきて、コードを修正して追加実験を行うことに
A. 汚く長いコードの場合:読みづらくてコードの修正に時間がかかり、
締め切りギリギリまで苦戦。
B. 綺麗で簡潔なコードの場合:速やかにコードを追加して短時間で
終了。
同時に、コメントや文書にコーディングした内容の説明を
こまめにメモしておくことも大切
68
2.3 開発テクニックを研究に生かす
「アジャイル」開発手法から
エッセンスを学ぶ
「昨今のITシステム速い変化」に対応するために、
短期間にシステムを開発/変更するための開発戦略。
(XP, スクラム,リーン開発,かんばん)
69
※アジャイルは自己流での中途半端な導入は返って
混乱や非効率を及ぼす側面もあり、
本格導入にはきちんとした勉強が必要なことに注意
2.3 開発テクニックを研究に生かす
変化の激しいシステムを組んでいる人や
短期間でたくさん修正を加える場合は参考になる発想
研究寄りのプロジェクトでは
バージョン管理まで行うべき?
• Githubが流行しているので、研究専業の方々でもGit等で研究の
コードをバージョン管理している方も多いかもしれませんが。。
• MatlabやPythonでのコードをへたにGitなどで管理するとオーバー
ヘッドが大きい!(REPLの恩恵が減ってしまう!)
• もちろん多人数開発(これが本来のバージョン管理の目的)では
バージョン管理しても良いかもしれませんが、プロトタインピング
中や、REPLで試し試し行う段階では、バージョン管理はアイデア
捻出の妨げになっている可能性もあることに注意
※一方で、テストする段階ではバージョン管理しておいた
方がベスト:テストとコードの対応も管理できるので
70
2.3 開発テクニックを研究に生かす
ドキュメント、コード
をチームで共有する
• ドキュメント化は大事 (開発の現場でとてもよく言われること) :アウトプットす
ることで本人の理解度アップ + その文書を元にチームで議論できる
• 問題点をいち早く見つけて対処しやすい
• ドキュメント化すると「そのチームの資産」となる(時間が経ってもどういった設
計のソフトウァなのかが読み解ける)
• 共有する文書:プログラムのコード、論文(Mendeley等)、定例報告文書、IPython
ノートブックなど
• 開発者がよく行うコードの共有、議論方法
• コードレビュー、ペアプログラミングなど
71
2.3 開発テクニックを研究に生かす
開発者になりすぎないように!
• 会場にいる皆様の多くは「研究者」なので、あくまで勝負するのは高い
専門性と新規性です。開発手法は必要なところだけ賢く取り入れましょう
• 定期的に自分に問いかけてみる言葉:
• 「ソースコード管理なんて本当に必要??」
• 「テストをきちんと実施する必要ある??」
• 「皆Python等で研究しているようだけど、自分の問題の特性を考える
と、C/C++で厳格なコードにしたほうがよいのでは?」
• 貴方の研究と開発のバランス次第で、実際の仕事に取り入れるべきエッセ
ンスが変わります
72
2.3 開発テクニックを研究に生かす
本日のtake home message
• 前編
• コンピュータサイエンスではライブラリを使いこなして、(時には自分で使わずとも、
中身を参考にして)更に高みを狙うことが重要。Python系まったく未知だったかは試
してみてください。
• 後編
• プロトタイピング重要。「アイデアを生み出すためにはどうするか」を大切に
• 目的ごとにプログラミング言語を使い分ける
• 研究活動をしているとしてもチーム開発手法の各エッセンスは生かせる
• 最終的にはあなたの編み出すアルゴリズムや研究を大事にしましょう
• ツールに凝ることで効率性やグループ共有度が増せばその分、時間を有意義に確保する
ことができ、たくさん論文も読むことができ、人と人のつながりや連携も増やせます
73
Reference
• Maribel Fernández , “Programming Languages and Operational Semantics - A Concise Overview”, Springer (2014).
• Cyrille Rossant, “IPython Interactive Computing and Visualization Cookbook”, Packet Publishing (2014)
• Steven Lott, “Functional Python Programming ”, Packet Publishing (2014)
• Jennifer Campbell , Paul Gries , Jason Montojo , Greg Wilson, 長尾高弘(訳) , “初めてのコンピュータサイエン
ス” , オライリー・ジャパン (2010)
• Python for MATLAB Users: Promoting Open Source Computer Vision Research , CVPR 2012 tutorial:
http://www.kitware.com/cvpr2012.html
• 山本和彦 Gihyo.jp「[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!」: http://
gihyo.jp/dev/feature/01/functional-prog/0001
• PythonでCUDAに入門する http://d.hatena.ne.jp/norio515/20111112/1321105385
• James Shore, Shane Warden , 木下 史彦 (監訳), 平鍋 健児(監訳),笹井崇司 (訳) , “アート・オブ・アジャ
イル デベロップメント ―組織を成功に導くエクストリームプログラミング” , オライリー・ジャパン
(2010)
74

More Related Content

What's hot

[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View SynthesisKento Doi
 
20160724_cv_sfm_revisited
20160724_cv_sfm_revisited20160724_cv_sfm_revisited
20160724_cv_sfm_revisitedKyohei Unno
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介miyanegi
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料Fujimoto Keisuke
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用Yoshitaka Ushiku
 
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentationTakuya Minagawa
 
SfM Learner系単眼深度推定手法について
SfM Learner系単眼深度推定手法についてSfM Learner系単眼深度推定手法について
SfM Learner系単眼深度推定手法についてRyutaro Yamauchi
 
20190307 visualslam summary
20190307 visualslam summary20190307 visualslam summary
20190307 visualslam summaryTakuya Minagawa
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリングNorishige Fukushima
 
論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)Masaya Kaneko
 
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージmcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージAtsushi Watanabe
 
Cvpr 2021 manydepth
Cvpr 2021 manydepthCvpr 2021 manydepth
Cvpr 2021 manydepthKenta Tanaka
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習cvpaper. challenge
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence ModelingDeep Learning JP
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解Koji Terada
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...Deep Learning JP
 

What's hot (20)

[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[解説スライド] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
 
20160724_cv_sfm_revisited
20160724_cv_sfm_revisited20160724_cv_sfm_revisited
20160724_cv_sfm_revisited
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
ドメイン適応の原理と応用
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
 
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
 
SfM Learner系単眼深度推定手法について
SfM Learner系単眼深度推定手法についてSfM Learner系単眼深度推定手法について
SfM Learner系単眼深度推定手法について
 
20190307 visualslam summary
20190307 visualslam summary20190307 visualslam summary
20190307 visualslam summary
 
Visual slam
Visual slamVisual slam
Visual slam
 
SLAM勉強会(PTAM)
SLAM勉強会(PTAM)SLAM勉強会(PTAM)
SLAM勉強会(PTAM)
 
3次元計測とフィルタリング
3次元計測とフィルタリング3次元計測とフィルタリング
3次元計測とフィルタリング
 
論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)
 
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージmcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
mcl_3dl: amcl並に軽量な3-D/6-DoFローカリゼーションパッケージ
 
Cvpr 2021 manydepth
Cvpr 2021 manydepthCvpr 2021 manydepth
Cvpr 2021 manydepth
 
【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習【メタサーベイ】数式ドリブン教師あり学習
【メタサーベイ】数式ドリブン教師あり学習
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
 

Similar to コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi

Rtミドルウェア講習会 第2部資料
Rtミドルウェア講習会 第2部資料Rtミドルウェア講習会 第2部資料
Rtミドルウェア講習会 第2部資料openrtm
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦openrtm
 
170622 02
170622 02170622 02
170622 02openrtm
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog AnalyticsTetsuya Odashima
 
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニックSony Network Communications Inc.
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみようYou&I
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表Hirotaka Kawata
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Shinya Nakajima
 
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~NVIDIA Japan
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)RCCSRENKEI
 
Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Shinya Nakajima
 
130711 02
130711 02130711 02
130711 02openrtm
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)Ryuuta Tsunashima
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイドEtsuji Nakai
 
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界Shingo Kitayama
 
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようVisual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようShinya Nakajima
 

Similar to コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi (20)

PCL
PCLPCL
PCL
 
Rtミドルウェア講習会 第2部資料
Rtミドルウェア講習会 第2部資料Rtミドルウェア講習会 第2部資料
Rtミドルウェア講習会 第2部資料
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦
 
170622 02
170622 02170622 02
170622 02
 
実践で学んだLog Analytics
実践で学んだLog Analytics実践で学んだLog Analytics
実践で学んだLog Analytics
 
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)
 
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
 
Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)Visual Studio App Centerで始めるCI/CD(iOS)
Visual Studio App Centerで始めるCI/CD(iOS)
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
130711 02
130711 02130711 02
130711 02
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
Video mqtt
Video mqttVideo mqtt
Video mqtt
 
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界
【OpenStackDaysTokyo】4-B1-3 自動化を支えるCICDパイプラインの世界
 
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようVisual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
 

コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi