지난 글에서 VMAF(Video Multimethod Assessment Fusion)에 대해 알아보았습니다. 그리고 2020년에 기존 VMAF의 성능을향상시킨 방법들을 오늘 소개합니다. (해당 글을 참고하였습니다.)
목차
- Speed Optimization
- New libvmaf API
- "No Enhancement Gain” Mode: VMAF NEG
1. Speed Optimization
기존의 VMAF을 사용하는 데 있어서 단점은 VMAF score를 구하는데 time cost가 크다는 것이었습니다. Time cost를 줄이기 위해 다음과 같은 방법을 개발해왔습니다.
- Low-level code optimization and vectorization (2016년): python + C에서 standalone C++로 변경
- 기존 VMAF보다 4배 빨라짐
- Frame-level multi-threading and frame skipping (2018년): 각 frame별로 vmaf를 구할때 multi-threading을 활용하였고 특정 frame을 skip하여 vmaf구하는 방법 사용
- 4k videos를 대상으로 real time으로 VMAF측정 가능
- Floating-point based representation을 fixed-point로 변경 (2020년): 실수를 표현하는 방법이 단순한 방법인 fixed-point를 사용하기 때문에 속도가 빠름 (대신 precision이 floating-point보다는 떨어짐)
- Vectorization on the fixed-point data piepline (2020년): fixed-point data에 대해 vectorization
위의 3,4번 항목을 이용하게 된다면 VMAF 측정하는 속도가 평균적으로 2배정도 빨라집니다. 다만, fixed-point로 계산하기 때문에 VMAF score값은 완전히 정확하지는 않지만 소수점 첫째자리까지는 같다고 합니다.
아래 그림을 통해 Intel AVX2(Advanced Vector Extension 2), Intel AVX-512에서 2018년 기준의 VMAF구하는 방식보다 몇배 빨라졌는지 알 수 있습니다.
2. New libvmaf API
FFMPEG의 license가 Apache 2.0에서 BSD+Patent로 변경되면서 다른 open source project들과 호환이 가능해졌습니다. 그래서 대대적으로 API의 개조하여 libvmaf v2.0.0을 relesae하였습니다. 아래와 같은 API가 새롭게 사용가능해졌습니다.
위 표에 대한 특징은 다음과 같습니다.
- API를 손상시키지 않고 확장가능
- 새로운 feature extractor를 추가하기 쉬워짐 → 미래의 새로운 VMAF 알고리즘을 쉽게 support가능
- Memory 할당이 유연해지고 frame-level에서 점진적으로 VMAF 계산 가능
- 해당 feature는 encoding loop에서 VMAF를 integrate 가능토록 함
3. "No Enhancement Gain” Mode: VMAF NEG
VMAF의 고유 특징 중 하나는 전통적인 방법들(e.g. PSNR, SSIM)과 다르게 image enchancement operations(e.g. sharpen)으로부터의 visual gain을 확인가능하다는 것입니다. Image enchancement operations은 사람에 의해 인식되는 주관적인 품질 향상을 목표로 하는 operations을 뜻합니다.)
예시로 위그램에서 (a)는 원본 image를 encoding하고 VMAF score를 구한것이고 (b), (c)는 enhacnement operations preprocessing을 거친 후 encoding을 한 image이며 그에 대해 VMAF값을 구한것입니다. Enhacnement operations을 통해 visual gain(improvement)가 생겼기 때문에 (A)보다 (B),(C)의 VMAF 값이 더 높게 측정되는 것을 확인가능합니다.
최근에는 libaom library에서 tune=vmaf mode라는 option으로 사용가능한데 이것은 quality-optimized AV1 encoding을 수행합니다. 해당 모드는 BD-rate gain을 가져오면 video compression전에 frame-based image sharpening을 수행합니다. 위 그림에서 해당 모드 사용 유무에 따른 결과 차이를 볼 수 있습니다.
하지만 codec evaulation을 위해 pre-processing동안의 image enhancement으로부터 생긴 visual gain을 제외한 gain만을 측정할 필요가 종종 있습니다. 위 그림과 같이 encoder는 pre-process과정과 encode과정을 모두 포함하기 때문에 encode 과정에서 발생된 순수(pure) compression gain을 VMAF를 통해서 평가하기 힘듭니다.
그래서 Netflix는 image enhancement operations으로부터의 visual gain을 제외한 pure compression gain만을 측정할 수 있는 VMAF NEG 모드를 개발하였습니다. (NEG는 no enhancement gain을 의미합니다.)
VMAF NEG mode는 어떻게 작동하는 가?
Image enchancement로부터 발생된 VMAF gain을 측정가능하며 해당 gain을 기존 측정방식에서 subtract해준다고 합니다. 그 예시로 위 그림 (f)에서 tune=vmaf 모드를 사용해서 발생된 image sharpening의 magnitude를 grayscale map으로 표현하였습니다. 그리고 (a)~(e)까지 VMAF NEG score를 보았을 때 image enhancement의 gain효과가 제거된 score가 측정된 것을 확인가능합니다.
'Computer Science' 카테고리의 다른 글
Per-shot Encoding 설명 (0) | 2023.02.06 |
---|---|
Per-title Encoding 설명 (0) | 2022.12.03 |
VMAF score 란? (0) | 2022.07.09 |
Python (2) Dict와 Set 차이 (0) | 2022.05.22 |
Python (1) List와 Tuple 차이 (0) | 2022.05.20 |