ようこそゲストさん

Yanal-Lab News

2015/06/10(水) チュートリアル2 Deep-Learningによる画像認識革命 –歴史・最新理論から実践応用まで-

DSCN3302.JPG

発表スライド

概要:Deep Learningの歴史や現在の立ち位置の説明
画像認識での性能や今までの手法(BoVW)との比較しての説明を受けた
CNN内でどのようなことが起こっているかの説明
もうすでにかなり研究が進んでおり、全結合層やプーリング層が必要ないのではという見方も存在している
どんな対象にもうまくいくわけでもなく本当に自分のやりたいことがDeep Learningに適しているのか考える必要がある。
実装を行う際にはどのようなところに気を付けるのか 学習率など
最新の研究ではセグメンテーションやパターン生成などにも用いられている


以下スライド概要
画像認識分野におけるDeep-Learningの歴史
一般物体認識において非常に良い精度を示している
ニューラルネットワークを用いた人工知能の構築技術の総称
脳の働きを模した学習アルゴリズム
深く大規模な構造を備えていることが特徴
ニューラルネットワークは脳神経系を模した数学モデル
人工ニューロンのシナプス結合強度を変化させて問題解決能力を獲得する
2010年ごろまではあまり良い精度は示されていなかった
2012年に大ブレーク!
現在では人間同等の精度
また静止画に限らず動画、画像処理などにも用いられる

畳み込みニューラルネットワーク
脳の視覚野の構造を模倣した多層パーセプトロン
ニューロン間の結合を局所に限定(パラメータ数の大幅な削減)

局所領域の畳み込みとプーリングを繰り返す多層ネットワーク
様々なフィルタをかけ出力を求める
プーリングでは一定領域内の畳み込みフィルタの反応をまとめる
領域内での平行移動普遍性を獲得
層が上がるにつれてクラスの分離性能が上がる

ニューラルネットではすべてを学習で決める
End-toEndでパラメータを最適化
誤差逆伝搬法
非線形変換の(活性化関数)の設計が重要

基本的な構造は今までの画像認識と変わらないが深さなどの違いにより精度が非常に向上している
より一般的な全結合・局所結合ネットワークなどは今一つ

Deep-Learningの数理
ある一定の表現能力を得ようとした場合、深いモデルの方が必要なパラメータが少なくて済むと考えられている
結論は出てない 反論もある

最近ではできるだけ少ないパラメータで深い非線形性を与える
一つのレイヤー内のパラメータを増やすのは効率が悪い

全結合層もいらない?
CNNのパラメータの大半は全結合層に集中
あくまで1層内でのパラメータなので、そこを増やすよりも深さを増やした方がよい
良い結果を示しているネットワークでも全結合層は存在していない
DeepModelの計算コストは“相対的には軽い”
FisherVector:2億6000万
AlexNet:6000万
Network in Network:750万
同じ性能をShallowで出そうとしたらもっと大変な計算!

今まではできるだけ作りこみ表現能力をあげ、パラメータを増やすことが必要だった
Deepではできるだけ余計なことはせず1層は「シンプルにしパラメータを減らす
多層化し、すべてデータに任せる

なんで今できるようになったか
根本的には変わってない
マシンパワーももちろん大きい
昔は
Vanishing gradient:誤差のせいでパラメータが更新されにくかった
過学習のせい

0:マシンパワー
1:活性化関数の発明
2:過学習回避手法
3:その他の最適化のノウハウ

すでに時代遅れになっている技術もある。
全結合層、プーリング層もいらないといわれている
Rectified Linear Units(ReLU)
プラスならばどこでも一定の勾配
すべての入力データが負になるとパラメータが2度と更新されなくなる
負の側にも少し勾配を与えたReLUも考えられている

DropOut
各訓練データのフィードバックの際に一定確率で中間ニューロンを無視
訓練時は全ニューロンを使うが結合重みを半分にする
L2正規化に近い効果を示し以前と比べ大幅な精度向上→ほぼ必須なテクニック!!

実際には学習を実行するのは非常に困難
設定すべきハイパーパラメータが極めて多い


実践するにあたって
どのようにDeep Learningを使うか
教師付大規模データが必要

Fine-tuning
出力層だけを取り換えそこを元に再学習を行う
Pre-trained network
中間層の値を取り出しその値をSVMなどで分類を行う

必ずしもDeep Learningがよい結果を示すわけでもない
Fgcomp2013

教師付データが十分あるのか?
ImageNetに含ませるタスクか?
上記2点を判断して使用するタスクを判別する

ImageNetから離れた領域では圧倒的ではない

ハードウェア
GPU必須 Titan Black
オープンソース
Caffe;画像メイン Torch7:汎用的 Theano:ロジックレベル
学習を始める前に
基本的にはコミュニティで共有されているネットワークを使用する
訓練誤差・予測誤差・過学習・正規化についての理解が重要
よくあるトラブル
訓練誤差が減ってない→学習が破綻→学習率を小さくする
学習率の設定は一番重要
訓練誤差は減っているが、予測誤差が大きい→過学習→正規化を強くする→(dropoutの割合を増やす)、ネットワークを小さくする
訓練誤差と予測誤差がほとんど変わらない→アンダーフィッテング→ネットワークを大きくする

まとめ
一層ごとの基本的な構造は同じ
作りこみからデータ任せへ
構造を深くすることで少ないパラメータで強い非線形変換を表現
とにかく1層はシンプルにし積み重ねるのが近道

実践方法
学習率に気にしながら調整

まだまだ新タスクへの適用は続く
本質的にはCNNの構造に依存している
より汎用的な人工知能に近づくことができるのか・・・?

2015/06/10(水) チュートリアル3 特徴点追跡による動画像からの逐次3次元復元とその応用 –座標系の基礎から応用事例・最新研究動向まで-

DSCN3305.JPG

概要:画像内の特徴点を検出、追跡することによりカメラの位置姿勢や特徴点の座標を求めることができるv-SLAM手法の説明
v-SLAMを用いることでARやDR、自由視点画像生成、ロボットナビゲーションなどに用いられる
先行技術としてSfMという技術があるが得意としている機能が異なりv-SLAMでは特にリアルタイム性が優れている
カメラの位置姿勢推定には決められた点を測定しPnP問題を解くことで実装される(これはOpenCVなどで容易に実装できる)
特徴点追跡にはFAST特徴量など簡単で高速な特徴を用いる
これはカメラの位置姿勢がわかるのでスケール不変性を考える必要がないためである(SIFTなどはいらない)
現在ではマシンパワーの向上により全画素を用いたDirect methodなどが考案されている

以下スライド概要
Simultaneous Localization And Mapping SLAM
もともとはロボット分野の研究用語
ロボットの位置推定及びマップの推定
ロボット分野では各種センサ情報を手掛かりに
CV分野では動画像情報

動画像を解析することで逐次の位置・姿勢とシーンの3次元情報を推定する手法
カメラを用いることで安価に様々な情報を取得することができる

実現ではARやDR、自由視点画像の生成、ロボットナビゲーションなどもできると考えられている

SfMとv-SLAMの関係
SfM:オフライン 高精度 入力情報のすべてを用いることができる
v-SLAM:リアルタイム出力 そこまでの情報のみ

SLAMの実現方法
何らかの方法でカメラ位置の初期値が与えられればLocalization mappingを繰り返すことで実現できる
基準となる座標系を設定する
その時々に応じた座標系が必要
ワールド座標系 全体の共通基盤となる座標系
ローカル座標系 物体ごとに設定されている座標系
絶対位置姿勢 他の系から参照可能で再現可能な世界座標において推定される位置姿勢情報
相対位置姿勢 再現可能でない座標系による推定
v-SLAMでは相対的な位置姿勢しか推定できない

カメラ位置姿勢を推定することでARなどをよりリアルに投影することができえる
座標変換には平行回転を考慮した座標変換行列を用いる

自由度は6

投影モデル
直行投影や透視投影を行う事ができる

誤対応
RANSAC 少数の点を繰り返し対応を付ける
繰り返し回数が少ないと処理が破綻する可能性がある
また誤対応が多いと処理に時間がかかる
M推定 最小二乗法ではoutlierの影響が極めて大きくなるため例外値の重みを小さくするような誤差関数を用いる方法
Outlierの影響を完全に排除できない
局所解に陥る場合がある

人工マーカーを用いるのは配置や維持、美観の問題から難しい
そこでシーン中に存在する特徴点や線特徴を利用して位置合わせを行う

3次元位置が基地の対象があればPnP問題を解くことができる OpenCVでもできる
既知の対象としてはマーカーや自然特徴点
3次元位置をリアルタイムで推定できればv-SLAMを実現可能

自然特徴点の3次元位置推定
カメラの位置が既知でありかつ画面上の位置が既知な場合はObject Space errorまたはImage Space Errorを最小にすることで特徴点の3次元位置を推定可能

v-SLAMでは処理が高速であること繰り返し再現性が高いことが求められる
スケール普変性は考慮する必要がない
FAST特徴量やShi-Tomasi特徴量を用いることが多い

v-SLAMではカメラの位置姿勢が既知であるためスケール変化、回転、変形について補正することができる
このためSIFTやSURFなどの特徴量を使う必要はない
テンプレートマッチングでよい

対応点の探索範囲
カメラの動きや画像間の最大視差より対応点の探索範囲を限定している


v-SLAMのアルゴリズム
カメラ運動を先に推定する方法
初期位置でMAPを与える方法
同時に推定する方法

蓄積誤差の問題
1%の誤差であってもそれが100回続くと1.01の100乗で270%もの誤差になる
なので多数の地点から観測可能な点を存在させそこからスケールを取得、誤差を抑えることができる

順次復元によるv-SLAM
OpenCVの関数を組み合わせることで実現可能

PTAM
MappingとTrackingを並列かつ非同期に行う事で実時間処理を実現しながら蓄積誤差を解消を図る手法

様々な課題への対応
画像から実際の大きさの推定はできない 何らかの外部指標が必要
絶対位置の決定
マップがその場で構築されるため位置に依存した情報サービスの提供には事前に何らかの事前指標が必要となる

Direct method
特徴点に限定せずすべての画素の3次元情報を利用した位置合わせを行う
基本的にはphoto consistencyを高めるようにカメラ位置姿勢を推定する枠組み
Feature/key-point based method
特徴点のみを利用しそれ以外の情報は利用しない

まとめ
v-SLAMの基本は特徴点のトラッキング、カメラ位置姿勢3次元位置推定最適化処理の繰り返し
OpenCVや他のオープンソースも出てきており開発の敷居は下がっている

2015/06/10(水) チュートリアル4 コンピュータビジョンの最新ソフトウェア開発環境-OpenCV,PCLの導入・機能紹介 プログラミング言語の選択と開発ツールの活用-

DSCN3306.JPG

発表スライド

概要:前半はOpenCV及びPCLの紹介
OpenCVは初心者の基礎教育など良い面もあるが、決して最新の研究が常に更新されるわけではないのでそれだけを使っていてはいけない
PCLはロボット業界の人たちが主に使うライブラリで基本的な点群処理が網羅されている

後半はプログラミング言語と研究開発環境…と言いながらとにかくPythonの宣伝
OpenCVなどではC/C++が主流だがコンパイル型言語は試行錯誤する際には不向き
だからPythonを使おう
開発環境のフリーウェアやライブラリも多数存在しどれも使いやすい
だからPythonを使おう
アイデアを出すためには少し変えるだけでいちいちコンパイルしなければいけないC/C++ではなくスクリプト言語でどんどん試してみよう
だからPythonを使おう
データサイエンスにも機械学習ツールとの相性も良い
だからPythonを使おう
これだけ言われるとPython覚えようかなぁと思う内容でした。はい。


以下スライド概要
OpenCV、PCLの最新版の機能の紹介
OpenCV新機能デモ
MILによるオンライン物体追跡
Poisson Image Editingによる画像合成

最近ではPythonでも使うことができる
C++での使い方のほぼそのままPythonで実行できる

OpenCVの存在する価値
画像系の基礎教育が簡単
基本ツールとしての存在が生産性を向上させられる
仕組みを詳しく知らなくてもAPIを叩くことでツールとして使える

OpenCVも万能ではない
CUDA/OpenCL周りは結構バグが多い
OpenCVに入っているアルゴリズムだけがすべてではない
画像認識部分にも弱い

Point Cloud Library(PCL)
ロボットビジョンを目的としたC++言語による点群処理ライブラリ
リアルタイムに動画で点群が取得できる
標準的な点群処理がPCLにはすべて収録
IO周りや可視化を簡単に済ませられるものが充実

今も拡張が続けられておりセグメンテーションや人を検出することもできるようになる

PCLで点群処理に少しでも触っておくメリット
画像での3D幾何のイメージがつきやすくなる
セグメンテーションや人認識、物体認識は3Dの方が楽
3Dで関連するグラフィックス、ロボット、インタラクションなどの周辺分野の知識が入りやすくなる


