OpenCVにおける機械学習の基本

★ この記事では、Opencvにおける機械学習の基本について分かりやすく説明
  することを目標としてます。随時更新します。

◎ 機械学習の目標

☆機械学習の目標は、生のデータを情報に変換することです。
目の前に広がる空間を、機械にわかるようにしてあげるのです。
具体的には、「生のデータからルールやパターンを抽出することで、データを情報に変換するということ」なのです。
例えば

  • 今年の集計したデータに似ている年はあるか?
  • 画像内に人物はいるか?
  • 20代の男性はコンビニでどのようなものを購入するか?

といったものがあります。
これらの例の解を求めるために、以下のような点を理解する必要があります。

  • 学習の種類
  • 画像データセット
  • 機械学習アルゴリズム

◎ 学習の種類

☆機械学習には、主に入寮区された画像を前処理によって特徴量に変換し、その変換したデータを機械学習のテクニックを使用して学習していきます。
学習には、

  • 教師あり学習
  • 教師なし学習

また、教師あり学習には

  • 分類
  • 回帰

があります。
また、具体的には、

  • 強化学習 = 繰り延べ学習

があります。

強化学習は、個々のデータベクトルが観測されたずっと後になってから、データラベル(=報酬=ペナルティ)が生じることがあります。

教師なし学習には、具体的には、

  • クラスタリング

があります。

クラスタリングされた教師なしデータは、高レベルの教師あり分類器のための特徴ベクトルを形成するのにも使用されます。
機械学習における分類とクラスタリングは、コンピュータビジョンにおける、認識と領域分割(セグメンテーション)とも重なります。


学習とは、
収集された画像から「特徴量を抽出」「解析」「重み付け」「閾値」「その他パラメータ」を調整して、その目的に合わせて性能を最大化するプロセスのことをいいます。

◎ 画像セット

☆機械学習の手法がどれだけうまく機能しているかを知ることは、常に重要です。このために、まず画像セットについて学ぶ必要があります。
まず、言葉の定義ですが

訓練セット:元データから学習に使用した画像

検証セット:元データから検証に使用した画像

テストセット:訓練セットと検証セット以外の画像

訓練セットを使用理して学習した後に、テストセットを使用して、テストを行います。
学習の仕方は、たくさんありますが、あとで詳細に説明します。
学習により生成された分類器がうまく機能すれば、以前に見たことのないものを見ても、訓練セットを使用して学習したことに従い、適切に分類できるはずです。

これらを具体的に説明すると、10000枚の画像が手元にあった場合、8000枚を訓練セット、1000枚を検証セット、1000枚をテストセットとします。
更に、訓練をする際には、主に「k分割交差検証」という手法が用いられます。

◎ OpenCVの機械学習アルゴリズム

☆OpenCVの機械学習アルゴリズムは、主に「mlモジュール」、その他は「coreモジュール」、「objdetectモジュール」、「flannモジュール」、「opencv_contribモジュール」にあります。

  • Mahalanobis
  • K-means法
  • 単純ベイズ分類器
  • 決定木
  • 期待値最大化
  • ブースティング
  • ランダムツリー
  • K近傍法
  • 近似高速最近傍探索法
  • SVM
  • カスケード分類器
  • WaldBoost
  • Latent SVM
  • Bag of Word

○ ブースティング

○ ランダムツリー

○ SVM

◎ 変数の重要度(p.748)

☆特徴量ベクトルを取得したら、分類の精度をあげるために、どのようにそれらの特徴量の重要度を決定すれば良いでしょう。
どの変数を調整するか、これはエンジニアの腕の見せ所です。
特徴量の重要度から、分類器が考慮しなければならない、特徴量の数を減らすことによって、実行速度をあげることができます。

◎ データ型

○ cv::TermCriteria(終了基準クラス)

☆cv::TermCriteriaは、終了基準を反復回数(COUNTまたは、MAX_ITER)とエラーパラメータ(EPS)の形式をとり、ある時点で終了させることができるのです。

cv::TermCriteriaは、以下の3つの変数をもっています。

  • type
  • maxcount
  • epsilon

これらの変数は直接設定(public)することもできますし、コンストラクタで設定することも可能です。

type

以下のどちらか、または両方を設定することができます。

  • cv::TermCriteria::COUNT = cv::TermCriteria::MAX_ITER
  • cv::TermCriteria::EPS

cv::TermCriteria::COUNTを設定すると、maxcount回繰り返したら終了するように指示します。

cv::TermCriteria::EPSを設定すると、収束に関係のある値がepsilon未満になったら、終了するように指示します。

>画像という分野

画像という分野

画像に関連することを網羅していきます。

ぜひお時間がある方はのぞいてみてください。

CTR IMG