▼ 2015/06/10(水) チュートリアル1 ハッシングによる効率的な大規模画像検索 -近似近傍探索の新たなスタンダード-
概要:大規模なデータを高速に探索するためにバイナリコード化させるハッシング手法についてのチュートリアル
高速に処理が行えるためモバイル画像検索や3D復元などに用いられる
基本的ながらも精度のよいPCAハッシングやIQTの説明やグラフ/構造体に基づく方法などの説明を受けた
クロスモーダルハッシングやDeep Learningによるハッシングなどが今後の課題とされる
以下スライド概要
そもそもハッシングとは?
・たくさんのデータの中からざっくりと近いものを早く探すためのcontent-basedなデータインデクシング法
・画像では検索、マッチング、3D復元などいろいろ使われる
・大規模画像処理の基本的なツールの一つ
何のためにあるのか?
基本は近傍探索のため
真面目にやると非常に時間がかかる
近似近傍探索
多少いい加減でもよいことにすると処理速度が上がる
ハッシングはこの近似近傍探索を実現するための代表ツール
ハッシングとは
ハッシュ関数を使ってインデクシングする
低次元なバイナリコードへの変換=ハッシュコードに変換する
もともと遠いものは遠く、近いものは近く
ハッシュランキング
そうすることでハミング距離を求めることで近いものをランキングすることができる。
長所:必ず近似近傍を見つけることができる
短所:距離計算をしなければならない(それでもL2距離などよりは少ない)
ハッシュルックアップ
ハッシュコードで作ったルックアップテーブルを使って一定距離内のデータをすぐに見つけることができる
長所;データが増えても検索時間は変わらない
短所:近似近傍が見つからない場合がある
ハッシュを用いることでモバイル画像検索にも用いられている。
3次元復元では処理時間は通常では21時間、ハッシュでは5分! 243倍!
ハッシュ関数の構成法
局所鋭敏性ハッシング LSH
原始的なハッシュ関数構成の一つ
元の空間の距離に応じて様々なアルゴリズムが提案されている
画像分野では角度距離を保存するランダムプロジェクションが用いられる
LSHはハッシュ関数をたくさん用いなければならないデータから学習するハッシング
ハッシング法の紹介
ランダム型と学習型が存在する
基本的には次元削減+バイナリ量子化
主に教師なし型を今回は議論する
PCAハッシング
主成分ベクトルを引き、そのベクトルに垂直に線をひき01を分ける
10が均等な確率で現れる ビット間の相関がない方がよい
量子化誤差が問題
ITQ
量子化誤差が少なくなるようにデータを回転させてしまう。
その回転行列Rを求める
近傍探索精度を大幅に改善できる 5倍近い改善がみられる
分散が均一化される
様々な発展形が存在している(要旨参照)
ハッシングを行うならまずこれを試してみる
K-means ハッシング KMH
K-meansを用いたハッシング法
代表点にバイナリの値を割り当てその値を用いて距離の計算を行う
ITQでは立方体の回転のみでの対応だったがKMHでは立方体のゆがみによる修正を行う事ができるので量子化誤差を少なくする面で優秀
Double-Bit Quantization (DBQ)
1次元あたり2ビット量子化する
分割した際に次元ごとの量子化誤差が最も小さくなるように線引きする
ITQとの併用で精度がよくなる
グラフ/多様体に基づくハッシング
Laplacian Eigenmaps(LE)
本質的なデータの構造をとらえて低次元化する
多様体構造 簡単にいえば局所的な近接性
元の空間でのデータの局所的な近接性が、より低次元な空間上で出来る限り再現されるように配置する問題を解く
固有値問題
局所的な近接性の観点に近いもの同士が近いハッシュコードになる
しかし単純にLEを適用してしまうと学習データにしか適応できない
なので様々な方法が提案されている
Spatialハッシング
特徴空間を三角関数で分割してハッシング
新規点と既存点との類似度を求める この時にはサイン関数を用いる
Local Linear Embedding LLE
相対距離が保持される
近接する異なる多様体同士を分離して探索できる
現在そしてこれからの課題
クロスモーダルハッシング
異なるデータ同士の相互検索(画像―文書)
多くの場合ユニモーダル(画像―画像)精度を改善できることも知られている
モーダル内類似度とモーダル間類似度の2つの類似度を保持するようなハッシュコードを求める
詳しくは要旨参照
超次元ハッシング
検索はデータ数に対して比例しない時間で実行できる
ハッシュコード生成は1ビットあたり特徴次元に比例する時間かかる
特徴ベクトルを行列に折りたたむことでメモリの削減などを行う
Deep-Learning Hashing
CNNを用いたハッシュ法特徴抽出とハッシングが同時に行える
- TB-URL http://mm.cs.uec.ac.jp/adiary/adiary.cgi/yanailab/09/tb/
▼ 2015/06/10(水) チュートリアル2 Deep-Learningによる画像認識革命 –歴史・最新理論から実践応用まで-
発表スライド
概要: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の構造に依存している
より汎用的な人工知能に近づくことができるのか・・・?
- TB-URL http://mm.cs.uec.ac.jp/adiary/adiary.cgi/yanailab/08/tb/
▼ 2015/06/10(水) チュートリアル3 特徴点追跡による動画像からの逐次3次元復元とその応用 –座標系の基礎から応用事例・最新研究動向まで-
概要:画像内の特徴点を検出、追跡することによりカメラの位置姿勢や特徴点の座標を求めることができる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や他のオープンソースも出てきており開発の敷居は下がっている
- TB-URL http://mm.cs.uec.ac.jp/adiary/adiary.cgi/yanailab/07/tb/
▼ 2015/06/10(水) チュートリアル4 コンピュータビジョンの最新ソフトウェア開発環境-OpenCV,PCLの導入・機能紹介 プログラミング言語の選択と開発ツールの活用-
発表スライド
概要:前半は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に移行させるところから始めている
まとめ
ライブラリを使いこなしてさらに高みを狙うことが重要
プロトタイピングは重要「アイデアを生み出すためにはどうするか」を大切に
目的ごとにプログラミング言語を使い分ける
自分で作り出すアルゴリズムや研究を大事に
ツールに凝り効率性が上がれば時間を有意義に使え、様々なメリットを享受することができる
- TB-URL http://mm.cs.uec.ac.jp/adiary/adiary.cgi/yanailab/06/tb/
1: Apposcofs 2023年05月20日(土) 午後5時06分
スーパーは時計をコピーしますブランド偽物、偽物ブランド、ルイヴィトンコピー、 ロレックスコピー、シャネルコピー、グッチコピー、エルメスコピー、 ボッテガヴェネタコピー、 バーバリーコピー、ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、ブルガリコピー、ブラダコピー、 ドルチェ&ガッバーナコピー、オメガコピー、フランク ミュラーコピー、gagaコピー。 }}}}}}
https://www.bagssjp.com/product/detail-11838.html
https://www.bagssjp.com/product/detail-5928.html
https://www.bagssjp.com/product/detail-326.html
https://www.bagssjp.com/product/detail-1608.html
https://www.bagssjp.com/product/detail-10757.html
2: pneurgig 2023年05月21日(日) 深夜3時35分
激安ブランド,財布コピー,偽ブランド,偽 ブランド財布,偽物ブランド財布,ブランドコピー,ヴィトンコピー,ルイヴィトン財布偽物, シャネル財布コピー,グッチ財布コピー,エルメス財布偽物,D&G 財布コピー,ボッテガ 財布 .2023年新作スーパーコピーロレックス,スーパーコピーロレックス時計通販スーパー コピー品その他の世界一流ロレックススーパーコピー時計品を扱っています。 }}}}}}
https://www.kopi66.com/product/detail.aspx?id=2720