これからはPython!!
様々なフリーウェア、ライブラリ
IPython、Jupyter、PTSV、scikit-learnなどなど・・・

オープンソースのライブラリを読んで勉強できる。
行列風で理解がしやすい

プログラミング環境と研究開発環境
画像センシングで用いられてきた言語
コンパイルを行う:C/C++,Java,C#...
スクリプト言語:Matlab,Python…

ライブラリの豊富さや計算速度の必要性、環境に応じて選択

C/C++
計算速度が速い
古くからの知識が使える
行列/数式的記述がしづらい

Python/Matlab
計算速度がやや遅い
型定義が緩くインタラクティブな実験的/探索的な作業に向く
行列/数式的な記述がしやすい

プロトタイプのコーディングにはPythonを用いてコンパイル時間の短縮
設計などを固めその後C/C++で実装する

対話的なプロトタイピングにより「アイデア」を練りだす

設計もしっかりと行う
プロトタイピングのみだと「手を動かしているだけ」になってしまう

アルゴリズムが複雑で新規的な内容の時ほど簡潔な記述とプロトタイピングが効いてくる

設計済みなものは静的方付け言語で行う方がよい

スクリプト言語は遅いといわれているが現在では様々な高速化手段が知られている
C++程度の速度はすぐに出せるようになる

Pythonならば機械学習系ツールとOpenCVを同時に使うことができる

C++では2重ループになるような場面でもPython+Numpyであれば1行で書ける場面もある

最初から実装環境をPythonに移行させるのではなく実験の評価などだけをPythonに移行させるところから始めている

まとめ
ライブラリを使いこなしてさらに高みを狙うことが重要
プロトタイピングは重要「アイデアを生み出すためにはどうするか」を大切に
目的ごとにプログラミング言語を使い分ける
自分で作り出すアルゴリズムや研究を大事に
ツールに凝り効率性が上がれば時間を有意義に使え、様々なメリットを享受することができる

2013/09/18(水) Adiary をインストールしました!

ブログソフトadirlyhttp://adiary.org/をインストールしてみました.

研究室日記をつけましょう.

2013/09/07(土) 柳井研究室富士山セミナー2日目


7日


朝5時前にいきなり叩き起こされて食べる朝ごはん 高野豆腐がおいしい






御来光!









ちょっと経つとこんなにもいい天気に






7合目を出発







かなりゴツゴツとした道になってきました







本7合目までは意外とすぐ






動き出すと暑い暑い・・・






ここから砂利道 滑って登りづらい・・・







8合目は人の多い吉田口とぶつかる 人の多さに驚いたぁ







ここからは山小屋の間隔は短い ここは本8合目 上に見えるは8合5尺






だいぶ標高も上がってきました







ルート上最後の山小屋







足元は赤い 溶岩だからかな?






小屋の残骸の近くで休憩 疲れてたり元気だったりご飯食べたりラジバンダリ








さぁ9合目!あと少し!








俺のポップコーンがこんなに膨らむはずがない






山頂!!







しかし天気が悪くなってしまい 寒い






そんな中山頂セミナー 軽快な話口にネタまじりで他分野ながら非常に興味の惹かれる内容でした だが寒い






セミナー後のビールが美味しかったそうです






お鉢巡りかーらーのー剣ヶ峰!







Wi-Fiが届いたので日本最高峰で提督業やプロデューサー業をしたのは秘密




後は下山 完全防備ですが結局ほとんど雨振らず






かなり急で止まりづらく登りよりも大変 視界も悪い・・・







あんなに苦労して登ったのに下るのは一瞬 あっという間に7合目まで降りれます






さてここからは砂走り 普通は蛇行して下りるところをほぼまっすぐに降りていきます







かなり急 だけどスピードが出せると超エキサイティン!! ただ怪我には気を付けてね








最後の山小屋 来年には完成してるかな?







一気に下りてきたので周りは一気に森 ここまで来ればもう5合目は目の前








無事に到着 お疲れ様でした







みんなしておみやげ買い過ぎた ただし,しいたけ茶テメーはダメだ







行きにも来た道の駅で時間つぶし 足湯で完全に魂抜けてるのが私です






最後は温泉『天恵』で疲れを取りましょ ご飯は待たされるけどね





お疲れ様でしたー