画像から特徴へ — 生の画素を「使える表現」に変える

前回見たとおり、生の画素値は照明や位置が少し変わるだけで激変する「もろい」表現です。そこで登場するのが特徴(feature) — 画像の本質だけを残したコンパクトな数値表現。深層学習以前のCVを支えた勾配ヒストグラム(HOGの心臓部)の直感を、動かしながらつかみます。

1. 画素の「値」ではなく「変化」を見る — 勾配

照明が変わると画素の値は全部変わります。でも「明るい場所と暗い場所の境目」— つまりエッジの位置と向きは、ほとんど変わりません。そこで各画素で「どの向きにどれだけ明るさが変化しているか」を測ります。これが勾配(gradient)です。

gx ≈ [ I(x+1, y) − I(x−1, y) ] / 2  gy ≈ [ I(x, y+1) − I(x, y−1) ] / 2 左右の画素の差・上下の画素の差。たったこれだけで「変化の向きと強さ」が手に入る
強さ m = √( gx² + gy² )  向き θ = atan2( gy, gx ) m が大きい画素=エッジ。θ を8方向に丸めて集計したものが勾配方向ヒストグラム

さらにパッチ(小さな窓)の中の勾配を8方向のヒストグラムに集計すると、「このパッチには縦のエッジが多い、斜めが少し」という形の要約ができあがります。下のデモで、矢印(各画素の勾配)がヒストグラムに積み上がっていく様子を見てください。

勾配方向ヒストグラム — HOGの直感
左=入力画像とパッチ位置(オレンジ枠)、中央=パッチ内の各画素の勾配(矢印は暗→明の向き、長さ=強さ)、右=それを8方向に集計したヒストグラム。パッチをエッジの上に置くと特定の方向が突出し、平坦な場所ではほぼ空になります。
POINT — ヒストグラムは「位置を忘れる」のがえらい ヒストグラムは「どの向きの勾配がどれだけあったか」だけを数え、「どこにあったか」を捨てる。だからパッチが数画素ずれても要約はほぼ同じ。この「大事なものだけ残して、邪魔な情報をわざと捨てる」のが特徴設計の本質。

2. 対決 — 生画素 vs 勾配ヒストグラム

本当に頑健なのか、対決させてみましょう。同じ画像に「明るさの変化」と「位置ずらし」を加え、生画素ベクトルと勾配ヒストグラムのそれぞれで「元画像との距離」を測ります(どちらも長さ1に正規化して公平に比較)。

特徴の頑健性 — 2本の距離バーの反応の違い
スライダーを動かすと、赤いバー(生画素の距離)は大きく振れるのに、緑のバー(勾配ヒストグラムの距離)はほぼゼロのまま。右上の2つのヒストグラム(青=元、オレンジ=変換後)がほとんど重なっていることが理由です。
注意 — 不変性はタダではない ヒストグラムが位置を「忘れる」ということは、形の細かい配置の情報を失うということでもある。何に対して不変で(照明・位置ずれ)、何に対して敏感であるべきか(形の違い)— このバランス設計こそが特徴エンジニアリングの腕の見せどころだった。

3. 画像が「点」になる — 特徴空間

パッチを特徴ベクトル(ここでは8方向ヒストグラム)に変換すると、1つのパッチは特徴空間の1点になります。うまい特徴なら、似た性質のパッチは近くに、違う性質のパッチは遠くに並ぶはず。エッジ・コーナー・平坦・テクスチャの16パッチで確かめてみましょう。

特徴空間の地図 — 似たパッチは自然に集まる
左のパッチ(または右の点)をクリックすると対応関係が表示されます。横軸=勾配方向の偏り(1方向に集中するほど右)、縦軸=勾配の強さ。座標は本当に各パッチから計算した特徴値で、エッジ・コーナー・平坦・テクスチャがそれぞれクラスタを作ります。
POINT — 「意味の近さ=距離の近さ」になる空間を作る 前回のレッスンで見た「猫より犬が近い」問題は、生画素空間で距離を測ったのが敗因だった。良い特徴空間では意味が似たものどうしが本当に近くなる。CVのあらゆる認識処理は「良い空間へ画像を写す → その空間で単純な幾何(距離・境界線)で判定する」という2段構えでできている。

4. 特徴設計の時代から、特徴学習の時代へ

1999年のSIFT、2005年のHOG — 人間が知恵を絞って設計したこれらの特徴は、パノラマ合成・歩行者検出などを実用レベルに引き上げました。しかし「猫と犬を分ける決定的な特徴は何か?」のような問いには、人手の設計はどうしても追いつきませんでした。

一歩先へ — SIFTとHOGという職人芸 SIFT(Lowe, 1999)は「拡大縮小・回転しても同じ値になる」特徴点記述子で、2枚の画像の対応点探しを一変させた。HOG(Dalal & Triggs, 2005)は今日見た勾配ヒストグラムをブロック正規化つきで並べたもので、SVMと組み合わせた歩行者検出の定番になった。どちらも中身は今日の内容 — 勾配を、正規化しながら、位置をぼかして集計する — の洗練版である。
POINT — 深層学習への橋渡し:「特徴を設計する」から「特徴を学習する」へ CNN(畳み込みニューラルネット)の第1層が学習後に獲得するフィルタを見ると、今日作った勾配検出器とそっくりなものが自動的に現れる。深層学習は特徴設計を不要にしたのではなく、特徴設計そのものをデータにやらせることに成功した — つまり今日の内容は、CNNが「何を学んでいるか」を読み解くための土台になる。

5. まとめ