개념 정리

흔한 이미지 관련 평가지수 (PSNR, SSIM, FID, LPIPS 등)

curious_cat 2023. 11. 2. 00:12
728x90
728x90

MSE

MSE (Mean squared error)는 두 이미지의 픽셀사이 mean squred error을 뜻합니다. 너무 잘 알려진 metric이라서 자세한 설명은 생략.

PSNR

PSNR은 peak signal to noise ratio의 약자인데 image reconstruction task를 수행할 때 자주 등장하는 지표입니다. Noise (얼마나 reconstruction이 안 좋은가)에 비해서 얼마나 peak signal (이미지에서 최대 픽셀의 크기)가 큰가를 나타내는 지표이기 때문에 PSNR이 크면 reconstruction 퀄리티가 좋다고 봅니다.

 

grayscale image에 대한 정의

  • \( x \): noise가 없는 이미지.
  • \( H, W\): 각각 높이, 너비
  • \( y \): noise가 있는 이미지. jpeg 같이 compression하면서 생기는 noisy image일 수도 있고, GAN 같은 생성모델로 image reconstruction을 하면서 생기는 noise일 수도 있습니다.
  • \( S  = \max_{i,j} x(i,j) \) : 이미지 x의 최대 pixel 값 (peak signal). 여기서 i = 0,..., H-1이고 j = 0,...,W-1.
  • \( N = \frac{1}{HW} \sum_{i=0}^{i=H-1}\sum_{j=0}^{j=W-1} [x(i,j) - y(i,j)]^2 \): x와 y의 mean squared error  (noise)
  • \( PSNR = 10 \log_{10} \frac{S^2}{N} \): peak signal 대비 noise를 log scale (decibel scale)로 나타낸 값.

color image에 대한 정의

위와 대부분 동일합니다. 

  • \( C \) = image에서 channel 수
  • \( S  = \max_{i,j,k} x(i,j,k) \) : 이미지 x의 최대 pixel 값 (peak signal). 여기서 i = 0,..., H-1 이고 j = 0,...,W-1 이고 k = 0,...,C-1
  • \( N = \frac{1}{HWC} \sum_{i=0}^{i=H-1}\sum_{j=0}^{j=W-1} \sum_{k=0}^{C-1}[x(i,j,k) - y(i,j,k)]^2 \): x와 y의 mean squared error  (noise)
  • \( PSNR = 10 \log_{10} \frac{S^2}{N} \): peak signal 대비 noise를 log scale (decibel scale)로 나타낸 값.

SSIM

SSIM은 Structure Similarity의 약자이며, "Image Quality Assessment: From Error Visibility to Structural Similarity"라는 논문에서 제시되었습니다. MSE와 PSNR은 간단하지만 실제로 사람이 느끼는 visual quality와는 거리가 있습니다. 밑에 그림에서 (a)가 원본 이미지이고, (b)~(f)는 모두 동일한 MSE 값을 갖는 이미지입니다. 하지만 대부분의 사람들은 (b)~(f)에 있는 이미지들이 동일하게 (a)와 visual quality가 비슷하다고 느끼지는 않을 것입니다. 이런 문제가 생기는 가장 큰 원인은 MSE는 너무나 local한 양이기 때문입니다 (다른 두 위치의 픽셀 값들의 상호관계를 전혀 따지지 않음)

이러한 문제를 해결하기 위해서 제안된 metric 중 하나가 바로 SSIM인데, 적어도 MSE보다는 SSIM이 (a)와의 유사도와 를 잘 나타낸다고 느낄 것입니다 (그림 캡션 참고).

 

SSIM 같은 경우 전체 이미지 안에서 pixel값들의 분포를 사용해서 luminance, contrast, structure라는 값들을 정의하고, 이들을 조합해서 만들어지는 metric입니다.

notation

  • \(x\): 원본 이미지, \(y\): noisy 이미지 (보통 grayscale 이미지)
  • \(x_i,y_i\): i번째 픽셀 값

luminance comparison

  • luminance: 평균 픽셀 값
    \( \mu_x = \frac{1}{N} \sum_{i=1}^N x_i\)
    \( \mu_y = \frac{1}{N} \sum_{i=1}^N y_i\)
  • luminance comparison:
    \[ l(x,y) = \frac{2\mu_x \mu_y+C_1}{\mu_x^2+\mu_y^2+C_1}\]
  • \( C_1 = (K_1L)^2\)는 발산을 막기 위한 상수. \( K_1=0.01\), \( L=255\) 사용 (8-bit grayscale 이미지인 경우)

contrast comparison

  • contrast: 픽셀 값의 표준 편차 (sample variance 참고)
    \( \sigma_x = \left(\frac{1}{N-1} \sum_{i=1}^N(x_i-\mu_x)^2\right)^{1/2}\)
    \( \sigma_y = \left(\frac{1}{N-1} \sum_{i=1}^N(y_i-\mu_y)^2\right)^{1/2}\)
  • contrast comparison:
    \[ c(x,y) = \frac{2\sigma_x \sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}\]
  • \( C_2 = (K_2L)^2\)는 발산을 막기 위한 상수. \( K_2=0.03\), \( L=255\) 사용 (8-bit grayscale 이미지인 경우)

