./images
Dockerfile
untuk menyertakan binari Andaf()
TUPLE_CODECS
docker build -t image_compression_comparison .
docker run -it -v $(pwd):/image_compression_comparison image_compression_comparison
python3 script_compress_parallel.py
Pengkodean yang menargetkan nilai metrik tertentu dilakukan dan hasilnya disimpan dalam file database masing-masing, misalnya:
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
Pada file database sqlite3, misalnya encoding_results_vmaf.db
dan encoding_results_ssim.db
.
Persentase tarif BD dapat dihitung menggunakan skrip yang disebut compute_BD_rates.py
. Script mengambil satu argumen:
python3 compute_BD_rates.py [db file name]
dan mencetak nilai untuk BD Rate VMAF
, BD Rate SSIM
, BDRate MS_SSIM
, BDRate VIF
, BDRate PSNR_Y
dan BDRate PSNR_AVG
untuk setiap gambar sumber serta rata-rata pada kumpulan data sumber. Tarif BD dicetak untuk subsampling 420
dan 444
. PSNR_AVG
berasal dari MSE_AVG
yang merupakan MSE tertimbang di seluruh komponen warna, diberi bobot berdasarkan jumlah sampel di masing-masing komponen warna.
Juga disertakan skrip bernama analyze_encoding_results.py
yang
Skrip ini mengambil dua argumen:
python3 analyze_encoding_results.py [metric_name like vmaf OR ssim] [db file name]
Perlu dicatat bahwa tingkat BD memberikan satu angka agregat untuk seluruh rentang kualitas target. Melihat tingkat BD saja, wawasan tertentu dapat terlewatkan, misalnya, bagaimana perbandingan efisiensi kompresi untuk katakanlah khususnya titik operasi VMAF=95?
Contoh lainnya adalah, katakanlah tarif BD adalah nol. Sangat mungkin bahwa kurva kualitas kecepatan bersilangan dan satu codec secara signifikan lebih baik daripada yang lain pada titik operasi VMAF=95, dan lebih buruk di wilayah bitrate yang lebih rendah.
Idealnya, ketika aset gambar dikodekan untuk digunakan di UI, seseorang ingin memiliki kualitas pengoperasian yang terdefinisi dengan baik seperti VMAF=95. Dan bisa dibilang, hasil dari wilayah dengan kualitas lebih rendah mungkin tidak penting. Wawasan yang dijelaskan dalam (b) dengan demikian menambah wawasan "keseluruhan" yang diberikan oleh tingkat BD.
Jumlah proses pekerja secara bersamaan dapat ditentukan di
pool = multiprocessing.Pool(processes=4, initializer=initialize_worker)
Mengingat sistem yang Anda jalankan, konkurensi yang wajar mungkin dibatasi oleh jumlah inti prosesor atau jumlah RAM yang tersedia versus memori yang dikonsumsi oleh proses encoder yang paling menuntut dalam kumpulan codec yang sedang diuji. Misalnya, jika instans encoder_A biasanya menggunakan RAM 5 GB dan Anda memiliki total RAM 32 GB, maka konkurensi yang wajar mungkin dibatasi hingga 6 (32/5) bahkan jika Anda memiliki 24 (atau lebih dari 6) inti prosesor.
Idealnya, implementasi encoder menggunakan input YUV dan menghasilkan aliran kode. Idealnya, implementasi dekoder menggunakan aliran kode dan mendekode ke keluaran YUV. Kami kemudian menghitung metrik di ruang YUV. Namun, ada implementasi seperti perangkat lunak JPEG-XT yang menggunakan masukan PPM dan menghasilkan keluaran PPM. Dalam kasus seperti ini, mungkin terdapat konversi sumber PPM ke YUV dan juga konversi PPM ke YUV yang didekodekan sebelum penghitungan kualitas di ruang YUV. Langkah-langkah konversi ekstra, dibandingkan dengan pipeline biasa, dapat menimbulkan sedikit distorsi, namun dalam eksperimen kami, langkah-langkah tersebut tidak memberikan penurunan nyata pada skor VMAF.