Deepmind의 미리 훈련 된 무게로 Deepmind의 Biggan 모델을 Op-for-OP Pytorch를 재 구현합니다.
이 저장소에는 Andrew Brock, Jeff Donahue 및 Karen Simonyan의 고 충실도 자연 이미지 합성을위한 대규모 GAN 훈련과 함께 발표 된 Deepmind 's Biggan의 Op-For-OP Pytorch Rementation이 포함되어 있습니다.
Biggan 의이 Pytorch 구현에는 DeepMind에 의해 사전 각인 128x128, 256x256 및 512x512 모델이 제공됩니다. 또한 TensorFlow 허브 모델에서 이러한 모델을 다운로드하고 변환하는 데 사용되는 스크립트를 제공합니다.
이 상환은 Tensorflow 버전의 원시 계산 그래프에서 수행되었으며 Tensorflow 버전 (1E-5의 출력 차이의 분산)과 유사하게 작동합니다.
이 구현에는 차별기의 가중치가 해제되지 않았기 때문에이 구현에는 발전기 만 포함되어 있습니다 (판별 자의 구조는 생성기와 매우 유사하므로 매우 쉽게 추가 할 수 있습니다.
이 repo는 Python 3.6 및 Pytorch 1.0.1에서 테스트되었습니다.
Pytorch Pretrated Biggan은 다음과 같이 PIP에서 설치할 수 있습니다.
pip install pytorch-pretrained-biggan단순히 간과 놀고 싶다면 충분해야합니다.
변환 스크립트와 ImageNet 유틸리티를 사용하려면 추가 요구 사항, 특히 Tensorflow 및 NLTK가 필요합니다. 모든 요구 사항을 설치하려면 full_requirements.txt 파일을 사용하십시오.
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txt이 저장소는 관련 간행물에 설명 된 바와 같이 128, 256 및 512 픽셀 해상도에 대한 사전 여분의 "깊은"버전에 대한 직접적이고 간단한 액세스를 제공합니다. 모델에 대한 몇 가지 세부 사항은 다음과 같습니다.
BigGAN-deep-128 : 128x128 픽셀 이미지를 생성하는 50.4m 매개 변수 모델, 모델 덤프 무게 201 MB,BigGAN-deep-256 : 256x256 픽셀 이미지를 생성하는 55.9m 매개 변수 모델, 모델 덤프 가중치 224MB,BigGAN-deep-512 : 512x512 픽셀 이미지를 생성하는 56.2m 매개 변수 모델, 모델 덤프 가중치 225MB.아키텍처에 대한 자세한 내용은 논문의 부록 B를 참조하십시오.
모든 모델은 0과 1 사이의 51 절단 값에 대한 사전 계산 된 배치 규범 통계를 포함합니다 (자세한 내용은 논문의 부록 C.1 참조).
다음은 미리 훈련 된 모델과 함께 BigGAN 사용하는 빠른 시작 예입니다.
이러한 클래스 및 방법에 대한 자세한 내용은 아래의 문서 섹션을 참조하십시오.
import torch
from pytorch_pretrained_biggan import ( BigGAN , one_hot_from_names , truncated_noise_sample ,
save_as_images , display_in_terminal )
# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging . basicConfig ( level = logging . INFO )
# Load pre-trained model tokenizer (vocabulary)
model = BigGAN . from_pretrained ( 'biggan-deep-256' )
# Prepare a input
truncation = 0.4
class_vector = one_hot_from_names ([ 'soap bubble' , 'coffee' , 'mushroom' ], batch_size = 3 )
noise_vector = truncated_noise_sample ( truncation = truncation , batch_size = 3 )
# All in tensors
noise_vector = torch . from_numpy ( noise_vector )
class_vector = torch . from_numpy ( class_vector )
# If you have a GPU, put everything on cuda
noise_vector = noise_vector . to ( 'cuda' )
class_vector = class_vector . to ( 'cuda' )
model . to ( 'cuda' )
# Generate an image
with torch . no_grad ():
output = model ( noise_vector , class_vector , truncation )
# If you have a GPU put back on CPU
output = output . to ( 'cpu' )
# If you have a sixtel compatible terminal you can display the images in the terminal
# (see https://github.com/saitoha/libsixel for details)
display_in_terminal ( output )
# Save results as png images
save_as_images ( output )


DeepMind의 미리 훈련 된 모델 중 하나를로드하려면 BigGAN 모델을 from_pretrained() 로 인스턴스화합니다.
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )어디
PRE_TRAINED_MODEL_NAME_OR_PATH 는 다음 중 하나입니다.
목록에서 선택한 Google AI 또는 OpenAi의 미리 훈련 된 모델의 바로 가기 이름 :
biggan-deep-128 : 12 층, 768- 히든, 12- 헤드, 110m 매개 변수biggan-deep-256 : 24 계층, 1024- 히든, 16 개의 헤드, 340m 매개 변수biggan-deep-512 : 12 층, 768- 히든, 12- 헤드, 110m 매개 변수포기 된 사전 모델 아카이브의 경로 또는 URL :
config.json : 모델의 구성 파일 및pytorch_model.bin 사전 훈련 된 BigGAN 인스턴스의 pytorch 덤프 (일반적인 torch.save() 로 저장). PRE_TRAINED_MODEL_NAME_OR_PATH 바로 가기 이름 인 경우, 미리 훈련 된 가중치는 AWS S3에서 다운로드되고 (여기 링크 참조) 향후 다운로드를 피하기 위해 캐시 폴더에 저장됩니다 (캐시 폴더는 ~/.pytorch_pretrained_biggan/ )에서 찾을 수 있습니다.
cache_dir 미리 훈련 된 모델 가중치를 다운로드하고 캐시하기 위해 특정 디렉토리의 선택적 경로가 될 수 있습니다.
BigGANConfig 는 Biggan 구성을 저장하고로드하는 클래스입니다. config.py 에 정의되어 있습니다.
다음은 속성에 대한 몇 가지 세부 사항입니다.
output_dim : 미리 훈련 된 모델의 GAN (128, 256 또는 512)의 출력 해상도,z_dim : 노이즈 벡터의 크기 (미리 훈련 된 모델의 경우 128).class_embed_dim : 클래스 임베딩 벡터의 크기 (미리 훈련 된 모델의 경우 128).channel_width : 각 채널의 크기 (미리 훈련 된 모델의 경우 128).num_classes : ImageNet과 같은 교육 데이터 세트의 클래스 수 (미리 훈련 된 모델의 경우 1000).layers : 레이어 정의 목록. 레이어에 대한 각 정의는 [레이어의 상향 샘플? (bool), 입력 채널 수 (int), 출력 채널 수 (int)]attention_layer_position : 계층 계층에서 자체 변환 계층의 위치 (미리 훈련 된 모델의 경우 8).eps : 스펙트럼 및 배치 정규화 층에 사용할 Epsilon 값 (미리 훈련 된 모델의 경우 1E-4).n_stats : 0과 1 사이의 다양한 잘림 값과 관련된 배치 정규화 층에 대한 사전 계산 통계 수 (미리 훈련 된 모델의 경우 51). BigGAN model.py 에 정의 된 Biggan의 Pytorch 모델 ( torch.nn.Module )입니다. 이 모델은 클래스 임베딩 (선형 층)과 일련의 컨벤션 및 조건부 배치 규범이있는 발전기로 구성됩니다. 사전 훈련 된 가중치가 방출되지 않았기 때문에 차별기는 현재 구현되지 않습니다.
입력 및 출력은 Tensorflow 모델 입력 및 출력과 동일 합니다.
우리는 여기에 자세히 설명합니다.
BigGAN 입력 으로 사용합니다.
z : Torch.floattensor shape [batch_size, config.z_dim]가 잘린 정규 분포에서 샘플링 된 노이즈와class_label : 옵션 토치. 유형 0은 sentence A 에 해당하고 1 형은 sentence B 토큰에 해당합니다 (자세한 내용은 Bert 논문 참조).truncation : 0 (포함되지 않음)과 1 사이의 플로트. 노이즈 벡터를 생성하는 데 사용되는 잘린 정상의 잘림. 이 절단 값은 배치 규범 층에 대한 사전 계산 통계 (평균 및 차이) 사이를 선택하는 데 사용됩니다. BigGAN 모델에 따라 해상도가 128, 256 또는 512 인 모양 배열 [batch_size, 3, 해상도, 해상도를 출력합니다 .
우리는 모델을 사용하기위한 몇 가지 유틸리티 방법을 제공합니다. 그것들은 utils.py 로 정의됩니다.
다음은 다음 방법에 대한 자세한 내용입니다.
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
잘린 노이즈 벡터를 만듭니다.
convert_to_images(obj) :
이미지 목록에서 Biggan에서 출력 텐서를 변환하십시오.
save_as_images(obj, file_name='output') :
저장된 이미지 목록에서 Biggan에서 출력 텐서를 변환하고 저장하십시오.
file_name_{image_number}.png 로 저장됩니다 display_in_terminal(obj) :
터미널의 Biggan에서 출력 텐서를 변환하고 표시합니다. 이 기능은 libsixel 사용하며 Libsixel 호환 단자에서만 작동합니다. 자세한 내용은 https://github.com/saitoha/libsixel을 참조하십시오.
file_name_{image_number}.png 로 저장됩니다 one_hot_from_int(int_or_list, batch_size=1) :
클래스 인덱스 또는 클래스 지수 목록에서 일대일 벡터를 만듭니다.
len(int_or_list) == batch_size 있어야합니다. one_hot_from_names(class_name, batch_size=1) :
Imagenet 클래스 ( 'Tennis Ball', 'Daisy', ...)의 이름에서 일대일 벡터를 만듭니다. 우리는 NLTK의 WordNet 검색을 사용하여 Imagenet의 관련 Synset을 찾고 첫 번째를 가져갑니다. 우리가 그것을 찾을 수 없다면, 우리는 클래스 이름의 hyponyms와 hypernyms를 봅니다.
Tensorflow Hub에서 Tensorflow 모델을 다운로드하여 변환하는 스크립트는 ./scripts에 제공됩니다.
스크립트는 다음과 같이 직접 사용할 수 있습니다.
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh