軽量VMAF近似モデルDistillation:SSIM/局所特徴で 10x 高速推定
VMAFは高精度ですが CI全フレーム に適用するには重すぎることがあります。低コスト特徴量 + 蒸留 (Distillation) で “CI向け充分精度” の高速近似モデルを構築します。
蒸留パイプライン
- 代表データ収集 (コーデック/Q/解像度)
- 本家VMAF計測 (教師)
- 軽量特徴抽出 → 回帰学習
- 逸脱クラスタで再学習
1. 背景
本家VMAFは YUV 変換・多段フィルタ・モデル推論で高コスト。アラート用途では ±2ポイント 許容で10x高速の価値があります。
2. 特徴量設計
# 1. 特徴量抽出 (pseudo)
for frame in video:
g = gradient_mag(frame.luma)
l_var = local_variance(frame.luma)
c_diff = chroma_delta(frame.chroma)
ssim_lite = fast_ssim(frame)
feats.append([g.mean(), g.std(), l_var.mean(), c_diff.mean(), ssim_lite])
3. 蒸留データ生成
# 2. 蒸留データ生成
for sample in dataset:
vmaf = run_vmaf(full_model, sample.ref, sample.dist)
lite = extract_features(sample)
rows.append(lite + [vmaf])
4. 学習 & 評価
# 3. 学習 (Python sklearn例)
X, y = rows[:, :-1], rows[:, -1]
from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(n_estimators=120, max_depth=3)
model.fit(X, y)
joblib.dump(model, 'vmaf_lite.pkl')
5. 推論 & CI
// 4. 推論 (node:onnxruntime/web, 事前変換後例)
const feats = extractFeatures(frame);
const out = await session.run({ input: feats });
const vmafLite = out.output[0];
# 5. CI 回帰検知
node scripts/vmaf-lite-batch.js --ref ref/ --dist dist/ --model vmaf_lite.onnx --out lite.json
node scripts/vmaf-batch.js --ref ref/ --dist dist/ --out full.json
node scripts/vmaf-lite-compare.js full.json lite.json --mae-th 2.5 --max-drift 0.8
6. FAQ
- 動画以外? → 代表静止画セットでも可、PSNR/SSIMと併用
- ドリフト検知? → 月次で full vs lite MAE 指標を時系列グラフ化
7. まとめ
蒸留による軽量VMAFは CIパイプライン へ統合することで、重い回帰検知を高速化し改善サイクルを短縮します。