이전에 전통적인 압축 방법을 사용해서 BPP, PSNR과 MS-SSIM을 구해보면서 그 값을 활용하여 RD-Curve를 그리는 방법을 정리한적이 있었다.
하지만 최근 논문을 적으며 딥러닝 방법과 그래프를 그려보니 전통적인 방법과 딥러닝 간의 추세가 다르게 나타났다.
그래서 찾다보니 CompressAI 라이브러리 자체에서 전통적인 코덱들의 평가를 지원해준다고 한다.
CompressAI 라이브러리
https://github.com/InterDigitalInc/CompressAI
레포를 내리다보면 다음 섹션이 나온다.
예시로 bpg와 vtm을 어떻게 사용하는지 help를 통해 알려준다고 한다.
이제 개발환경에 한 번 입력해보자.
결과를 살펴보면 데이터셋 경로, 압축 정도 등 여러 셋팅을 어떻게 하면되는지 친절하게 알려준다. BPG나 VTM의 경우 내 개발환경에 코덱 실행을 위한 셋팅이 되어있어야한다.
VTM
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/releases
BPG
https://github.com/mirrorer/libbpg
python3 -m compressai.utils.bench jpeg /data_path -q 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
JPEG의 경우 압축 퀄리티를 0~100까지 설정할 수 있다.
compressai.utils.bench
를 실행해주면 압축 결과가 도출된다. JPEG의 경우 다른 전통적인 코덱들보다 결과는 빨리나온다.
만약 저 퀄리티값들을 다 적기 귀찮다면 $(seq start step stop)
를 사용해보자.
python3 -m compressai.utils.bench jpeg /data_path -q $(seq 0 5 101)
python3 -m compressai.utils.bench bpg /path -q $(seq 0 3 45)
BPG도 환경 설정이 끝났다면 위 명령어를 사용하면 정상적으로 실행될 것이다.
실행 결과는 아래 VTM의 실행 결과 포맷과 동일하다.
BPG는 퀄리티 값이 JPEG과 다르게 51인가 50까지 존재하는 것으로 기억한다.
마지막으로 VTM이다.
"Learned Image Compression with Mixed Transformer-CNN Architectures (CVPR'23)" 해당 논문에서 사용방법을 잘 설명해주셔서 그대로 사용하면된다.
VTM은 다른 코덱들과 다르게 퀄리티 값과 품질이 반비례했다.
즉, 퀄리티 값이 낮으면 압축이 덜되고, 퀄리티 값이 높으면 압축이 더 잘된다.
python3 -m compressai.utils.bench vtm /path -q $(seq 16 2 41) -c /path/encoder_intra_vtm.cfg -b /path/VVCSoftware_VTM-VTM-17.0/bin
위 이미지처럼 해당 값들을 반드시 넣어줘야 오류가 발생하지 않는다.
-c : cfg 파일 경로
-b : bin 폴더 경로
-q : 압축 퀄리티
자 이제 코드가 정상적으로 실행됐다면 아래와 같은 딕셔너리타입의 코드가 나오게된다.
{
"name": "VTM",
"description": "VTM",
"results": {
"bpp": [
2.6892771402994793,
...
],
"encoding_time": [
132.31253004868825,
.....
],
"decoding_time": [
0.21594648361206054,
....
],
"psnr": [
44.69362479684167,
....
],
"ms-ssim": [
0.9989910999933879,
...
]
}
}
키 값은 압축 방법, 설명, 결과(bpp, psnr, ms-ssim)를 가지며 그에 맞는 값들이 잘 저장된 것을 확인할 수 있다.