概要
Q.93〜100では、正解矩形の評価、学習データ作成、ニューラルネットワーク、HOG、 スライディングウィンドウ、NMSを組み合わせて簡単な物体検出を完成させます。
IoUと学習データ作成(Q.93、Q.94)
2つの矩形の重なりをIntersection over Unionで表します。
IoU = 共通部分の面積 / 和集合の面積
Q.94では画像から60×60の領域をランダムに200個切り出します。正解矩形とのIoUが0.5以上なら 正例、それ以外を負例とし、各領域からHOG特徴量を作ります。
ニューラルネットワーク(Q.95、Q.96)
Q.95では2つの隠れ層を持つ全結合ネットワークを作り、XORで順伝播と誤差逆伝播を確認します。 Q.96では入力をランダムクロップのHOG特徴量へ替え、顔・非顔の2クラスを学習します。
実装は入力層、隠れ層、出力層の重みとバイアスを配列で持ち、勾配降下法で更新します。 ライブラリへ隠れがちな学習処理を数値計算として追える構成です。
スライディングウィンドウ検出(Q.97、Q.98)
3種類の大きさの窓を画像上で4画素ずつ移動し、各領域を32×32へ縮小してHOGを計算します。 Q.98では特徴量を学習済みネットワークへ入力し、スコア0.7以上の矩形を検出候補にします。
画像
↓ 複数サイズの窓を走査
32×32へリサイズ
↓
HOG特徴量
↓
ニューラルネットワーク
↓
候補矩形とスコア
NMSで重複候補を除く(Q.99)
候補をスコアの高い順に並べます。高スコアの矩形とIoUが0.25以上の低スコア候補を削除し、 同じ物体の周囲に重なって出た複数の枠を1つへ絞ります。
Recall・Precision・F-score・mAP(Q.100)
正解矩形とIoU 0.5以上の検出をTrue Positiveとして評価します。
| 指標 | 見ているもの |
|---|---|
| Recall | 正解物体をどれだけ見つけたか |
| Precision | 検出結果のうち正解がどれだけあるか |
| F-score | RecallとPrecisionの調和平均 |
| AP / mAP | スコア閾値を変えたときのPrecision-Recall全体 |
IoUとNMSを実装する
2つの矩形の交差幅・高さは負にならないよう0でクランプし、IoUを求めます。
intersection = max(0, right - left) × max(0, bottom - top)
union = areaA + areaB - intersection
IoU = union > 0 ? intersection / union : 0
NMSでは候補をスコアの降順に並べ、最高スコアの矩形を採用し、IoUが閾値以上の残り候補を除外する 処理を繰り返します。クラスごとに適用しないと、重なっている別クラスの物体まで消す場合があります。 候補数が多いと矩形比較が二乗で増えるため、低スコア候補を先に除くことも重要です。
学習処理の数値安定性
シグモイドは大きな正負の値で指数計算がオーバーフローしやすいため、入力の符号で式を分けるか
クランプします。Softmaxは最大ロジットを全要素から引いてから指数を取ると安定します。
損失がNaNになった場合は学習率だけでなく、特徴量の正規化、空の学習バッチ、0除算も確認します。
正例と負例の数が大きく違う場合、Accuracyだけでは全件を負例と予測するモデルが良く見えます。 サンプリング比率を記録し、Precision、Recall、PR曲線を合わせて評価します。
評価時の重複カウントを防ぐ
1つの正解矩形へ複数の検出が重なっても、True Positiveは1件だけです。スコア順に検出を処理し、 まだ対応付けられていない正解のうちIoUが最大のものへ1対1で割り当てます。残りの重複検出は False Positiveになります。
このシリーズはHOGと小規模な分類器で検出パイプラインの原理を学ぶ構成です。実運用ではCNN系の 検出器、データセットの偏り、推論速度、モデル更新後の監視まで含めた設計が必要になります。
まとめ
最終8問は、それまでに実装した補間、HOG、距離・評価指標などを組み合わせる総合問題です。 検出器の精度だけでなく、候補生成、重複除去、評価まで含めて物体検出の一連の流れを確認できます。