[Netflix Tech Blog] SVT-AV1 : 오픈 소스 AV1 인코더 및 디코더

 

SVT-AV1은 BSD + 특허 라이선스에 따라 GitHub https://github.com/OpenVisualCloud/SVT-AV1/ 에서 호스팅되는 오픈 소스 AV1 코덱 구현 입니다. 이전 블로그 게시물 에서 언급했듯이 Intel과 Netflix는 2018 년 8 월부터 SVT-AV1 인코더 및 디코더 프레임 워크에 대해 협력 해 왔습니다. 팀은 SVT-AV1 개발을 위해 긴밀히 협력하고 아키텍처 결정을 논의하고 새로운 도구를 구현하고 압축을 개선해 왔습니다. 능률. 프로젝트를 오픈 소싱 한 이후 다른 파트너 회사와 오픈 소스 커뮤니티가 SVT-AV1에 기여했습니다. 이 기술 블로그에서는 SVT-AV1 프로젝트의 현재 상태와 인코더 및 디코더의 특성 및 성능을보고합니다.

SVT-AV1 코드베이스 상태

SVT-AV1 저장소에는 상당한 양의 코드를 공유하는 AV1 인코더와 디코더가 모두 포함되어 있습니다. SVT-AV1 디코더는 완벽하게 작동하며 세 가지 프로필 (메인, 높음 및 프로페셔널) 모두에 대한 AV1 사양을 준수합니다.

SVT-AV1 인코더는 압축 효율성에 기여하는 모든 AV1 도구를 지원합니다. 최신 마스터 버전의 libaom (AV1 참조 소프트웨어)과 비교하여 SVT-AV1은 압축 효율성이 비슷하며 동시에 고유 한 병렬화 기능을 사용할 때 멀티 코어 플랫폼에서 인코딩 지연 시간을 크게 낮 춥니 다.

SVT-AV1은 C로 작성되었으며 Windows, Linux 및 macOS와 같은 주요 플랫폼에서 컴파일 할 수 있습니다. 보다 유연한 실험을 가능하게하는 순수한 C 함수 구현 외에도 코덱은 x86 플랫폼을위한 광범위한 어셈블리 및 고유 최적화 기능을 제공합니다. 경쟁력있는 압축 효율성으로 높은 성능을 제공하는 주요 SVT-AV1 기능에 대한 개요는 다음 섹션을 참조하십시오. SVT-AV1에는 새로운 개발자를위한 온 보딩 프로세스를 용이하게하기위한 인코더 설계에 대한 광범위한 문서 도 포함되어 있습니다.

건축 적 특징

SVT-AV1 개발에 대한 인텔의 목표 중 하나는 성능과 확장 성을 제공 할 수있는 AV1 인코더를 만드는 것이 었습니다. SVT-AV1은 인코딩 프로세스의 여러 단계에서 병렬화를 사용하므로 코어 수가 많은 최신 서버를 포함하여 사용 가능한 코어 수에 적응할 수 있습니다. 이를 통해 SVT-AV1은 압축 효율성을 유지하면서 인코딩 시간을 줄일 수 있습니다.

SVT-AV1 인코더는 다차원 (프로세스, 픽처 / 타일 및 세그먼트 기반) 병렬 처리, 다단계 분할 결정, 블록 기반 다단계 및 다중 클래스 모드 결정 및 RD 최적화 분류를 사용하여 압축과 성능간에 매력적인 절충안을 얻을 수 있습니다. SVT 아키텍처의 또 다른 기능은 오픈 루프 계층 적 모션 추정으로, 나머지 인코딩 프로세스에서 모션 추정의 첫 번째 단계를 분리 할 수 ​​있습니다.

압축 효율성 및 성능

인코더 성능

SVT-AV1은 가장 느린 속도 설정에서 libaom과 유사한 압축 효율에 도달합니다. 코덱 개발 중에 https://videocodectracker.dev/ 에서 압축 및 인코딩 결과를 추적했습니다.대지. 아래 플롯은 시간이 지남에 따라 libaom 인코더에 비해 SVT-AV1의 압축 효율이 향상되었음을 보여줍니다. libaom 압축도 시간이 지남에 따라 개선되고 있으며 아래 플롯은 움직이는 대상을 따라 잡는 SVT-AV1을 나타냅니다. 플롯에서 Y 축은 세 가지 메트릭에 따라 libaom 인코더와 유사한 품질을 달성하는 데 필요한 추가 비트 전송률을 백분율로 표시합니다. 플롯은 두 코덱 모두에서 2 패스 인코딩 모드의 결과를 보여줍니다. SVT-AV1은 4 스레드 모드를 사용하는 반면 libaom은 단일 스레드 모드에서 작동합니다. 연구에서 일반적으로 사용되는 1 패스 고정 QP 인코딩 모드에 대한 SVT-AV1 결과는 아래에 자세히 설명 된 것처럼 훨씬 더 경쟁력이 있습니다.

2 패스 인코딩 모드에서 SVT-AV1과 libaom 사이의 BD-rate 감소

