FID

  1. Pretrained Inception V3 불러오기

    inception_model = tf.keras.applications.InceptionV3(include_top=False, 
                                  weights="imagenet", 
                                  pooling='avg')
    
  2. 실제 이미지와 생성된 이미지에 대한 임베딩 계산

  1. 계산된 실제와 생성된 이미지 임베딩을 이용하여 FID 계산
def calculate_fid(real_embeddings, generated_embeddings):
     # calculate mean and covariance statistics
     mu1, sigma1 = real_embeddings.mean(axis=0), np.cov(real_embeddings, rowvar=False)
     mu2, sigma2 = generated_embeddings.mean(axis=0), np.cov(generated_embeddings,  rowvar=False)
     # calculate sum squared difference between means
    ssdiff = np.sum((mu1 - mu2)**2.0)
    # calculate sqrt of product between cov
    covmean = linalg.sqrtm(sigma1.dot(sigma2))
    # check and correct imaginary numbers from sqrt
    if np.iscomplexobj(covmean):
       covmean = covmean.real
     # calculate score
     fid = ssdiff + np.trace(sigma1 + sigma2 - 2.0 * covmean)
     return fid

 fid = calculate_fid(real_image_embeddings, generated_image_embeddings)

KID

$$ MMD(p,q)=E_{x,x^{\prime}p}[K(x,x^{\prime})]+E_{x,x^{\prime}q}[K(x,x^{\prime})]-2E_{xp,x^{\prime}p}[K(x,x^{\prime})] $$