概要
Q.84〜87では、画像を色ヒストグラムの特徴ベクトルへ変換し、距離にもとづくクラス分類、 Accuracyによる評価、k-NNへ発展させます。
色ヒストグラムを特徴量にする(Q.84)
RGB各チャンネルを4階調へ減色し、チャンネルごとに4ビンのヒストグラムを作ります。 画像1枚は合計12次元のベクトルになります。
[R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3]
画素をそのまま比較する場合と異なり、画像内で物体の位置が少し変わっても色の分布が近ければ 似た特徴になります。一方、空間的な配置は失われます。
最近傍のクラスを選ぶ(Q.85)
テスト画像と各学習画像の特徴ベクトル間で距離を計算し、最も近い学習画像のラベルを予測値に します。
const distance = Math.sqrt(
feature.reduce((sum, value, i) => sum + (value - train[i]) ** 2, 0),
);
Accuracyで評価する(Q.86)
予測ラベルと正解ラベルを比較し、正解数をテスト画像数で割ります。分類器を作るだけでなく、 同じデータと指標で変更前後を比べられるようにします。
k-NNへ拡張する(Q.87)
最も近い1件だけでなく、距離が近いk件のラベルで多数決します。1つの学習画像のノイズや
外れ値に予測が左右されにくくなります。同数の場合の規則やkの選び方も結果へ影響します。
特徴量を比較可能にする
画像サイズや前景面積が異なるとヒストグラムの総和も変わります。画素数で割って確率分布へ 正規化すると、大きさではなく分布の形を比較できます。各次元の尺度が異なる特徴量を追加する場合は、 標準化しないと数値範囲の大きい次元だけが距離を支配します。
ユークリッド距離は実装しやすい一方、ヒストグラムにはL1距離、カイ二乗距離、コサイン類似度なども 使われます。同じ学習・テスト分割で指標を交換し、Accuracyだけでなく混同行列も確認すると、 どのクラス同士を誤りやすいかが分かります。
kの選択とデータ分割
小さいkは局所的な形を捉えますがノイズに敏感で、大きいkは滑らかになる代わりに少数クラスを
見落としやすくなります。kはテストデータで直接選ばず、学習データ内の検証用データや交差検証で
決めます。
同じ元画像から切り出した類似画像が学習側とテスト側へ分かれると、未知画像への性能より高く 見積もられます。データ拡張前の画像単位で分割することが、実装上の重要な注意点です。
まとめ
この4問で、前処理、特徴抽出、距離計算、予測、評価という画像認識の最小構成を確認できます。 後続のk-meansでは正解ラベルを使わず、特徴ベクトル同士の距離からグループを作ります。