数学のお勉強(1)~クオータニオン~
参考:クォータニオンの回転補間:掲示板:シムダンス「四次元能」|Beach - ビーチ
やりたいこと
クオータニオンを理解する
教科書
↓ 素晴らしくわかりやすい。
回転行列の問題
クオータニオンの利点
ジンバルロックがない
計算負荷が低い
2つの回転同士のスムーズな補間が表現できる
x,y,z軸に限らない任意の回転軸での回転が簡単にできる
複素数について
虚数単位
i ** 2 = -1
複素数
a + b * i
複素平面
参考: 複素平面 - Wikipedia
複素数の行列表現
I = numpy.array([[0, -1], [1, 0]]) E = numpy.array([[1, 0], [0, 1]]) I ** 2 = - E Z = a*E + b*I = numpy.array([[a, -b], [b, a]]) Z = numpy.array([[numpy.cos(theta), -numpy.sin(theta)], [numpy.siN(theta), numpy.cos(theta)]]) * numpy.array([[r, 0], [0, r]])
共役
z' = a - b * i z * z' = || z || ** 2
複素数のすごさ
「複素数平面における点の回転」は「複素数のかけ算」に対応している。
「回転を足す」と「複素数を掛ける」は同じ意味!
たとえば、単位円でiを掛けていくと90度ずつ回転する。めちゃ便利。
参考:
二重数について
冪零元
epsilon**n = 0
二重数
z = a + b*epsilon epsilon = numpy.array([[0, 1], [0, 0]]) Z = a + b*epsilon = numpy.array([[a, b], [0, a]])
bを二重部という
クオータニオン
複素数の拡張として考えることができる
q = w + x*i + y*j + z*k # i,j,kは虚軸
基底i,j,kの関係
i**2 = j**2 = k**2 = -i*j*k = -1 i*j = k j*i = -k j * k = i k * j = -i k * i = j i * k = -j
交換法則はなりたたない
クオータニオンはw,x,y,zの組として、
q = [w, x, y, z]
と表記されることがおおい
クオータニオンの演算
共役
q' = [w, -x, -y, -z]
大きさ
v = (x, y, z) |q| = sqrt(w**2 + |v|**2)
乗算
q0q1 = [w0 * w1 - v0 * v1 , w0 * v1 + w1 * v0 + v0 ✕ v1]
内積
q0 * q1 = w0 * w1 + v0 * v1
逆数
q**-1 = q' / |q|**2
単位クオータニオンでは、共役を求めれば逆数が求まることがわかる
行列表現
i = numpy.array([[0, 0, 0, 1], [0, 0, -1, 0],[0, 1, 0, 0],[-1, 0, 0, 0]]) j = numpy.array([[0, 0, 1, 0], [0, 0, 0, 1],[-1, 0, 0, 0],[0, -1, 0, 0]]) k = numpy.array([[0, -1, 0, 0], [1, 0, 0, 0],[0, 0, 0, 1],[0, 0, -1, 0]])
3D回転
回転
あるベクトルpを単位クオータニオンを用いて3次元空間で回転を表現する方法
p' = q * p * q**-1 p' = [0, v] q = [qw, qv] # qv:回転軸 p = [0, pv] qw = +- numpy.cos(theta/2.0) qv = +- numpy.sin(theta/2)*u # u:qvと同じ方向の単位ベクトル
上記をまとめると、3次元の回転はクオータニオンを使って以下の式で表される
p' = q * p * q**-1 q = [numpy.cos(theta/2.0) numpy.sin(theta/2.0)*u]
pを単位クオータニオンqで回転したあと、rをつかって回転させる場合、
r*(q*p*q**-1)*r**-1=(rq)*p*(q`r`)=(rq)*p*(rq)`
となり、あらかじめクオータニオンrqを計算してクオータニオンsとして合成しておけば、回転の合成を行うことができる
クオータニオンを使えばどんな回転も一発で表現可能
デュアルクオータニオン
定義
回転のみならず、剛体変換(回転と平行移動)を表現できる。
クオータニオンの二重数である
q^ = r + d * epsilon # r,d: クオータニオン、epsilon:零冪元
所感
わかったようなわからないような。。。とりあえずハミルトン大先生すごい笑
まだ正直、理解しきれてない気がする。追記していこう : )
ホームオートメーション(1)~カーテン自動化~
やりたいこと
朝、めざまし無しで起きたい !
これまでは、目覚ましとiftttでの電気オン。。。
電動カーテン自動化による太陽光で起きる作戦
ハマりポイント
まさかの購入した電動カーテンのリモコンが赤外でなく、Nature Remo使えず...
スイッチボットで物理的にリモコンボタンを押すことに(泣)
構成
IFTTTのタイマー機能で、毎朝7:00にswitch link に信号を送り、switch botでニトリの電動カーテンの無線リモコンの開きボタンを物理的に押すという無理やり構成( ̄ー ̄)
そして、コンセント周りの配線…
今後
毎朝、目覚ましをかけずに太陽光で起きれるか実験⚗
いちお寝坊防止のために、
7:00にカーテンオープン by IFTTT & switch link !
7:15に電気オン by IFTTT & Nature Remo !!
7:30に目覚まし by iphone !!!
それではおやすみなさい💤
画像処理についてまとめメモ
やりたいこと
画像処理の大事な内容について箇条書きでまとめ
教科書
まとめメモ
カメラ応答関数:カメラへの入射光強度を入力として、画素値を出力とする関数
光ショットノイズ:受光素子に到達した光子数に比例して出力電圧に含まれるゆらぎの標準偏差
暗時ノイズ:受光素子に到達した光子数に依存せずに生じるノイズの総称で暗電流ノイズや読み出しノイズなどを含む
モスキートノイズ:元画像の高周波の成分が失われるようなノイズ
フリッカ:動画において各フレームで明るさが一定でない現象
ガウシアンフィルタ:正規分布型の重み係数をもつ。
バイラテラルフィルタ: ガウシアンフィルタを改良して、「中心画素からの距離のみで決めていた重み」を「中心画素の画素値と他の画素値の離れ方も含めた重み」に変更したもの
ノンローカルミーンフィルタ:テンプレートマッチングのように周辺画素を含めた領域が、注目画素の周辺領域とどれくらい似通っているかによって重みを決定するもの
-
- ガウシアンフィルタからのラプラシアンフィルタでノイズを減らしつつもエッジを強調できる
鮮鋭化フィルタ:元画像をそのまま出力するフィルタからラプラシアンフィルタを引いたもの
ガボールフィルタ:ある特定の方向の周波数成分を検出するフィルタ
LoGフィルタ: ガウシアン分布のラプラシアン
ゼロ交差:値が生から負へ、負から正へ変化する間の0になる位置。ゼロ交差の点をつなげると閉曲線になる
点拡がり関数:劣化過程を表す空間フィルタ
歪曲収差:ピントがしっかり合致していて色のにじみもないのに、映像が歪んで見えてしまうこと
被写界深度:レンズのピント調整をした時に十分にピントがあっていると判断できる距離
平面パノラマ: 複数の画像を平面に投影しながらつなぎあわせたもの。直線性は維持。
円筒面パノラマ:円筒面に投影したもの。直線性は維持されない。
球面パノラマ:球面に投影したもの。直線性は維持されない。
フレーム間差分:二枚の差分画像を用いて、論理積を求めることで移動領域だけを抽出する
Horn-Shunkckの方法:オプティカルフローのx,y方向の微分値の二乗値が小さくなるような平滑化項。オプティカルフローの拘束条件だけでは一意に決定することはできない。
光学:
放射量 | 測光量 | 備考 |
---|---|---|
放射束[W] | 光束[lm] | 単位時間に人感の明るさ単位 |
放射照度[W/m**2] | 照度[lx] | 単位面積あたりの光束 |
放射強度[W/sr] | 光度[cd] | 単位立体角あたりの放射束 |
あるアナログ的な信号をデジタルデータにサンプリングする場合、原信号に含まれる周波数成分をすべて正確にサンプリングするためには、原周波数の2倍以上のサンプリング周波数が必要となる。
これを標本化定理という。たとえば、100Hzのアナログ信号を正確にサンプリングするためには、最低でも200Hz以上の周期でサンプリングしなければならない。
もしサンプリング周波数の1/2よりも高い周波数成分が含まれていると、その成分がサンプリング結果にはエイリアス(alias、虚像)信号として現われる。
dpi: dots per inch
青色波長のピーク:450nm
緑色波長のピーク:550nm
赤色波長のピーク: 600nm
色の順番:青、シアン、赤、黄色、緑、青緑、青
- ラプラシアンフィルタは以下のように表すことができ、負の値にもなるし、同じ色が多い場合、0付近に値が集中する
0 | 1 | 0
1 | -4| 1
0 | 1 | 0
バイリニア補間:隣接4画素を頂点とする正方形の下底と上底それぞれについてx方向で補間を行い、得られた2つの値を用いて、y方向に線形補間を行う
オイラー数 = 連結結合の個数 - 穴の個数は
市街地距離:
ユークリッド距離:
チェス盤距離:横方向と縦方向の移動距離の大きい方の長さ
以下、赤:市街地距離、緑:ユークリッド距離、青:チェス盤距離
- マハラノビス距離:データの各方向への散らばり具合まで考慮した「データ群からの距離」 -> sqrt( (a-b)2 / delta2 )
参考:マハラノビス距離の意味を2次元の場合で理解する - 具体例で学ぶ数学
バンドル調整:たくさんの画像の対応点を利用して、各画像のカメラモーションと各対応点の3次元位置を更新する
テンレートマッチングの演算回数: 減算、絶対値、加算の三回
SIFT: http://www.vision.cs.chubu.ac.jp/cvtutorial/PDF/02SIFTandMore.pdf
FAST: 注目画素の周囲16画素の画素値が注目画像より明るい、もしくは暗い画素が一定の画素以上連続する場合はコーナーとする。
Cannyエッジ検出:
2次元DCT: 離散コサイン変換
mod M ; Mで割った余り
チェイン符号化: 線画像を、画素の連なりに注目して記述する可逆符号方式
ハフマン符号化: 画像の種類によらない符号化方式。符号割り当ては、濃度やランレングスといった情報源シンボルに符号を割り当てる作業であるが、生起確率の高い情報源シンボルほど短い符号を与えると、符号化に必要な平均の符号長を最小とすることができる。
JPEG2000方式:二次元離散ウェーブレット変換と算術符号化が用いられる
立体角:
ステラジアン:立体角の大きさを表わすSI補助単位。記号 sr 。1 sr は球の半径の2乗に等しい面積をもつ球面上の面分が球の中心に対してつくる立体角。
双方向反射率分布関数(BRDF):入射光の方向と出射光の方向に依存する四次元の関数。反射率を一般化したもので、出射光の放射輝度と入射光の放射照度の比として定義される。
ディザ法:黒と白つまり輝度が0と255の色だけを用いてハーフトーン(中間色)を表現しようという技術で,2値しか出力できない表示装置でなんとかグレースケールを表現しようとしたもの。グレースケールの画像を小さいブロックに分割し,それにマスクを掛けて閾値を越えたピクセルを白,下回ったものを黒というように処理。
デジタルカメラのゲイン:ゲインを下げるとノイズが減り、全体的に暗く撮影される
1画素のモーションブラーの計算: 対象物との距離 / 焦点距離 * 1画素あたりの大きさ 1
ライトフィールドカメラ: 被写体からの光線を、三次元的な情報も含めて記録するカメラ。イメージセンサーの前面にマイクロレンズアレイを配し、光線の明暗だけでなく、光線の入射方向に関する情報を記録する。
ダイナミックレンジ: 観測可能な最大、最小明るさの比によって定義
ノイズのない画像の推定:事後確率の最大化がある。事後確率は尤度と事前確率の積に比例する。
残差逐次検定(SSDA)法: 相違度の加算の途中で残差がしきい値を超えたら加算を打ち切ることで、全体の計算量を減らしている。
ワールド座標系X = Z / f(焦点距離) * u
基本行列E = D(歪対称行列)* R(回転行列)。Dからはカメラの相対的な平行移動ベクトルがわかる。
ネガポジ変換でエントロピーは変化しない
著作隣接権: 著作物の創作者ではないが、著作物の伝達に重要な役割を果たしている実演家、レコード製作者、放送事業者、有線放送事業者に認められた権利
ガンマ補正:ガンマ分の1乗のガンマが1より小さい時は暗くなり、大きい時は明るくなる
リギング:周波数領域において、不連続にフィルタリングを行うとエッジに対して波打つような濃淡の繰り返しが発生する
ウィーナフィルタ:復元画像と原画像の誤差が最小になるように定義されたフィルタ
オープニング:背景のノイズを除去
クロージング:画像内のノイズを除去
細線化では以下の条件を満たしているときに白画素にする
注目画素が境界上にある黒画素
白画素に変更しても連結性が保持
線分の端点でない
ミーンシフト:近傍の点群の平均位置に移動を繰り返して、極大点を求める方法
スネーク:閉曲線が縮んでエッジの境界に張り付くことにより対象物の領域を抽出する方法
JPEGの圧縮率を高くした時:隣り合うブロックの境界が目立つブロック歪みが生じる。また、はっきりとした輪郭の周りにモスキートノイズも現れる。
モスキートノイズ:デジタル画像圧縮画像(特にJPEG静止画およびMPEG動画)において輪郭部分や色の変化の激しい部分で起こる画像の乱れ
オーレンネイヤーモデル:拡散反射モデル。
フォンモデル:鏡面反射モデル。物理的に正確なモデルでない。
トランススパロウモデル:鏡面反射モデル。物理的に正確性を求めたモデル。
所感
画像処理、幅が広いので大変だぁ。。。光や色の特性や座標変換、フィルターや著作権などなど、、、
一歩ずつ!!!
Linuxのお勉強(2)
- やりたいこと
- 教科書
- システムファイルを見つける、適切な位置にファイルを配置する
- ハードリンクとシンボリックリンクを作成・変更する
- ファイルのパーミッションと所有者を管理する
- ファイルのパーミッションと所有者を管理する
- ファイルシステムの整合性を保持する
- パーティションとファイルシステムの作成
- viを使って基本的なファイル編集を行う
- プロセスの実行優先度を変更する
- プロセスを生成、監視、終了する
- ストリーム、パイプ、リダイレクトを使う
- 所感
やりたいこと
linuxの構造やコマンドの知識を増やしたい
教科書
システムファイルを見つける、適切な位置にファイルを配置する
特定のディレクトリをupdatedbの情報更新対象外に設定する際はupdatedb.confに設定を記述する。そのまんま。
updatedbコマンドは、locateコマンドやslocateコマンドを使ってファイルの検索をするための情報データベースを最新の状態に保つためのコマンド。
/etc/updatedb.confの内容例
PRUNEFS="sysfs selinuxfs usbdevfs devpts NFS nfs nfs4 afs sfs proc smbfs cifs autofs auto iso9660 udf" PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /net /sfs /selinux /udev /mnt/floppy /media" export PRUNEFS export PRUNEPATHS
PRUNEFS: mountコマンドでマウントする際に指定するファイルシステムの種類
PRUNEPATHS: 具体的なパスの指定
pruneは余分なものを取り除くという意味がある
ハードリンクとシンボリックリンクを作成・変更する
参考: 6.ユーザー管理
ファイルのパーミッションと所有者を管理する
新たに作成されたファイルやディレクトリの所有ユーザーは、作成したユーザーと、そのユーザーのプライマリグループに設定される
プライマリグループとは、ユーザが何らかのコマンドを実行する際にグループ権限として参照される一番優先順位の高いグループのこと
"ファイルの所有ユーザーを変更できる"のは、rootユーザーのみ
"ファイルの所有グループを変更できる"のは、rootユーザー or そのファイルを所有しているユーザー
Q: 作成したファイルを他のユーザーにもアクセスさせたいときはどうするの?
A: 所有グループを変更し、適切なパーミッションを与える
例:fileファイルをotherグループに対して読み書き可能にする
$ touch file fileファイルを作成 $ chgrp other file fileの所有グループをotherに設定 $ chmod g+rw file fileのグループパーミッションをrwに設定
参考: 104.5 ファイルのパーミッションと所有者を管理する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC
ファイルのパーミッションと所有者を管理する
umaskの考え方は、すべてのパーミッションが読み書き可能な状態から、umaskの値を引いた値が設定される
設定値は所有者、グループ、その他の順にそれぞれ0から7の整数で表わされる
ファイル:666がデフォルト
ディレクトリ:777がデフォルト
例:
○ファイルの場合
666 (rw-rw-rw-) -002 (-------w-) ----------------- 664 (rw-rw-r--)
○ディレクトリの場合
777 (rwxrwxrwx) -002 (-------w-) ----------------- 775 (rwxrwxr-x)
参考: 104.5 ファイルのパーミッションと所有者を管理する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC
ファイルシステムの整合性を保持する
iノードの仕組みは、実際にファイルのデータを保管しているデータ領域とは別に、iノード情報を保管するiノード領域が確保されている
iノード領域の使用状況は、dfコマンドに-iオプションをつけることで確認できる
例)データ領域の使用状況
$ df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/hda2 19656572 14523320 4134752 78% / none 262240 0 262240 0% /dev/shm
例)iノード領域の使用状況
$ df -i Filesystem Iノード I使用 I残り I使用% マウント位置 /dev/hda2 2496960 333530 2163430 14% / none 65560 1 65559 1% /dev/shm
例)2KB毎にiノードを割り当てる
mke2fs -i 2048 /dev/hda2
割り当てられるブロックサイズよりも小さいファイルが大量に作成されるような場合には、iノード割当量を変更を検討すべき
参考: 104.2 ファイルシステムの整合性を保持する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC
パーティションとファイルシステムの作成
ファイルシステムのジャーナリング機能とは: 突然の電源断など正常なシャットダウン処理が行えなかった際の、再起動時のファイルシステムチェックを効率よく行う仕組み
具体的には、実際の書き込みを行う前にジャーナルに記録を行い、もし異常終了が起きた場合は、ジャーナルの情報に基づいて壊れている可能性がある部分だけをチェックして修復する
ext3ファイルシステム: 、ext2にジャーナリング機能を追加したもの. 相互に互換性があるため、比較的使用しやすい.
ReiserFS: Hans Reiserによって作成された、古典的なB-ツリーアルゴリズムの変種を使ったファイルシステム.ジャーナリング機能が最大の特徴.
XFS: データベース技術を応用したジャーナリングファイルシステムを用いてファイルシステム内の変更履歴を保存し、ファイルシステムが破損した場合に高速に修復できるという特徴. また、64ビットファイルシステムを採用し、最大1800TB(テラバイト)のディスクスペース、最大900TBのファイルも扱うことができる.
参考:
viを使って基本的なファイル編集を行う
Q: テキストファイルの最終行にカーソル移動させるコマンドは?
A: G
Go ToのG
10Gと指定すれば10行目へ移動する
参考: viエディタの使い方
プロセスの実行優先度を変更する
Linuxは、複数のプロセスを同時に並行して動作させるマルチプロセスのOS
ある時点で動作しているプロセスは1つだけで時間を区切って順番にプロセスを切り替えて実行することで、見かけ上複数が同時並行で動作しているように見せている
nice値は、重要度はそれほど高くないプロセスには低い優先順位をつけて、他のプロセスの実行を邪魔をしないようにしたりすることで、円滑なプロセス実行を可能にする仕組み
nice値は、-20(最高優先)から19(最低優先)までの40段階に分かれており、基本的にデフォルトは中間の0に設定
reniceコマンドは、実行中のプロセスのnice値を変更できる
例: PID 2742のnice値を10に変更
renice 10 2742
参考: 103.6 プロセスの実行優先度を変更する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC
プロセスを生成、監視、終了する
プロセスには、以下の2種類に大きく分けられる↓
システム起動時に実行されたり、システム管理者が起動したプロセス
システムを利用しているユーザーが実行しているプロセス
ジョブ: 中断されているプロセスや、バックグラウンドで実行されているプロセスのこと.
jobsコマンドを実行することでどのようなジョブが実行されているかを確認することができる
ストリーム、パイプ、リダイレクトを使う
標準入出力には番号がついており、番号指定でストリームを制御することができる↓
0 標準入力
1 標準出力
2 標準エラー出力
例1: 標準エラー出力をファイルに保存したい場合
command 2> error.txt
例2: 標準出力と標準エラー出力を、別々のファイルに出力する場合
command > file.txt 2> error.txt
例3: 標準出力と標準エラー出力を同じファイルに出力する場合
command 1> file.txt 2>&1
&を使って標準出力に標準エラー出力を混ぜる
参考: 103.4 ストリーム、パイプ、リダイレクトを使う|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC
所感
まだまだLinuxシステムについての理解が足りない。。。
一歩ずつ !
動画像処理のお勉強(12)
やりたいこと
動画像処理について学ぶ
教科書
目次
差分画像
二枚の画像において、同じ位置に画素値の差の絶対値を画像とする
参考:2枚の画像のdiff(差分)を超簡単に調べる方法 - 昼メシ物語
背景差分法
参考: 研究開発:前景と背景の分離技術 - livedoor Blog(ブログ)
フレーム間差分法
移動物体を撮影した異なる時間の3枚の画像を用いて、移動物体領域を取り出す
統計的背景差分法
画素値の定常的な変動を考慮して移動物体を検出する方法
オプティカルフロー
異なる時間に取られた二枚の画像を用いて、静止カメラで撮影した移動物体の解析ができる。
異なる時間に撮影された二枚の画像間での対象の移動量をベクトルデータとして表現したものをオプティカルフローと呼ぶ
ブロックマッチング法
テンプレートマッチングを用いてオプティカルフローを求める方法
勾配法
連蔵する二枚の画像での対象物体の移動量が微小であることを前提にオプティカルフローを求める方法
この前提により、オプティカルフローの拘束条件式が求められ、この未知数である2つのベクトルを求める方法を以下に示す
Lucas-Kanade法(LK法)
Horn-Shunck法
オプティカルフローの空間的滑らかさを拘束条件として、エネルギー関数を導出し、それを最小にするベクトルを計算する
参考: OpenCVでとらえる画像の躍動、Optical Flow
移動体追跡
参考: [http://www.vision.cs.chubu.ac.jp/features/pdf/seminar/100326%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E8%B3%87%E6%96%99%E7%89%A9%E4%BD%93%E8%BF%BD%E8%B7%A1.pdf]
テンプレートマッチングによる追跡
テンプレートマッチングを、前の時刻における移動体の位置周辺だけを行えば良い
探索範囲の広さや位置を設定する良い方法論がないのが課題。
KLTトラッカー
LK法を用いた特徴点ベースの追跡法
参考:
ミーンシフトトラッキング
ミーンシフトによる追跡は類似度極大点に向かって、局所的に探索する方法
重なり領域が存在しない場合、追跡できなくなる
参考:
ベイジアンフィルタ
時刻tまでに観測された時系列画像から移動体の状態を推定する方法
前述の2つと異なり、ある位置にある確率と別の位置に物体がある確率と言った具合に、物体の状態に関する仮設を複数保持しながら追跡が可能。
参考:
カルマンフィルタ
ベイジアンフィルタにおいて、線形・ガウス型の状態空間モデルにのみ適応可能な最適フィルタ
参考:
パーティクルフィルタ
パーティクルと呼ばれる離散的なサンプルを状態空間にばらまき、モンテカルロ法により、ベイジアンフィルタを近似計算する方法
参考: コンピュータビジョン特論 第8回対象追跡 2006年11月22日 加藤丈和. - ppt download
↓めちゃくちゃわかりやすい!!!
www.slideshare.net
その他同画像処理
カット検出
撮影場面が大きく変化する部分をカットという
画像を長方形領域に区分し、長方形領域ごとの画素値の平均値を求めその差の絶対値を用いてカットの判定を行う。
カメラモーション推定
背景の動きをオプティカルフローで求め、その動きからカメラの動きを求めることができる。
時空間画像処理
時空間画像とは画像を時間方向に重ねた三次元データ
Bazel事始め
やりたいこと
c++のビルドを簡単に行いたい
Bazelとは
Bazel install
教科書(cpp-tutorial)
Code
構成
. ├── README.md ├── WORKSPACE ├── lib │ ├── BUILD │ ├── hello-name.cc │ └── hello-name.h └── main ├── BUILD ├── hello-get-name.cc ├── hello-get-name.h └── hello-robots.cc
直下に空のWORKSPACEを作る
ディレクトリがわかれる場合はそれぞれにBUILDを設置
BUILDの書き方
libの方
cc_library( name = "hello-name", srcs = ["hello-name.cc"], hdrs = ["hello-name.h"], visibility = ["//main:__pkg__"], )
visibilityを書くことでmainの方から見えるように。
mainの方
cc_library( name = "hello-get-name", srcs = ["hello-get-name.cc"], hdrs = ["hello-get-name.h"], ) cc_binary( name = "hello-robots", srcs = ["hello-robots.cc"], deps = [ ":hello-get-name", "//lib:hello-name", ], )
depsにcc_binaryで使いたいlibraryのnameを記入する。
How to build and use
bazel build //main:hello-robots
bazel-bin/main/hello-robots
詳しくはgit参照。
コメント
ちゃっかりGitHubでびゅー笑
パターン認識のお勉強(11)
参考: 2014/5/29 東大相澤山崎研勉強会:パターン認識とニューラルネットワーク,Deep Learningまで
やりたいこと
パターン認識について学ぶ
教科書
目次
- やりたいこと
- 教科書
- 目次
- プロトタイプ法による識別
- クラスの分布を考慮した識別
- NN法とkNN法
- kd-tree法
- ハッシングによる近似最近傍探索
- アダブースト
- ハードマージンSVM(サポートベクターマシン)
- ソフトマージンSVM
- カーネルトリック
- 1対他分類器による多クラス識別
- ニューラルネットワーク
- 深層学習
- ランダムフォレスト
- 階層的クラスタリング
- k-means法
- 主成分分析
- 線形判別分析
- 部分空間法
- 顔検出と顔識別
- 人検出
- 画像検索
- 人体姿勢推定
- 所感
プロトタイプ法による識別
特徴空間においてテスト画像から各クラスのプロトタイプまでのユークリッド距離を測り、最も近いクラスにテスト画像を識別する。
参考: 「わかりやすいパターン認識」 第1章:パターン認識とは - ppt download
クラスの分布を考慮した識別
参考:
NN法とkNN法
参考:
kd-tree法
バックトラック: survey/kdtree.md at master · komi2/survey · GitHub
参考: Scalable nearest neighbor algorithms for high dimensional data
ハッシングによる近似最近傍探索
参考: 情報システム基盤学 基礎1 アルゴリズムとデータ構造 - ppt download
アダブースト
複数の識別器を組み合わせて一つの強力な識別器を学習するアンサンブル学習の一つ
参考:
リアルアダブースト
ハードマージンSVM(サポートベクターマシン)
参考:
ソフトマージンSVM
参考:
カーネルトリック
高次に写像しながらも、写像の計算を避けるテクニックをカーネルトリックと呼ぶ。
よく使用されるカーネル関数
参考:
1対他分類器による多クラス識別
ニューラルネットワーク
深層学習
ランダムフォレスト
学習サンプルをランダムサンプリングにより作成したサブセットごとに決定木を構築し、複数の決定木の結果を統合して識別する。
参考:
階層的クラスタリング
参考: クラスター分析の手法②(階層クラスター分析) | データ分析基礎知識
k-means法
参考:
主成分分析
参考:
線形判別分析
参考:
部分空間法
SELFIC法
主成分分析で低次元化した特徴空間でクラスの近さに基づく識別を行う方法
CLAFIC法
主成分分析を用いて、クラスごとに入力画像群をよく表現する低次元な特徴空間を求め、その特徴空間をパターン学習の結果とみなす方法
参考:
KL展開:
参考:
顔検出と顔識別
顔画像の特徴量:Haar-like特徴量
参考:
顔識別の方法
参考: OpenCVで物体検出器を作成③ LBP特徴【開発会社プロフェッサ】
人検出
人の輪郭形状を捉える勾配方向ヒストグラムをもとにしたHOG特徴量が利用される
画像検索
参考: Visual Wordsを用いた類似画像検索 - 人工知能に関する断創録
人体姿勢推定
参考:
所感
このあたりはSOTAな深層学習手法のほうがはるかに精度は高そう。
実際に構築するときは、計算コストとのトレードオフで適切な手法を選択していきたい。