gazou-compressor.jp

軽量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

7. まとめ

蒸留による軽量VMAFは CIパイプライン へ統合することで、重い回帰検知を高速化し改善サイクルを短縮します。

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事

トピック/更新日の近いコンテンツ