./images
Dockerfile
para incluir seus bináriosf()
TUPLE_CODECS
docker build -t image_compression_comparison .
docker run -it -v $(pwd):/image_compression_comparison image_compression_comparison
python3 script_compress_parallel.py
Codificações direcionadas a determinados valores de métrica são executadas e os resultados armazenados nos respectivos arquivos de banco de dados, por exemplo:
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
Em arquivos de banco de dados sqlite3, por exemplo encoding_results_vmaf.db
e encoding_results_ssim.db
.
As taxas percentuais de BD podem ser calculadas usando um script chamado compute_BD_rates.py
. O script leva um argumento:
python3 compute_BD_rates.py [db file name]
e imprime valores para BD Rate VMAF
, BD Rate SSIM
, BDRate MS_SSIM
, BDRate VIF
, BDRate PSNR_Y
e BDRate PSNR_AVG
para cada imagem de origem, bem como a média do conjunto de dados de origem. As taxas BD são impressas para subamostragens 420
e 444
. PSNR_AVG
é derivado de MSE_AVG
, que é MSE ponderado em todos os componentes de cores, ponderado de acordo com o número de amostras nos respectivos componentes de cores.
Também está incluído um script chamado analyze_encoding_results.py
que
O script leva dois argumentos:
python3 analyze_encoding_results.py [metric_name like vmaf OR ssim] [db file name]
Deve-se notar que a taxa BD fornece um número agregado em toda a gama de qualidades alvo. Olhando apenas para a taxa BD, certos insights podem ser perdidos, por exemplo, como a eficiência da compressão se compara, digamos especificamente, ao ponto operacional VMAF = 95?
Outro exemplo é, digamos que a taxa BD seja zero. É inteiramente possível que as curvas de taxa de qualidade se cruzem e um codec seja significativamente melhor que o outro no ponto operacional VMAF = 95, e pior na região de taxa de bits mais baixa.
Idealmente, quando os ativos de imagem são codificados para uso na UI, gostaríamos de ter uma qualidade operacional bem definida, como VMAF=95. E, sem dúvida, os resultados da região de qualidade inferior podem ser imateriais. Os insights descritos em (b) aumentam assim o insight “geral” proporcionado pela taxa de BD.
O número de processos de trabalho simultâneos pode ser especificado em
pool = multiprocessing.Pool(processes=4, initializer=initialize_worker)
Dado o sistema em que você está executando, a simultaneidade razoável pode ser limitada pelo número de núcleos do processador ou pela quantidade de RAM disponível versus a memória consumida pelo processo do codificador mais exigente no conjunto de codecs que está sendo testado. Por exemplo, se uma instância do encoder_A normalmente consome 5 GB de RAM e você tem 32 GB de RAM total, a simultaneidade razoável pode ser limitada a 6 (32/5), mesmo se você tiver 24 (ou qualquer coisa maior que 6) núcleos de processador.
Idealmente, uma implementação de codificador consome entrada YUV e gera um codestream. Idealmente, uma implementação de decodificador consome o codestream e decodifica para a saída YUV. Em seguida, calculamos métricas no espaço YUV. No entanto, existem implementações como software JPEG-XT que consomem entrada PPM e produzem saída PPM. Nesses casos, pode haver uma conversão de PPM de origem para YUV e também uma conversão de PPM para YUV decodificada antes da computação de qualidade no espaço YUV. As etapas extras de conversão, em comparação com o pipeline regular, podem introduzir uma ligeira distorção, mas em nossos experimentos essas etapas não causam nenhuma redução perceptível na pontuação VMAF.