あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

2018年12月

1. g++
g++ hello.cpp -o hello

2. cmake
cmake_minimum_required(VERSION 2.8)
add_executable(hello hello.cpp)

3. include, lib(g++)
-Iでインクルードパスを指定(例:-I/usr/local/include)
-Lでライブラリパスを指定(例:-L/usr/local/lib)
-lでライブラリファイルを指定(例:-lopencv_core)

-lopencv_coreは、opencv_core.soをライブラリファイルとして指定する。
ライブラリ本体はopencv_core.so.バージョン番号であり、.soファイルは本体へのリンク。

4. pkg-config
ライブラリの探索。
OpenCVやPCLなどの特定のライブラリで利用可能。
pkg-config --cflags opencv
 出力:-I/usr/local/include/opencv -I/usr/local/include
pkg-config --libs opencv
 出力:-L/usr/local/lib -lopencv_calib3d -lopencv_contrib ...

g++ hello.cpp -o hello 'pkg-config --cflags --libs opencv'
 というように利用できる。

5. find_package
cmakeでのライブラリ探索。内部でpkg-configを利用。
find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(hello hello.cpp)
target_link_libraries(hello ${OpenCV_LIBS})

6. make install
Makefileの中にinstallに対する処理が書かれている。
実態はincludeやlibファイルのコピー。

・1章 はじめに
次元の呪い
 d次元単位超立方体の頂点までの距離は√dなので、
 次元数が大きくなると空間の大きさが飛躍的に大きくなる。

・2章 識別規則と学習法の概要
学習/テストデータの作り方
 ホールドアウト法
  データを学習データとテストデータに分割
 クロスバリデーション法
  データをm個のグループに分割し、そのうちの1つをテストデータにする。これを繰り返す。
 ブートストラップ法
  復元抽出でバイアスを推測する
  bias = ε(N*, N*) - ε(N*, N)
  ε = ε(N, N) - mean(bias)
バイアス・分散トレードオフ
 分散が大きい=overfitting

・3章 ベイズの識別規則
ベイズの定理
 P(Ci|x) = p(x|Ci) / p(x) * P(Ci)
 事後確率 = クラス条件付き確率 / 周辺確率 * 事前確率 = 修正項 * 事前確率
ROC曲線
 横軸が偽陽性率、縦軸が真陽性率。
 偽陽性率:本来は偽のものを真と推定してしまう確率。
 真陽性率:真のもののうち真と推定できた確率。
 事前確率や損失を基に等損失直線とROC曲線の接点(最適動作点)を求めることができる。
その他性能評価値
 precision(適合率):真と推定したもののうち、実際に真である確率。
 recall(再現率):真陽性率。これを高くするしようとすると、false positiveが増える。
 F値:precisionとrecallの調和平均。

・4章 確率モデルと識別関数
共分散行列:各次元の組み合わせについての共分散を要素とする行列
無相関化
 共分散行列を対角化するような線形変換を施す。
 このような線形変換は共分散行列の固有ベクトルを並べたベクトルである。
マハラノビス距離:分布の広がり方を考慮に入れた距離
正規分布の識別関数
 クラス条件付き確率が正規分布だと仮定し、ベイズの定理より、事後確率を求める。
 識別境界として、事後確率が等しくなる点の軌跡を算出すると二次曲面となる。
 ただし、2クラスの共分散行列が等しい場合、線形識別関数となる。

・5章 k最近傍法
ボロノイ境界:2つのデータを結んだ直線の中心を通り、直交する超平面
kNN法:最近傍のtemplateをk個取得し、もっとも多く所属するクラスに識別する

・6章 線形識別関数
最大識別関数法:K個の線形識別関数を用意し、関数値が最大のクラスを識別クラスにする
正規方程式
 データの識別関数値と教師データの差の二乗和(t-Xw)'(t-Xw)=t't-2t'Xw+w'X'Xwを考える
 これをwで微分すると-2X't+2XTXw=0となり、w=(X'X)^-1X'tとなる。