structure comparison

  • normalized된 이미지 (평균을 빼고 표준 편차로 나눴다는 뜻)끼리 correlation을 structure comparison으로 정의합니다.
  • \( \sigma_{xy} = \frac{1}{N-1} \sum_{i=1}^{N} (x_i-\mu_x)(y_i-\mu_y)\)
  • structure comparison:
    \[ s(x,y) = \frac{\sigma_{xy}+C_3}{\sigma_x \sigma_y + C_3}\]
  • \( C_3\)는 표준편차가 0인 이미지의 경우발산을 막기 위한 상수. 실제로는 \( C_3=C_2/2\) 사용 (이유는 밑에 참고)

정의

  • luminance, contrast, structure comparison을 조합해서 만든다
    \[SSIM(x,y) = [l(x,y)]^\alpha [c(x,y)]^\beta [s(x,y)]^\gamma \]
    \( \alpha, \beta, \gamma > 0\)
  • \( \alpha=\beta=\gamma=1\), \( C_3=C_2/2\)로 두면 다음과 같이 간단한 표현을 얻을 수 있습니다:
    \[ SSIM(x,y) = \frac{(2\mu_x \mu_y + C_1)(2 \sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2+C_1)(\sigma^2_x+\sigma^2_y+C_2)}\]

성질

다음과 같은 성질을 만족하도록 디자인되었습니다

  • \( SSIM(x,y) = SSIM(y,x)\)
  • \( SSIM(x,y) \le 1\)
  • \( SSIM(x,y)=1\) if and only if \( x=y\)
  • 높으면 x,y가 비슷하고 낮으면 비슷하지 않다고 해석합니다

MSSIM

SSIM같은 경우 이미지 전체에 대한 통계만 사용하지만, local한 통계가 유의미할 때도 있기 때문에 MSSIM (mean structure similarity)라는 지표도 정의를 합니다 (SSIM과 같은 논문)

정의

  • \(X,Y\): 전체 이미지
  • \( x_j, y_j\): 11 x 11 window
  • \( w_i\): window 안에서 정의된 2차원 gaussian distribution (window와 같은 사이즈의 gaussian filter이라고 생각하면 됩니다)
    • 표준편차 = 1.5
    • 사이즈 = 11 x 11 
  • gaussian weight를 사용해서 이전과 비슷하게 통계치들을 계산해 줍니다
  • \( \mu_x = \frac{1}{N} \sum_{i=1}^N w_i x_i\), y에 대해서도 비슷
  • \( \sigma_x = \left(\frac{1}{N-1} \sum_{i=1}^N w_i(x_i-\mu_x)^2\right)^{1/2}\)
  • \( \sigma_{xy} = \frac{1}{N-1} \sum_{i=1}^{N} w_i (x_i-\mu_x)(y_i-\mu_y)\)
  • 이 값들을 사용해서 11 x 11 window에 대해서 SSIM은 동일하게 정의하면 MSSIM은 다음과 같습니다
    \[ MSSIM(X,Y) = \frac{1}{M} \sum_{j=1}^M SSIM(x_j,y_j)\]
    • M: window 수 (1 픽셀씩 window를 sliding 하면서 계산)

MS-SSIM

MS-SSIM (multi-scale structure similarity)는 "Multi-Scale Structure Similarity for Image Quality Assessment"라는 논문에서 제시되었습니다. SSIM같은 경우 한 개의 스캐일에 대해서만 계산이 되기 때문에 다양한 스캐일에서 이미지들이 얼마나 visual quality가 비슷한지 비교가 되지 않습니다. MS-SSIM의 아이디어는 이미지를 downsampling해서 (예를 들어 256x256 이미지 -> 128 x 128 이미지) 여러 스캐일의 이미지를 얻고, 각 스케일의 이미지에서 SSIM을 계산해서 다시 조합하는 것입니다.

notation

  • 기본적으로 SSIM 섹션과 동일한 notation 사용

정의

  • 원본 이미지와 noisy 이미지를 \( 1/2, 1/4, ..., 1/2^{M-1} \) 배로 사이즈를 줄여서 각각에 대하여 M개의 다른 스캐일의 이미지를 얻습니다 (원본 사이즈 포함해서 M개의 스캐일)
  • 각 사이즈에 대해서 contrast comparison \( c_j(x,y)\)와 structure comparison \( s_j(x,y)\)를 얻습니다 (j=1,...,M)
    • j=1: 원본 사이즈
    • j가 증가할수록 작은 이미지
  • luminance comparison \( l_j(x,y)\)는 j=M에 대해서만 계산합니다 (다른 스캐일에서 계산하는 것이 의미가 없습니다.)
  • 정의:
    \[ MS-SSIM(x,y) = [l_M(x,y)]^{\alpha_M} \prod_{j=1}^{M} [c_j(x,y)]^{\beta_j}[s_j(x,y)]^{\gamma_j}\]
  • 간단하게 하기 위해서 \( \beta_j = \gamma_j\), \( \sum \beta_j = \sum \gamma_j = 1\)
  • 사람들에게 실험했을 때 다음과 같은 값들이 적당했다고 합니다
    • M = 5
    • \( \beta_1, \beta_2, \beta_3, \beta_4, \beta_5 = 0.0448, 0.2856, 0.3001, 0.2363, 0.1333\)

