./images
에 배치하세요.Dockerfile
업데이트하세요.f()
메서드에서 메트릭을 인코딩, 디코딩 및 계산하는 코드를 추가합니다.TUPLE_CODECS
에 코덱을 추가하세요.
docker build -t image_compression_comparison .
docker run -it -v $(pwd):/image_compression_comparison image_compression_comparison
python3 script_compress_parallel.py
특정 지표 값을 대상으로 하는 인코딩이 수행되고 결과는 해당 데이터베이스 파일에 저장됩니다. 예를 들면 다음과 같습니다.
main(metric='ssim', target_arr=[0.92, 0.95, 0.97, 0.99], target_tol=0.005, db_file_name='encoding_results_ssim.db')
main(metric='vmaf', target_arr=[75, 80, 85, 90, 95], target_tol=0.5, db_file_name='encoding_results_vmaf.db')
compression_results_[PID]_[TIMESTAMP].txt
compression_results_worker_[PID]_[TIMESTAMP].txt
sqlite3 데이터베이스 파일(예: encoding_results_vmaf.db
및 encoding_results_ssim.db
).
BD 비율 비율은 compute_BD_rates.py
라는 스크립트를 사용하여 계산할 수 있습니다. 스크립트는 하나의 인수를 사용합니다.
python3 compute_BD_rates.py [db file name]
모든 소스 이미지에 대한 BD Rate VMAF
, BD Rate SSIM
, BDRate MS_SSIM
, BDRate VIF
, BDRate PSNR_Y
및 BDRate PSNR_AVG
값과 소스 데이터 세트에 대한 평균을 인쇄합니다. BD 속도는 420
및 444
서브샘플링 모두에 대해 인쇄됩니다. PSNR_AVG
는 모든 색상 구성 요소에 걸쳐 MSE에 가중치를 부여하고 각 색상 구성 요소의 샘플 수에 따라 가중치를 부여하는 MSE_AVG
에서 파생됩니다.
또한 analyze_encoding_results.py
라는 스크립트도 포함되어 있습니다.
스크립트는 두 가지 인수를 사용합니다.
python3 analyze_encoding_results.py [metric_name like vmaf OR ssim] [db file name]
BD 비율은 전체 대상 품질 범위에 대해 하나의 집계된 숫자를 제공한다는 점에 유의해야 합니다. BD 속도만 보면 특정 통찰력을 놓칠 수 있습니다. 예를 들어 VMAF=95 작동 지점에 대해 압축 효율성을 어떻게 비교합니까?
또 다른 예는 BD 비율이 0이라고 가정해 보겠습니다. 속도-품질 곡선이 교차하고 VMAF=95 작동 지점에서는 한 코덱이 다른 코덱보다 훨씬 우수하고 낮은 비트 전송률 영역에서는 더 나쁠 가능성이 있습니다.
이상적으로는 UI에서 사용하기 위해 이미지 자산을 인코딩할 때 VMAF=95와 같이 잘 정의된 운영 품질을 갖고 싶어합니다. 그리고 틀림없이 품질이 낮은 지역의 결과는 중요하지 않을 수 있습니다. 따라서 (b)에 설명된 통찰력은 BD 요율이 제공하는 "전반적인" 통찰력을 강화합니다.
동시 작업자 프로세스 수는 다음에서 지정할 수 있습니다.
pool = multiprocessing.Pool(processes=4, initializer=initialize_worker)
실행 중인 시스템에 따라 합리적인 동시성은 프로세서 코어 수 또는 사용 가능한 RAM 양과 테스트 중인 코덱 집합에서 가장 까다로운 인코더 프로세스에서 소비하는 메모리에 따라 제한될 수 있습니다. 예를 들어, 인코더_A 인스턴스가 일반적으로 5GB RAM을 사용하고 총 RAM이 32GB인 경우 프로세서 코어가 24개(또는 6개 이상)인 경우에도 합리적인 동시성은 6(32/5)으로 제한될 수 있습니다.
이상적으로 인코더 구현은 YUV 입력을 사용하고 코드스트림을 생성합니다. 이상적으로 디코더 구현은 코드스트림을 사용하고 YUV 출력으로 디코딩합니다. 그런 다음 YUV 공간에서 메트릭을 계산합니다. 그러나 PPM 입력을 사용하고 PPM 출력을 생성하는 JPEG-XT 소프트웨어와 같은 구현이 있습니다. 이러한 경우 YUV 공간에서 품질 계산 전에 소스 PPM에서 YUV로의 변환과 디코딩된 PPM에서 YUV로의 변환이 있을 수 있습니다. 일반 파이프라인과 비교하여 추가 변환 단계는 약간의 왜곡을 일으킬 수 있지만 실험에서는 이러한 단계가 VMAF 점수에 눈에 띄는 흠집을 내지 않습니다.