Objective-1-fast 에 대한 libaom에 대한 SVT-AV1의 비교 결과테스트 세트는 아래 표에 나와 있습니다. 인코딩 시간을 추정하기 위해 Intel (R) Xeon (R) Platinum 8170 CPU @ 2.10GHz 시스템에서 52 개의 물리적 코어와 96GB의 RAM을 사용했으며 60 개의 작업이 병렬로 실행되었습니다. 두 코덱 모두 16 개 그림의 양방향 계층 적 예측 구조를 사용합니다. 결과는 고정 프레임 레벨 QP 오프셋이있는 1 패스 모드에 대해 제공됩니다. 단일 스레드 압축 모드가 사용됩니다. 아래에서는 세 가지 색상 평면, VMAF 및 MS-SSIM 모두에 대한 PSNR과 같은 다양한 품질 메트릭에 대한 BD 속도를 계산합니다. 음수 BD-Rate는 SVT-AV1 인코딩이 표시된 상대적인 비트 전송률 감소로 동일한 품질을 생성 함을 나타냅니다. 아래에서 볼 수 있듯이 SVT-AV1은 libaom에 비해 인코딩 시간이 16.5 % 감소하는 반면 압축 능력은 약간 더 효율적입니다. 인코딩 시간 비율은 플랫폼에서 지원하는 명령어 세트에 따라 다를 수 있습니다. 결과는 libaom 마스터 브랜치 (git hash fe72512)에 대해 SVT-AV1 cs2 브랜치 (현재 마스터에 병합중인 개발 브랜치, git hash 3a19f29)에서 얻어졌습니다. BD 비율을 계산하는 데 사용되는 QP 값은 20, 32, 43, 55, 63입니다.

고정 QP 오프셋을 사용하는 1 패스 인코딩 모드에서 SVT-AV1 대 libaom의 BD 속도. 음수는 동일한 품질 수준에 도달하는 데 필요한 비트 전송률 감소를 나타냅니다. 전체 인코딩 시간 차이는 libaom과 비교하여 SVT-AV1의 모든 시퀀스 및 QP에 대한 총 CPU 시간의 변화입니다.

* 전체 인코딩 CPU 시간 차이는 앵커와 비교하여 테스트의 모든 시퀀스 및 QP에 대한 총 CPU 시간의 변화로 계산됩니다. 시퀀스 당 값의 평균과 같지 않습니다. 각 시퀀스마다 인코딩 CPU 시간 차이는이 시퀀스의 모든 QP에 대한 총 CPU 시간의 변화로 계산됩니다.

Objective-1-fast 테스트 세트의 모든 시퀀스에는 60 개의 프레임이 있으므로 두 코덱 모두 하나의 키 프레임을 사용합니다. 코덱을 비교하기 위해 다음 명령 줄 매개 변수가 사용되었습니다.

libaom 매개 변수 :

--passes = 1 --lag-in-frames = 25 --auto-alt-ref = 1 --min-gf-interval = 16 --max-gf-interval = 16 --gf-min-pyr-height = 4 --gf-max-pyr-height = 4 --kf-min-dist = 65 --kf-max-dist = 65 --end-usage = q --use-fixed-qp-offsets = 1- -deltaq-mode = 0 --enable-tpl-model = 0 --cpu-used = 0

SVT-AV1 매개 변수 :

--preset 1 --scm 2 --keyint 63 --lookahead 0 --lp 1

위의 결과는 SVT-AV1의 탁월한 객관적 성능을 보여줍니다. 또한 SVT-AV1에는 코덱이 주관적인 품질로 구성된 경우 사용할 수있는 일부 주관적인 품질 도구의 구현이 포함되어 있습니다.

디코더 성능

객관적인 1-fast 테스트 세트에서 SVT-AV1 디코더는 1- 스레드 모드의 libaom보다 약간 빠르며 4- 스레드 모드에서 더 크게 향상되었습니다. 4 스레드 모드를 사용하여 여러 타일로 비트 스트림을 디코딩 할 때 libaom 디코더보다 더 큰 속도 향상을 관찰합니다. 테스트는 Windows, Linux 및 macOS 플랫폼에서 수행되었습니다. 우리는 연구용 디코더의 성능이 만족 스러우며, 트레이드 오프는 프로덕션 디코더에 필요한 추가 최적화보다 더 쉬운 실험을 선호합니다.

테스트 프레임 워크

특히 새로운 코드 기여에 대한 코덱 준수를 보장하기 위해 코드는 단위 테스트 및 종단 간 테스트로 포괄적으로 다루어졌습니다. 단위 테스트는 Google 테스트 프레임 워크를 기반으로합니다. 단위 및 엔드 투 엔드 테스트는 GitHub 작업에서 지원하는 저장소에 대한 각 풀 요청에 대해 자동으로 트리거됩니다. 테스트는 샤딩을 지원하며 풀 요청에 대한 처리 시간을 단축하기 위해 병렬로 실행됩니다.

이 pull 요청에 대한 단위 및 e2e 테스트를 통과했습니다.

무엇 향후 계획?

지난 몇 달 동안 SVT-AV1은 경쟁력있는 압축 효율성과 성능 절충안을 제공하는 완전한 인코더 / 디코더 패키지로 성장했습니다. 이 프로젝트는 광범위한 단위 테스트 범위 및 문서로 강화됩니다.

우리의 희망은 SVT-AV1 코드베이스가 AV1의 추가 채택을 돕고 현재 AV1 도구를 기반으로 더 많은 연구 및 개발을 장려하는 것입니다. 우리는 SVT-AV1의 입증 된 장점이 실험과 연구를위한 좋은 플랫폼이라고 믿습니다. 업계 및 학계의 동료를 초대하여 Github에서 프로젝트를 확인하고, 코드베이스 관리자에게 질문과 의견을 문의하거나 SVT-AV1 Open Dev 회의 중 하나에 참여할 수 있습니다. 우리는 프로젝트에 더 많은 기여자들을 환영합니다.

https://netflixtechblog.com/svt-av1-an-open-source-av1-encoder-and-decoder-ad295d9b5ca2

 

SVT-AV1: an open-source AV1 encoder and decoder

by Andrey Norkin, Joel Sole, Mariana Afonso, Kyle Swanson, Agata Opalach, Anush Moorthy, Anne Aaron

netflixtechblog.com

 

+ Recent posts