성질

SSIM과 마찬가지로 다음과 같은 성질을 만족합니다

  • \( MS-SSIM(x,y) = MS-SSIM(y,x)\)
  • \( MS-SSIM(x,y) \le 1\)
  • \( MS-SSIM(x,y)=1\) if and only if \( x=y\)
  • 높으면 x,y가 비슷하고 낮으면 비슷하지 않다고 해석합니다

LPIPS

LPIPS(Learned Perceptual Image Patch Similarity)는 "The Unreasonable Effectiveness of Deep Features as a Perceptual Metric"이라는 논문에서 제시된 평가 지표인데 neural network의 feature을 기반으로 설계되었습니다. 위에서 소개한 평가지표(MSE, PSNR, SSIM, MSSIM, MS-SSIM)들은 이미지 퀄리티에 집중을 했다면, LPIPS는 perceptual similarity (두 이미지가 사람이 봤을 때 얼마나 비슷한가)에 더 중점을 둔 평가지표입니다. 

notation

  • \( x\): 이미지
  • \( \hat{y}^l \in \mathbb{R}^{H_l \times W_l \times C_l} \): 이미지를 neural net에 통과시켜서 얻은 \(l\) 번째 layer의 feature을 channel (C) 방향으로 unit normalize 한 값입니다. H, W는 height, width. 저자들은  pre-trained AlexNet을 default로 사용하지만 LPIPS를 사용하는 논문들을 보면 VGG를 많이 사용하네요.
  • \( x_0\): distorted 이미지 (혹은 x와 비교할 이미지)
  • \( \hat{y}_0^l\): distorted 이미지에 대한 normalized feature, \( \hat{y}^l \) 정의 참고.

정의

\[ d(x,x_0) = \sum_l \frac{1}{H_l W_l} \sum_{h,w} || w_l \odot (\hat{y}^l_{hw} - \hat{y}^l_{0hw}) ||_2^2\]

  • \( w_l \in \mathbb{R}^{C_l}\)는 각 layer에 대해서 얼마나 weight를 줄지, layer마다 각 channel을 얼마나 줄지를 결정하는 상수입니다. 학습을 통해서 정합니다 (밑에 참고)

\( w_l \) 학습 방법

  • 논문 저자들이 수집한 데이터로 학습을 합니다.
  • 대략적으로 두 이미지가 비슷한가 아닌가를 사람들에게 평가하게 해서 True/False label을 얻습니다
  • 이렇게 얻은 label을 기반으로 다음과 같이 cross entropy loss를 사용해서 w를 학습합니다
    \[ -h \log \mathcal{G}(d(x,x_0),d(x,x_1)) - (1-h) \log(1-G(d(x,x_0),d(x,x_1)))\]
    • \( x, x_0, x_1\): 이미지와 distorted 이미지들
    • h: \(x,x_0,x_1\) 가 사람들이 느끼기에 비슷하다고 느끼는 확률 (예를 들어서 \(x,x_0\) 가 비슷하다고 느끼고 \(x, x_1\)도 비슷하다고느끼면 True, 아니면 False. 이렇게 여러 명에 대해서 label을 얻어서 평균)
    • \( \mathcal{G}\): shallow fully connected network + sigmoid
  • 다른 학습 세팅들은 논문 참고.

FID

FID (Fréchet inception distance)는 "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium"라는 논문에서 제시된 이미지 분포 평가 지수입니다. Visual quality나 perceptual similarity들은 두 이미지가 얼마나 비슷한지를 평가하는 반면, FID는 두 이미지 분포가 얼마나 비슷한지 평가하는 지표입니다. 따라서 SSIM, LPIPS같은 지표들은 talking face generation, super resolution같이 ground truth 이미지가 있는 경우 많이 사용되지만 FID는 단순 unconditional GAN, diffusion으로 이미지 생성하는 논문에서 많이 사용됩니다.

 

Fréchet distance 정의

Fréchet inception distance 정의

  • 이미지를 Inception-v3 net에 통과시켜서 마지막 pooling layer의 output의 feature을 사용
  • 이 feature들의 mean & covariance를 가지고 위에서 정의한 Fréchet distance 계산한 값이 Fréchet inception distance

 

728x90
728x90

'개념 정리' 카테고리의 다른 글

GAN loss 정리  (0) 2023.07.02
openCV 사용해서 Camera calibration 하기 (+팁)  (0) 2023.05.13
[정리] Earth mover's distance  (2) 2023.02.03