fidjax
1.0.0
JAX에서 Frechet Inception Distance를 깔끔하게 구현했습니다.
pathlib
API를 사용하여 GCS에서 가중치를 로드할 수 있습니다.1️⃣ FID JAX는 단일 파일이므로 프로젝트 디렉터리에 복사하면 됩니다. 또는 패키지를 설치할 수 있습니다.
pip install fidjax
2️⃣ Inception 가중치 다운로드(Matthias Wright 제공):
wget https://www.dropbox.com/s/xt6zvlvt22dcwck/inception_v3_weights_fid.pickle ? dl=1
3️⃣ 원하는 해상도의 ImageNet 참조 통계를 다운로드합니다(다른 데이터세트에 대해 직접 생성).
wget https://openaipublic.blob.core.windows.net/diffusion/jul-2021/ref_batches/imagenet/64/VIRTUAL_imagenet64_labeled.npz
wget https://openaipublic.blob.core.windows.net/diffusion/jul-2021/ref_batches/imagenet/128/VIRTUAL_imagenet128_labeled.npz
wget https://openaipublic.blob.core.windows.net/diffusion/jul-2021/ref_batches/imagenet/256/VIRTUAL_imagenet256_labeled.npz
wget https://openaipublic.blob.core.windows.net/diffusion/jul-2021/ref_batches/imagenet/512/VIRTUAL_imagenet512.npz
4️⃣ JAX에서 활성화, 통계 및 점수를 계산합니다.
import fidjax
import numpy as np
weights = './inception_v3_weights_fid.pickle?dl=1'
reference = './VIRTUAL_imagenet128_labeled.npz'
fid = fidjax . FID ( weights , reference )
fid_total = 50000
fid_batch = 1000
acts = []
for range ( fid_total // fid_batch ):
samples = ... # (B, H, W, 3) jnp.uint8
acts . append ( fid . compute_acts ( samples ))
stats = fid . compute_stats ( acts )
score = fid . compute_score ( stats )
print ( float ( score )) # FID
데이터세트 | 모델 | FID 잭스 | 오픈AI TF |
---|---|---|---|
이미지넷 256 | ADM(안내, 업샘플링) | 3.937 | 3.943 |
클라우드 스토리지를 지원하는 pathlib.Path
구현을 통해 파일을 가리킵니다. 예를 들어 GCS의 경우:
import elements # pip install elements
import fidjax
weights = elements . Path ( 'gs://bucket/fid/inception_v3_weights_fid.pickle' )
reference = elements . Path ( 'gs://bucket/fid/VIRTUAL_imagenet128_labeled.npz' )
fid = fidjax . FID ( weights , reference )
사용자 정의 데이터세트에 대한 참조 통계를 생성합니다.
import fidjax
import numpy as np
weights = './inception_v3_weights_fid.pickle?dl=1'
fid = fidjax . FID ( weights )
acts = fid . compute_acts ( images )
mu , sigma = fid . compute_stats ( acts )
np . savez ( 'reference.npz' , { 'mu' : mu , 'sigma' : sigma })
Github에 문제를 제출해 주세요.