フィッシャーの基準(線形判別分析)
 クラス内変動が小さく、クラス間変動が大きくなるようなパラメータwを求める
 w∝Sw^-1(μ1-μ2) ただし、Sw=S1+S2。Sk^2=Σ(yi-mk)^2。mk=w'μk
判別分析法
 クラス間分散/クラス内分散を最大化する。大津の方法は判別分析法の応用。
ロジスティック回帰
 線形識別関数の一種で目的変数が2値のときの認識法
 ベイズの定理における事後確率はもともとシグモイド関数の性質を持っている。
 シグモイド関数のaの部分を近似するようなwx+w0のwを求める。
 目的変数が2値なので、その確率はベルヌーイ試行で表せる。
 多クラスの場合はシグモイド関数ではなく、ソフトマックス関数を用いる。

・ステレオマッチング
三角測量
B : L = B+S : L+f
L = Bf / S

・光切断法
光切断法

・ステレオマッチングと光切断法の関係
L = Bf / S
L = Bf / (s1 + s2)
L = Bf / (f/tanα + f/tanβ)
L = B / (cosα/sinα + cosβ/sinβ)
L = B / (sinα*cosβ + cosα*sinβ / sinα*sinβ)
L = B*sinα*sinβ / sin(α+β)

・距離測定方式比較
- Stereo Camera(パッシブステレオ)
ZED
- Structured Light Coding(アクティブステレオ)
Kinect V1, SR300, Xtion1, Structure Sensor(Occipital), Photoneo
- Unstructured Light + Stereo Camera
赤外線などでパターンを投影し、パッシブステレオと同様にステレオマッチング
D435, Ensenso
- ToF
赤外線などを投光し、帰ってくるまでの時間から距離を計測
Kinect V2, Xtion2
- スキャンラインセンサ(光切断法)

・まず適切なネットワークサイズを見極める。
 - そのために複数のGPUを使い、異なるネットワークで学習を平行実行する。
・サチり始めてから過学習が始まるまではかなり時間がかかり、結果もそこまで良くならない。
・学習データが多いとAugmentationの効果が薄く、学習時間が長くなるだけな場合もある。

・ロボットとは
フランケンシュタイン、ファウスト、未来のイブに人造人間が登場。
カレルチャペックの「R.U.R.」に「ロボット」という言葉が登場。
アシモフの「われはロボット」にロボット三原則が登場。

・二足歩行ロボット
1973年:WABOT-1(早稲田大)
1996年:P2(ホンダ)
2000年:ASIMO(ホンダ)
HRP(産総研)、QRIO(ソニー)

・その他ロボット
CONCERO(トヨタ):愛知万博ロボットバンド
wakamaru(三菱重工)

・バッテリ
一次電池:充電できない。乾電池など。
二次電池:充電できる。
 ニッカド:よく使われている。
 ニッケル水素:大容量、小型軽量だが、大電流に向かず高価。
 リチウムイオン:エネルギー密度、出力が高く、小型軽量だが、過充電に弱く安全対策が必要。
 リチウムポリマー、燃料電池:これから

・機構
カム:回転運動→直線運動など、運動の方向を変える
クローラ:キャタピラ(登録商標)

・二足歩行
静歩行:重心が常に身体の中心にくるように着実に進む
動歩行:慣性を考慮しながらバランスをとって進む。ZMP理論など。
走行:両足が浮く瞬間がある歩行

・設計のための知識
応力:単位断面積当たりの内力。荷重を受けたときの物体内部の抵抗力。
せん断:(上下から押して)切断する
バックラッシ:歯車間の隙間。誤差を吸収するために必要だが、大きくなるとがたつきが生じる。
プーリ:滑車。ベルトで回転動力を伝える。
ベアリング:軸受。内輪と外輪があり、内輪の間の軸が回転する時の摩擦を軽減する。
ボルト・ナット:ねじの一種。締めるための工具が(六角)レンチ。
加工方法:板金、切削(削る)、成型(プラスチック)

・FTA(Fault Tree Analysis)
故障が生じるには何が必要かを演繹的に考える分析手法。

↑このページのトップヘ