Research 0113: FR-from-NR CUDA Feature Split¶
Research-0113¶
Summary¶
Local CHUG FULL_FEATURES extraction used ai/scripts/extract_k150k_features.py with core/build-cuda/tools/vmaf --backend cuda. The all-feature bundle failed on 10-bit CHUG clips with duplicate feature-key warnings and context could not be synchronized.
Direct repro on a decoded CHUG clip showed:
- the MP4 decode and raw YUV size were valid;
- explicit CUDA extractor names worked for
adm_cuda,vif_cuda,motion_cuda,motion_v2_cuda,psnr_cuda,ciede_cuda,float_ms_ssim_cuda,psnr_hvs_cuda, andssimulacra2_cuda; float_ssim_cudafailed independently on the repro clip;cambi_cudawas not loadable by feature name on the local binary;- CPU
float_ssimand CPUcambiworked on the same YUV.
Decision Input¶
The stable local routing is therefore:
- CUDA pass with explicit CUDA feature names for the working CUDA set.
- CPU residual pass for
float_ssimandcambi. - Merge per-frame metrics before existing aggregation.
This keeps the 22-feature parquet schema stable and avoids retrying a known bad generic --backend cuda command.
Smoke¶
PYTHONPATH=ai/src .venv/bin/python ai/scripts/extract_k150k_features.py \
--clips-dir .workingdir2/chug/clips \
--scores .workingdir2/chug/chug_scores.csv \
--vmaf-bin core/build-cuda/tools/vmaf \
--cpu-vmaf-bin build-cpu/tools/vmaf \
--out .workingdir2/chug/debug/split_real.parquet \
--threads 2 --threads-cuda 1 --flush-every 1 \
--scratch-dir .workingdir2/chug/debug/split_real_scratch \
--limit 1
Result: ok=1 fail=0 on the same local CHUG path that previously failed.