CCTV映像の年齢推定で「データを足すほど精度が落ちる」現象
解決したいこと
コンピュータビジョンの実務・研究に詳しい方にぜひご意見いただきたいです。
以前投稿した人物追跡パイプラインに続き、現在、小売店舗の既設天井カメラ(俯瞰)映像から来店客の属性(性別・年代・顧客/店員)を推定する機能を追加開発しています。
性別および顧客/店員判別については同一モデル構成で正解率94.6%に達し実用レベルになったのですが、「年代(5区分)」の推定において、自社ドメインの学習データを追加すればするほど精度が低下するという深刻な問題に直面しています。
数週間の検証によって「評価データと学習データの両方が共有していた Systematic なラベルバイアス」が主因だと突き止めることができたのですが、この先の評価・改善策について実務でのベストプラクティスを伺いたいです。
タスク設定と現在の構成
- 入力ドメイン: 小売店舗の天井設置CCTV映像(俯瞰)。人物検出→追跡→顔・全身クロップを抽出。
-
解像度制約: 抽出される顔クロップの中央値は
55〜75pxと極めて低解像度です。 -
ベースモデル:
MiVOLO v2(顔+全身のデュアル入力ViT、連続年齢のスカラー回帰モデル)を自店舗データでフルファインチューニング(MSE損失+性別CE補助)。 -
ターゲット: 本来の7年齢帯ラベルから代表年齢
[7, 18, 22, 30, 38, 50, 65]に変換して回帰学習させ、推論時は10歳刻みの年代に出力。 - 主要評価指標: 5区分 Exact-match(〜10代 / 20代 / 30代 / 40代 / 50代以上)。
直面している課題:データを追加するほど精度が下がる
私たちが目指しているのは、「イン・ドメインの学習データを継続的に追加していくことで、汎化性能と精度が漸進的に向上する」状態を作ることです。
しかし現状は真逆で、初期学習データ(バッチ1-3:1.6万クロップ)のみで学習した現行最良モデルは主要評価セットAで Exact 72% を出しているにもかかわらず、データを追加(バッチ4-6:1万クロップ)すると、どのようなバランス調整を行っても 61〜65% へ悪化してしまいます。
これまで試したこと(排除した仮説)
「なぜデータ増強で悪化するのか」を解明するため、同一レシピ・条件で以下の対照実験を行いましたが、いずれも解決には至りませんでした。
| 仮説・アプローチ | 検証内容 | 結果・わかったこと |
|---|---|---|
| ラベル細分化 | 10歳刻み、5歳刻みで再アノテーション | 効果なし(低解像度では細かいラベルの判定精度が付いてこない) |
| 損失関数の変更 | MSE回帰 / Softmax分類 / CORAL(順序回帰)の比較 | すべてスコア差なし(同一結果) |
| データ拡張(Augmentation) | 水平反転やColor Jitterの強化 | スコア悪化(低解像度の微細な年齢情報が壊れる) |
| 分布調整(リサンプリング) | 学習分布を評価分布に完全合致させる | 若干回復するが天井で頭打ち。基準モデルを超える改善なし |
| 別アーキテクチャの検証 | 凍結 SigLIP2(顔+全身埋め込み)+MLプローブ |
年齢精度42%と惨敗。汎用視覚特徴だけでは低解像度CCTVの年齢情報は捉えられない |
直近の検証結果:原因特定と「新たな兆し」
徹底的な見直しにより、以下の2つの重大な事実が判明しました。
1. ラベルの全数見直しによる「若見えバイアス」の発覚
学習ラベル全数(1,663人)を再確認したところ、見た目年齢が系統的に「約1クラス若く」付けられている傾向が発覚しました(修正の約9割が歳上方向)。
しかし、正しい年齢に修正したラベルで学習させると、従来の評価セットでの精度が45%まで暴落しました。
原因は、評価正解データ(GT)側も同様に「若見えバイアス」を共有していたことでした。バイアスを持った定規(評価GT)に対しては、同じバイアスを過学習した旧モデルが高スコアを獲得するというパラドックスが起きていました。
2. 新・拡大統合評価セットにおける「単調改善」の初観測☆
従来の「72%」自体が特定の評価セットに過剰適合していたと結論づけ、評価基準を完全に統一した拡大評価セット(447名統合版)を新設して全モデルを再評価しました。
| 学習モデル構成(すべて修正ラベル系) | 5区分 Exact | Macro Recall | 備考 |
|---|---|---|---|
| バッチ1-3のみ(基準) | 44.2% | 37.1% | 新評価セットでのベーススコア |
| +バッチ4を追加 | 48.7% ↗ | 40.3% ↗ | 追加で単調に改善 |
| +バッチ5を追加 | 50.0% ↗ | 41.7% ↗ | 追加で単調に改善 |
| バッチ1-6(分布を維持して全追加) | 52.3% ↗ | 41.3% ↗ | 初めてデータを足すほど改善を観測! |
バイアスを排除して正しい評価軸を整えたことで、「学習データを足せば足すほど精度が向上する」という本来あるべき挙動を初めて観測することができました。
ご意見を伺いたいこと
単調改善のレールに乗せることはできたものの、現行の Exact 52.3% という数字をさらに実用的な水準へ押し上げる必要があります。実務で同様の課題・タスクに携わられている方がいらっしゃいましたら、以下についてご助言いただけないでしょうか。
-
低解像度映像における実用的上限(シーリング)と打ち手
顔クロップ中央値が55〜75px程度の低解像度CCTV映像において、5区分 Exact や MAE の現実的な上限精度はどの程度だと見立てるべきでしょうか?また、解像度制約がある中で年齢推定を引き上げるための王道テクニック(時系列フレームの集約方法や特徴設計など)があれば伺いたいです。 -
見た目年齢の主観バイアス・ノイズ対策
実際の年齢と、カメラ映像の「見た目の年齢」に乖離が生まれやすいタスクにおいて、アノテーション工程の運用以外に、損失関数側(不確実性を考慮したSoft labelsやラベルスムージング等)で有効だった実務プラクティスはありますでしょうか?
些細なアドバイスやご経験談でも構いませんので、よろしくお願いいたします!