C++プログラマのブログ

プログラミングについて、勉強したことをまとめます。

【機械学習】Boostingアルゴリズムをつくろう

以前仕事で必要に迫られBoostingアルゴリズムを勉強しました。
せっかくなので記事にまとめます。
ただし、僕は画像処理を大学とかで専門的に習ったわけではありません。
記述に不足や誤りがあれば是非教えてください。

目次

以下のような流れでやろうと思ってます。(努力目標)

概要

簡単のため顔を識別するモデルを学習する場合を考えます。

Boostingは、与えられた画像が顔なのかどうかを判定するモデル(=関数)を機械的に生成するアルゴリズムです。
モデル生成には大量の画像とそれぞれの「顔なのかどうか」の答が必要です。

f:id:red_grape:20170904194136p:plain:w400

上の画像で赤い線がモデル生成のフローです。
黒い線は生成したモデルで入力画像が顔かどうか判定しているフローですね。

生成されるモデルの構造

では、生成されるモデルの構造を見てみましょう。
モデルの構造には主に次の2種類あります。

##### カスケード f:id:red_grape:20170904200153p:plain:w400 ##### 線形結合 f:id:red_grape:20170904202508p:plain:w400

「弱仮説」とは、ある程度の精度で画像を顔か顔でないか判断する関数です。
条件を満たす関数なら何でもOKですが、LBPやHaar-Likeが有名です。
LBPやHaar-Likeについてはあとでやります。
今は大雑把に顔か顔でないか判断する関数なんだと思っておけばOKです。

とりあえず、今日はここまで。
次回はモデルを生成する学習アルゴリズムを見ていきます。
後から構成見直してわかりづらかったら変えるかも。
仕事が暇すぎるので、明日更新するつもりです。