[Paper Review] End-to-End Optimized Image Compression(ICLR 2017)

Author

고경수

Published

August 10, 2024

End-to-End Optimized Image Compression(2017)

PR-328 정리 내용


Image Compression

  • Image Compression은 이미지를 어떠한 시퀀스로 바꾼 뒤 이를 엔트로피 코딩 하는 과정

  • 시퀀스로 바꾸는 방법에는 Lossless Coding과 Lossy Coding이 있다.

    • Lossless Coding은 원본 그대로 복원이 가능하다. (bmp)

    • Lossy Coding은 이미지를 조금 훼손시키더라도 엔트로피를 더 줄여보자는 방법. (JPEG)

  • 이 논문의 제안 방법이 JPEG 방법을 거의 그대로 사용하여 살펴보겠다.

    과정은 8x8 픽셀로 cutting을 하고, Discrete Cosine Transform을 한 뒤 Quantization 과정 후 Entropy Coding을 하게 된다.

    • 샘플 1개(8x8)는 앞에서 본 시퀀스의 A, B 등 알파벳에 해당한다.

    • Discrete Cosine Transform은 Fourier Trnasform의 Real 버전이라고 생각하면 되고, Linear Transform이다.

      Frequency domain으로 바꾼 다음에 나온 값들을 quantization을 통해 sparse하게 만든다. Ex) 0 ~ 10 → 0, 5, 10

      이후 Entropy Coding을 수행한다. (0, 5, 10에 대한 확률 값을 얻을 수 있으니 비트를 할당 가능하다.)

  • 왼쪽이 Lossless, 오른쪽이 Lossy

  • JPEG 같은 Lossy Coding은 원본을 완벽하게 복원할 수 없다. (Quantization 과정에서 정보 손실)

    이 과정에서 엔트로피를 줄였지만 퀄리티도 줄어들었다.

  • Lossless는 퀄리티가 좋지만 그만큼 엔트로피도 크고, 그에 따라 비트레이트도 크다.

  • Lossy는 반대로 퀄리티는 낮지만 그만큼 엔트로피도 작아지고, 비트레이트도 더 줄일 수 있다.

  • 비트레이트가 높으면 성능이 좋고, 비트레이트가 낮으면 성능이 나쁘다. 왼쪽 위에 있을수록 좋은 방법

End-to-End Optimized Image Compression [Network Structure]

  • 이미지 압축은 대부분 이러한 파이프라인을 가진다.

    • Transform은 JPEG의 경우 DCT.
  • Entropy Coding 까지가 인코딩, 이후가 디코딩

  • Quantization을 했기에 Input과는 다른 결과가 나오게 될 것.

  • 이 논문도 이 파이프라인을 그대로 따른다.

  • Transform은 뉴럴넷으로 대체를 하였다. (non-linear)

  • Quantization은 그대로 한다. 다만 Quantization은 값이 계단 처럼 나오기에 대부분의 미분값이 0이다. 이를 해결하기 위해 근사치를 사용한다.

  • Entropy Coding과 Decoding은 고정

  • Inverse Transform도 뉴럴넷으로 시킨다. 실제로 역함수 관계는 아니지만 둘 사이의 MSE를 설정해서 End-to-End로 학습을 하기에 서로가 Inverse 형태가 되도록 자연스럽게 학습이 될 것.

  • 수식 순서대로 Convolution, Pooling(Downsampling), Activation 역할

  • GDN은 따로 관련 논문이 있다고 한다.

  • 뉴럴넷이다 보니 완벽한 Inverse는 존재할 수 없지만, 구조라도 inverse하게 설계해보았다고 한다.

  • 맨 위 식을 보면, 인코더의 마지막 수식의 분모를 그대로 가져다 곱한 모습을 볼 수 있다.

    그 다음 Pooling의 반대 연산인 Upsampling을 하였다. 조금 다른 것은 중간중간 값을 Bilinear interpolation 등을 하는게 아니라 0으로 채우고,

    이후에 아래 식에서 볼 수 있듯 컨볼루션 연산을 한다.

  • 인코더와 디코더가 정반대의 연산 flow를 가진다.

  • 구조를 보면 다음과 같은데, 여기서 같은 구조가 3번씩 반복이 된다.

    1/4, 1/2, 1/2로 다운샘플링 하기에 16x16의 패치를 하나의 샘플로 보겠다는 것이다.

    즉, JPEG보다 더 큰 영역을 샘플 하나로 표시하려고 하는 것이기에 더 많이 압축을 할 수 있을 것이다.

End-to-End Optimized Image Compression [Optimization]

  • Optimization 부분을 한번 보면, Loss function은 뒷부분은 MSE Loss이고, 앞부분은 Rate Loss → Entropy를 줄이라는 loss이다.

  • \(\hat{y}\) 을 quantized vector 라고 하자. (y의 round 값)

    가로축이 \(y_i\) 의 값, 세로축이 probability density 라고 할 때,

    뾰족한 실선이 실제 \(y_i\) 의 distribution이라고 하면 반올림을 했기 때문에, 적분을 하면 quantized된 벡터의 Probability Mass Function을 구할 수 있을 것이다.

    그러면 이 PMF 값으로 엔트로피를 구할 수 있다.

    그러나 앞에서 보았듯 Quantization의 결과는 training하기 어렵다. (미분하면 대부분 0)

    그래서 \(\hat{y}\)\(\tilde{y}\) 로 근사한다.

  • 예를 들어, \(\hat{y}\) 이 0이라는 값이 나왔을 때 \(y\) 가 어디에 있었을까를 생각해보면 -1/2 ~ 1/2 사이의 값일 것이다.

    이를 수식적으로 나타낸 값이 \(y+\Delta y\)

    \(\Delta y\) 는 -1/2 ~ 1/2의 값을 가지는 random variable이다. (노이즈를 더하는 느낌)

  • \(\tilde{y}\) 는 continuous 하니까 pdf를 구할 수 있을 것이다. (여기서 점선이 \(\tilde{y}\) 의 그래프)

  • r.v. A와 r.v. B가 있을 때 r.v C = A+B 라고 하면, C의 pdf는 A의 pdf와 B의 pdf의 컨볼루션이다.

  • \(\tilde{y}\) 를 적용한 Loss function은 다음과 같다.

  • 성능은 다음과 같고

  • 오른쪽으로 갈수록 비트레이트가 작아진다. 중간 줄이 이 논문에서 제안한 방법. 위가 JPEG, 아래가 JPEG 2000.