おべんきょうwiki
http://w.atwiki.jp/yahirohumpty/
おべんきょうwiki
ja
2014-09-11T18:22:06+09:00
1410427326
-
EMアルゴリズム
https://w.atwiki.jp/yahirohumpty/pages/35.html
* EMアルゴリズム
Expectation-Maximization Algorithm: 期待値最大化法.
反復的な最尤推定法.
E-step と M-step を交互に繰り返して計算が行われる.
** E-step
** M-step
** 参考文献
Wikipedia
http://ja.wikipedia.org/wiki/EM%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
2014-09-11T18:22:06+09:00
1410427326
-
混合ガウスモデル
https://w.atwiki.jp/yahirohumpty/pages/34.html
* 混合ガウスモデル
複数のガウスモデルを組み合わせて分布を表現するモデル.
** 求め方
EMアルゴリズムを用いた反復的な手法を取ることが多い.
2014-09-11T18:11:56+09:00
1410426716
-
CyclicCoordinateDescent
https://w.atwiki.jp/yahirohumpty/pages/33.html
* Cyclic Coordinate Descent
略してCCD(紛らわしい!).
逆[[運動学]]の解法の一つだが,
目標位置のみに追従し,回転姿勢を与えることができない.
MMDはこれを用いているらしい.
** 参考文献
- CCD-IK and Particle-IK
-- http://mukai-lab.org/wp-content/uploads/2014/04/CcdParticleInverseKinematics.pdf
- MMD on WebGL 踊れるようになった(あと IK について)
-- http://d.hatena.ne.jp/edvakf/20111102/1320268602
2014-08-12T18:02:02+09:00
1407834122
-
A*アルゴリズム
https://w.atwiki.jp/yahirohumpty/pages/32.html
* A*アルゴリズム
探索手法の一つ.
古くからある手法でよく使われている.
解説もたくさんあるのでそちらを参照.
** 参考文献
Wikipedia
http://ja.wikipedia.org/wiki/A*
2014-08-06T20:14:31+09:00
1407323671
-
TSR
https://w.atwiki.jp/yahirohumpty/pages/31.html
* TSR: Task Space Region
エンドエフェクタの拘束条件を記述する.
** TSR
3つのパートからなる.
$$ ^o T _w $$ : 世界座標系oからTSR座標系wへの座標変換
$$ ^w T _e $$ : TSR座標系wからエンドエフェクタeへの座標変換
$$ ^w B $$ : TSR座標系における拘束条件
$$ ^w B = \left[ \begin{array}{cc} x_{min} & x_{max} \\ y_{min} & y_{max} \\ z_{min} & z_{max} \\ \psi_{min} & \psi_{max} \\ \theta_{min} & \theta_{max} \\ \phi_{min} & \phi_{max} \\ \end{array} \right] $$
回転はRPYで表される.
(この後の検算の結果,おそらく元論文ではRPY = $$ RotZ(\phi) RotY(\theta) RotX(\psi) $$ と思われる.)
** TSRに対する距離の定義
コンフィグレーション空間 $$ q_s $$ に対応するエンドエフェクタの座標を $$ ^o T _s $$とする.
このときのTSR座標系を $$ ^o T _{s'} $$ とすると,次のように逆算できる.
$$ {^o T _{s'}} = {^o T _s} ( {^w T _e} ) ^ {-1} $$
初期のTSR座標系との差分は以下のように計算される.
$$ {^w T _{s'}} = ( { ^o T _w } )^{-1} { ^o T _{s'} } $$
これを拘束 $$ ^w B $$ に合わせた形になおすと,
$$ ^w d = \left[ \begin{array}{c} ^w t _{s'} \\ \arctan ( {^w R _{s'}}(3, 2) / {^w R _{s'}}(3, 3) ) \\ -\arcsin {^w R _{s'}}(3, 1) \\ \arctan ( {^w R _{s'}}(2, 1) / {^w R _{s'}}(1, 1) ) \\ \end{array} \ri
2014-08-06T20:13:56+09:00
1407323636
-
RRT
https://w.atwiki.jp/yahirohumpty/pages/30.html
* RRT: Rapidly exploring Random Tree
探索手法の一つ.
ランダムに樹状探索を行う.
始点と終点双方向から木を伸ばす方法もある.
BiRRT, RRT-Connectと呼ばれる.
(RRT-Connectは微妙にアルゴリズムが異なる?)
** RRTアルゴリズム
元論文から少しわかりやすくした擬似コードは以下の通り.
BuildRRT(x_init) {
tree.Init(x_init); // 初期値x_initをツリーのルートに登録する
for (k = 1 to K) { // ゴールに到達したかどうかもここで判定する
x_rand = RandomState(); // ランダムに目標値を入れる
// Extend(tree, x_rand); // 目標に対してツリーを延長する
Connect(tree, x_rand); // 目標に対して伸ばせるところまでツリーを延長する
}
}
/// @brief 与えられた目標xの方向に伸ばせるところまでツリーを延長する
Connect(tree, x) {
do {
s = Extend(tree, x);
} while (s == ADVANCED);
return s;
}
/// @brief 与えられた目標xの方向にツリーを延長する
Extend(tree, x) {
x_near = NearestNeighbor(x, tree); // 目標に一番近いノードから枝を伸ばす
if (NewState(x, x_near, x_new, u_new)) {
Tree.AddVertex(x_new);
Tree.AddEdge(x_near, x_new, u_new);
if (x_new == x) { // 実数空間では十分に近いかどうかを判定
return REACHED; // 目標に到達した
} else {
retu
2014-08-06T20:14:19+09:00
1407323659
-
運動学
https://w.atwiki.jp/yahirohumpty/pages/29.html
* 運動学
ロボットやCGキャラクターのポーズづけに用いられる.
要するに,関節角度空間$$q$$と三次元姿勢$$r$$の対応付けをとるものである.
** 順運動学(Forward Kinematics, FK)
関節角度空間から三次元姿勢への写像.
モデルがきちんと構築されていればなんの問題もなく解ける.
$$ r = f(q) $$
** 逆運動学(Inverse Kinematics, IK)
三次元姿勢から関節角度空間への写像.
条件付きで解析的に解くことは可能だが,
一般的には簡単に解けない.
$$ q = f ^{-1} (r) $$
** ヤコビ行列,ヤコビアン
$$ J(q) = \frac{\partial r}{\partial q} $$
ヤコビアンを用いると,関節角度列と三次元姿勢のそれぞれの微分の関係を次のように表せる.
$$ \dot{r} = J(q) \dot{q} $$
ヤコビアンに逆行列が存在する場合 i.e. 関節角度空間と三次元姿勢の自由度が一致する場合,
この逆変換は逆行列で表せる.
一般的には関節角度空間と三次元姿勢の自由度は一致しないので,擬似逆行列を用いることになる.
$$ \dot{q} = J^T(JJ^T)^{-1} \dot{r} $$
この結果を用いると,逆運動学を反復的に解くことができる.
すなわち現在の三次元姿勢と目標三次元姿勢から目標に向かう微小な変位$$ \dot{r} $$を作り,
$$ q \leftarrow \dot{q} + q $$としてループさせる.
*** 求め方
順運動学の途中で当該関節に当たる座標変換だけ偏微分して終端座標を求めれば良い.
** 基礎ヤコビ行列
並進速度と角速度を並べたツイスト$$ \nu = (v^T \omega ^T) ^T $$を用いたヤコビ行列.
$$ \nu = J_B(q)\dot{q} $$
基礎ヤコビ行列は順運動学から簡単に解ける.
各リンクの同次座標変換行列を次のように分解すると,
$$ {^0 T _{i-1}} = \left[ \begin{array}{cccc} {^0 ex
2014-08-12T17:40:37+09:00
1407832837
-
DeepLearning
https://w.atwiki.jp/yahirohumpty/pages/28.html
* Deep Learning
日本語だと「深層学習」.
ニューラルネットワークベースの手法.
非常に強力な識別器であり,もうあいつひとりでいいんじゃないかな状態.
** 何がすごいのか
従来だと,識別器の設計は
- 人間が適当な特徴検出を考える
- 検出された特徴量を適当な次元のベクトルになおす
- その特徴量を数学的に適当に分割する
という形で行われてきていた.
ところがDeep Learningだと,
- 特徴検出も特徴ベクトルも空間分割も自動でできる
- しかも高性能
というところがすごい.
** 構造
多層ニューラルネットワーク.
Pre Training (事前学習)とFine Tuningの二段階で学習を行う.
事前学習では教師なし学習を各層で行い,特徴抽出を行う.
Fine Tuningでは教師あり学習を全体について行い,識別器としての構成を行う.
** 事前学習
特徴抽出を行うため,各層において教師なし学習を行う.
主に2つの手法が用いられる.
- RBM: Restricted Boltzmann Machine (制限付きボルツマンマシン)
- AutoEncoder
** ツール
*** Pylearn2
https://github.com/lisa-lab/pylearn2
インストールがなかなかめんどくさい.
Theanoというライブラリに依存しているため,インストールする必要があるが
開発版を入れる必要がある.
pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git
また,ipythonのバージョンが古いとnotebookが動かないが,
対象としているバージョンは開発版だったりする.
*** Caffe
http://caffe.berkeleyvision.org/
https://github.com/BVLC/caffe
** 参考資料
あまりにも衝撃的だったためいろいろな人がいろいろな解説を書いている.
一般向けのDeep Learning - SlideSh
2014-10-03T18:05:09+09:00
1412327109
-
GraphSLAM
https://w.atwiki.jp/yahirohumpty/pages/27.html
* GraphSLAM
各時刻において取得されたデータから相対姿勢を計算して得られるポーズグラフを最適化する手法.
ここでは例によって使うために必要な情報だけまとめる.
** 初期姿勢列
まず各時系列での姿勢を推定しておく.ICPなどでよい.
この時の姿勢列を次のように定める.
$$ x_{1:T} = \{x_1 , x_2 , ... , x_T \} $$
三次元で考えると並進ベクトル$$ t _i ^ T $$とクォータニオン$$ q _i ^T $$をおいて,
$$ x_i ^T = ( t _i ^ T , q _i ^T )$$
$$ x = (t_x, t_y, t_z, q_x, q_y, q_z, q_w)^T $$
** ポーズグラフ生成
時刻$$ i,j $$間の相対姿勢が推定できるとき,次のように表す.
$$ z_{ij}^T = ( t _{ij} ^ T , q _{ij} ^T )$$
この相対姿勢は例えばSIFTなどで直接計測値から求めることができる.
一方で最初に作った姿勢列をたどれば同様に求めることができ,
この2つの間には計測誤差や累積誤差などにより差が生じる.
この差を次のように表すことができる.
$$ e_{ij} (x_i, x_j) = e_{ij}(x) = z _{ij} ^{-1} \oplus (x _i ^{-1} \oplus x_j) $$
ここで$$ \oplus $$は姿勢変換を表す.つまり$$ i,j $$間の相対姿勢を2つの方法で求めたものの誤差を表している.
$$ x _i \oplus x_j = ( q_i(t_j)^T, (q_i \cdot q_j)^T )^T $$
** 情報行列
誤差共分散行列$$ \Omega _{ij} $$と先ほど求めた誤差$$ e_{ij} $$を用いると,
やりたいことは次式を最小化する$$ x $$を求めることである.
$$ F(x) = \sum _{(ij) \in C} e_{ij} ^T \Omega _{i,j} e_{ij} $$
で,最小化のために$$ e_{ij} $$のヤコビアン$$ J_{ij} $$を求めるが,
2013-11-09T21:06:08+09:00
1383998768
-
MikuMikuDance
https://w.atwiki.jp/yahirohumpty/pages/26.html
* MikuMikuDance
樋口優氏によって開発された三次元アニメーション作成ソフト.
物理演算エンジンも組み込まれている.
ユーザー数が非常に多い.
のみならず,尋常ではない数のモデル類が公開されている.
ただしライセンス形態がまちまちであるので使用には注意を要する.
** 情報源
本家
http://www.geocities.jp/higuchuu4/index.htm
有志によるwiki
http://www6.atwiki.jp/vpvpwiki/
2013-10-17T13:01:03+09:00
1381982463