おべんきょうwiki
http://w.atwiki.jp/yahirohumpty/
おべんきょうwiki
ja
2016-08-25T21:30:46+09:00
1472128246
-
トップページ
https://w.atwiki.jp/yahirohumpty/pages/1.html
* おべんきょうwiki
- 個人的な勉強メモ.
- 現在編集は制限してます.
- readthedocsに引っ越し中です.http://obenkyo-doc.readthedocs.io/ja/latest/
----
//**@wikiへようこそ
//-ウィキはみんなで気軽にホームページ編集できるツールです。
//-このページは自由に編集することができます。
//-メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます
**まずはこちらをご覧ください。
-[[@wikiの基本操作>http://atwiki.jp/guide/category2.html]]
-[[用途別のオススメ機能紹介>http://atwiki.jp/guide/category22.html]]
-[[@wikiの設定/管理>http://atwiki.jp/guide/category6.html]]
**おすすめ機能
-[[気になるニュースをチェック>http://atwiki.jp/guide/17_174_ja.html]]
-[[関連するブログ一覧を表示>http://atwiki.jp/guide/17_161_ja.html]]
**その他にもいろいろな機能満載!!
-[[@wikiプラグイン>http://atwiki.jp/guide/category17.html]]
-[[@wiki便利ツール>http://atwiki.jp/guide/category32.html]]
-[[@wiki構文>http://atwiki.jp/guide/category16.html]]
**バグ・不具合を見つけたら?
お手数ですが、こちらからご連絡宜しくお願いいたします。
⇒http://atwiki.jp/guide/contact.html
**分からないことは?
-[[@wiki ご利用ガイド>http://atwiki.jp/guide/]]
-[[よくある質問>http://atwiki.jp/guide/category1.html]]
-[[@wikiへお問い合わせ>http://atwiki.jp/guide/contact.html]]
等をご活用ください
2016-08-25T21:30:46+09:00
1472128246
-
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 - SlideShare
http://www.slideshare.net/pfi/deep-learning-22350063
実装ディープラーニング
http://www.slideshare.net/yurieoka37/ss-28152060
2014-10-03T18:05:09+09:00
1412327109
-
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
-
運動学
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 _{i-1}} & {^0 ey _{i-1}} & {^0 ez _{i-1}} & {^0 p _{i-1}} \\ 0 & 0 & 0 & 1 \end{array} \right] $$
速度と角速度は次のようになる(DH記法の場合はz軸周りに関節軸が存在する).
$$ \left( \begin{array}{c} v_i \\ \omega _i \end{array} \right) = \left( \begin{array}{c} {^0 ez _{i-1}} \times {^{i-1} p _n} \\ {^0 ez _{i-1}} \end{array} \right) \dot{q_i} = J_{Bi} \dot{q_i} $$
ここで
$$ {^{i-1} p _n} = {^0 p _n} - {^0 p _{i-1}} $$
このようにすることで,
$$ J_B(q) = [ J_{B1} ... J_{Bn} ] $$
として得ることができる.
*** 基礎ヤコビ行列からヤコビ行列への変換
ツイストと回転表現パラメータの間の変換を求めるとよい.
$$ J_B(q) = K(\alpha) J(q) $$
$$ K(\alpha) = \left[ \begin{array}{cc} I_3 & 0 \\ 0 & K \end{array} \right] $$
$$ \omega = K \dot{\alpha} $$
ここでKの求め方は
$$ \lambda (\omega) = \dot{R}R^T $$
から求める.
$$ R = \left[ \begin{array}{ccc} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{array} \right] $$
とすると,なんやかんやで
$$ \omega = \left[ \begin{array}{c} \dot{r_{31}} r_{21} + \dot{r_{32}} r_{22} + \dot{r_{33}} r_{23} \\ \dot{r_{11}} r_{31} + \dot{r_{12}} r_{32} + \dot{r_{13}} r_{33} \\ \dot{r_{21}} r_{11} + \dot{r_{22}} r_{12} + \dot{r_{23}} r_{13} \end{array} \right] $$
これを計算して回転パラメータでまとめると求められる.が,手計算だとかなりつらいのでMathematicaを使ったほうがいい.
** 参考文献
吉川恒夫.「ロボット制御基礎論」.コロナ社,1988.
内山勝,中村仁彦.「ロボットモーション」.岩波書店,2004.
2014-08-12T17:40:37+09:00
1407832837
-
クォータニオン
https://w.atwiki.jp/yahirohumpty/pages/13.html
= クォータニオン =
「四元数」とも呼ばれる.
三次元回転をコンパクトに表現できる,補間がやりやすいなどの利点があるが,
結局同次座標変換行列に落とさないと使えなかったりする.
直感的でないという最大の欠点がある.
== 回転を表すクォータニオン ==
普通のクォータニオンは
<math>q = (w \ V) = (w \ x \ y \ z)</math>
とかあらわされる.<math>V = (x \ y \ z)</math>は虚部.
回転を表すクォータニオンの場合,大きさが1のクォータニオンとなる.
回転量を<math> \theta </math>,回転軸を<math>(n_x \ n_y \ n_z)</math>としたときこれをあらわすクォータニオンは
<math>(\cos \theta /2 \ \ n_x \sin \theta /2 \ \ n_y \sin \theta /2 \ \ n_z \sin \theta /2)</math>
当然,全要素の符号を反転させても同じ回転を表現できる.
なお,
<math>-q = (-w \ -V) = (-w \ -x \ -y \ -z)</math>これは同じ回転を意味し
<math>q^{-1} = (w \ -V) = (w \ -x \ -y \ -z)</math>これは逆回転を意味する
== 基本的な演算 ==
クォータニオンの乗算の定義は
<math> q_0 q_1 = ( w_0 \ V_0 ) ( w_1 \ V_1) = (w_0 \ x_0 \ y_0 \ z_0) (w_1 \ x_1 \ y_1 \ z_1)</math>
<math> = (w_0 w_1 - V_0 \cdot V_1 \ \ w_0 V_1 + w_1 V_0 + V_0 \times V_1 ) </math>
<math> = \left( \begin{array}{c} w_0 w_1 - x_0 x_1 - y_0 y_1 - z_0 z_1 \\ w_0 x_1 + x_0 w_1 + y_0 z_1 - z_0 y_1 \\ w_0 y_1 + y_0 w_1 + z_0 x_1 - x_0 z_1 \\ w_0 z_1 + z_0 w_1 + x_0 y_1 - y_0 x_1 \\ \end{array} \right) </math>
ちなみに
<math> V_0 \cdot V_1 = x_0 x_1 + y_0 y_1 + z_0 z_1 </math>
<math> V_0 \times V_1 = (y_0 z_1 - z_0 y_1 \ \ z_0 x_1 - x_0 z_1 \ \ x_0 y_1 - y_0 x_1) </math>
回転を表すクォータニオンを合成するときは単純に乗算すればよい.
クォータニオンaをbで回転させてクォータニオンcをつくる場合.
<math> c = b^{-1} a b </math>
コーディングの際にはたぶん展開しても簡単にならないと思うので素直に乗算で組んでしまうのがいいと思う.
== 他の表現との変換 ==
回転行列の作り方
右手座標列ベクトル形式として,
<math>
\begin{bmatrix}
1-2y^2-2z^2 & 2xy-2wz & 2xz+2wy \\
2xy+2wz & 1-2x^2-2z^2 & 2yz-2wx \\
2xz-2wy & 2yz+2wx & 1-2x^2-2y^2 \\
\end{bmatrix}
</math>
回転行列からの作り方
= axis-angle =
回転量を<math> \theta </math>,回転軸を<math>r = (n_x \ n_y \ n_z)</math>としたとき
<math> q_a = (\theta, r) = (\theta, (n_x \ \ n_y \ \ n_z)) </math>
回転の合成は直接計算では得ることができない.
クォータニオンとの変換は簡単なのでそこを経由するとよい.
== 変換 ==
回転行列への変換はRodoriguesの公式を使う.
<math>
R = \cos \theta I_3 + (1- \cos \theta) r r^T + \sin \theta
\begin{bmatrix}
0 & -n_z & n_y \\
n_z & 0 & -n_x \\
-n_y & n_x & 0
\end{bmatrix}
</math>
逆変換
<math>
\sin \theta
\begin{bmatrix}
0 & -n_z & n_y \\
n_z & 0 & -n_x \\
-n_y & n_x & 0
\end{bmatrix}
= \frac{R-R^T}{2}
</math>
= 対数クォータニオン:exponential map =
OpenCVでは「回転ベクトル」と呼ばれている.
回転軸*回転角度で表される.三次元.
<math> q_e = (\theta n_x \ \ \theta n_y \ \ \theta n_z) </math>
こうすることで,
<math> q_0 \times q_1 \approx \exp ( \ln (q_0) + \ln (q_1)) </math>
ということらしい.
表現形式は文献,実装によって異なるようだが最終的に座標変換がうまくいっていれば問題はない?
DirectXでは
<math> \ln (w V) = (0 \ \ (\phi / \sin \phi ) V) , \phi = \cos ^{-1} w </math>
= 参考文献 =
* 四元数で回転 入門
** http://staff.aist.go.jp/toru-nakata/quaternion.html
* F. Dunn, I. Parberry, 松田晃一:「実例で学ぶゲーム3D数学」,オライリージャパン.
** http://www.oreilly.co.jp/books/9784873113777/
* カメラキャリブレーションと3次元再構成
** http://opencv.jp/opencv-2svn/cpp/camera_calibration_and_3d_reconstruction.html
* 3D空間における回転の表現形式 - TMPSwiki
** http://www.tmps.org/index.php?3D%B6%F5%B4%D6%A4%CB%A4%AA%A4%B1%A4%EB%B2%F3%C5%BE%A4%CE%C9%BD%B8%BD%B7%C1%BC%B0#ya68a83d
* クォータニオン逆運動学 - TMPSwiki
** http://mukai-lab.org/wp-content/uploads/2014/04/QuaternionInverseKinematics.pdf
** http://www.tmps.org/index.php?%A5%AF%A5%A9%A1%BC%A5%BF%A5%CB%A5%AA%A5%F3%B5%D5%B1%BF%C6%B0%B3%D8#ra10d054
2014-08-12T14:38:08+09:00
1407821888
-
メニュー
https://w.atwiki.jp/yahirohumpty/pages/2.html
メニュー
&link_toppage()
&link_pagelist()
&link_tag()
----
更新履歴
#recent(10)
----
-[[@ウィキ ガイド>http://atwiki.jp/guide/]]
-[[@wiki 便利ツール >http://atwiki.jp/tools/]]
-[[@wiki>http://atwiki.jp]]
// リンクを張るには "[" 2つで文字列を括ります。
// ">" の左側に文字、右側にURLを記述するとリンクになります
2014-08-06T20:26:44+09:00
1407324404
-
同次座標変換行列
https://w.atwiki.jp/yahirohumpty/pages/18.html
= 同次座標変換行列 =
並進と回転を一つの行列で表す方法
== 同次座標形式 ==
このページでは右手座標系としベクトルは列ベクトルであらわす.
同次座標形式では方向ベクトルと位置ベクトルを区別するための符号を最後に付加する.
変換行列を掛けることで座標変換の合成ができるため,定式化をしやすい.
== 変換行列の性質 ==
回転行列の行列式は
右手座標系では常に1になり,
左手座標系では常に-1になる.
一番最後の要素(4行4列目)は常に1になる.
== 実装形態 ==
システムや分野によって異なる.
* 工学では列ベクトル,右手座標系がもっとも一般的.
* OpenGLは行ベクトル,右手座標系.
* DirectXは行ベクトル,左手座標系.
== 変換 ==
変換行列の変換
<math>
{^0 T _1} {^1 T _2} =
\begin{bmatrix}
^0 R _1 & ^0 t _1 \\
0 & 1 \\
\end{bmatrix}
\begin{bmatrix}
^1 R _2 & ^1 t _2 \\
0 & 1 \\
\end{bmatrix}
=
\begin{bmatrix}
{^0 R _1}{^1 R _2} & {^0 t _1}+{^0 R _1}{^1 t _2} \\
0 & 1 \\
\end{bmatrix}
= {^0 T _2}
</math>
位置ベクトルの変換
<math>
{^0 T _1} ^1 P =
\begin{bmatrix}
^0 R _1 & ^0 t _1 \\
0 & 1 \\
\end{bmatrix}
\begin{bmatrix}
^1 p \\
1 \\
\end{bmatrix}
=
\begin{bmatrix}
{^0 t _1}+{^0 R _1}^1 p \\
1 \\
\end{bmatrix}
= {^0 P}
</math>
== 逆変換=逆行列 ==
その性質上逆行列は乗算のみで記述できる.
<math>
\begin{bmatrix}
R & t \\
0 & 1 \\
\end{bmatrix}
^{-1}
=
\begin{bmatrix}
R^T & -R^T t \\
0 & 1 \\
\end{bmatrix}
</math>
== 三次元における基本的な回転行列 ==
x,y,z各軸の回転行列
<math>
RotX( \phi ) =
\begin{bmatrix}
1 & 0 & 0 \\
0 & \cos \phi & - \sin \phi \\
0 & \sin \phi & \cos \phi
\end{bmatrix}
</math>
<math>
RotY( \theta ) =
\begin{bmatrix}
\cos \theta & 0 & \sin \theta \\
0 & 1 & 0 \\
- \sin \theta & 0 & \cos \theta
\end{bmatrix}
</math>
<math>
RotZ( \psi ) =
\begin{bmatrix}
\cos \psi & - \sin \psi & 0 \\
\sin \psi & \cos \psi & 0 \\
0 & 0 & 1
\end{bmatrix}
</math>
2014-08-06T20:18:32+09:00
1407323912
-
三次元点群の姿勢あわせ
https://w.atwiki.jp/yahirohumpty/pages/17.html
= 三次元点群の姿勢あわせ =
対応が取れている三次元点群同士の姿勢あわせを一発で解く方法
== 定義 ==
文献中のクォータニオン表現は虚部,実部の順になっている.
<math>q = (V \ w) ^T = (x \ y \ z \ w) ^T </math>
以下この表現に合わせる.
クォータニオンを行列に変換する式を定義する.
<math>
Q(q) =
\begin{bmatrix}
wI + \lambda (V) & V \\
-V^T & w
\end{bmatrix}
=
\begin{bmatrix}
w & -z & y & x \\
z & w & -x & y \\
-y & x & w & z \\
-x & -y & -z & w
\end{bmatrix}
</math>
<math>
W(q) =
\begin{bmatrix}
wI - \lambda (V) & V \\
-V^T & w
\end{bmatrix}
=
\begin{bmatrix}
w & z & -y & x \\
-z & w & x & y \\
y & -x & w & z \\
-x & -y & -z & w
\end{bmatrix}
</math>
ただしここで<math>\lambda (V)</math>は三次元ベクトルの外積行列である.
<math>
\lambda (V) =
\begin{bmatrix}
0 & -V_z & V_y \\
V_z & 0 & -V_x \\
-V_y & V_x & 0
\end{bmatrix}
</math>
また,位置ベクトルに対応するクォータニオンを以下のように定義する.
<math> p = 1/2 (p_x \ p_y \ p_z \ 0) ^T </math>
== 座標変換計算 ==
点対応の取れている二つの点群<math>
^0 p _i , ^1 p _i , i = 1 \ldots k
</math>が与えられたとき,座標系0から1への変換行列を求める.
まず,以下の行列を計算する.
<math>
C_1 = -2 \sum _{i=1} ^k \alpha _i Q( ^1 p _i )^T W( ^0 p _i )
</math>
<math>
C_2 = \sum _{i=1} ^k \alpha _i I
</math>
<math>
C_3 = 2 \sum _{i=1} ^k \alpha _i (W( ^0 p _i ) - Q( ^1 p _i ))
</math>
<math>
A=(1/2) ( C_3^T ( C_2 + C_2^T ) ^{-1} C_3 - C_1 - C_1^T )
</math>
ここで<math>\alpha _i</math>は各点に対する重み.
次に,<math>A</math>を固有値分解し最大固有値に対応する固有ベクトル<math>r = (V_r \ w_r)</math>を求める.
最後に求めた<math>r</math>から回転行列<math>R</math>と並進ベクトル(のクォータニオン表現であることに注意)<math>t</math>を求める.
<math>
R=( w_r^2 - V_r^T V_r ) I + 2 V_r V_r^T + 2 w_r \lambda (V_r)
</math>
<math>
t=-W(r) ^T ( C_2 + C_2^T )^{-1} C_3 r
</math>
なお,
<math>( C_2 + C_2^T )^{-1} = 1 / (2 \sum _{i=1} ^k \alpha _i) I </math>
である.
== 参考文献 ==
Walker, Shao, Volz; "Estimating 3-D Location Parameters Using Dual Number Quaternions", CVGIP, Vol. 54, No. 3, pp. 358-367, 1991.
2014-08-06T20:17:46+09:00
1407323866