이 저장소는 케라에서 안정적인 확산을 미세 조정하기위한 코드를 제공합니다. 이 대본에서 얼굴을 껴안아 수정됩니다. 미세 조정에 사용되는 미리 훈련 된 모델은 kerascv에서 나옵니다. 원래 모델에 대해 알기 위해이 문서를 확인하십시오.
이 저장소에 제공된 코드는 연구 목적으로 만 사용됩니다 . 잠재적 인 사용 사례 및 제한 사항에 대한 자세한 내용은이 섹션에서 확인하십시오.
이 모델을로드하면 https://raw.githubusercontent.com/compvis/stable-diffusion/main/license에서 CreativeMl Open Rail-M 라이센스를 수락합니다.
이 저장소의 동반 리소스를 찾고 있다면 다음은 다음과 같습니다.
목차 :
이 저장소에는 안정적인 확산을위한 다양한 배포 패턴을 포괄하는 자매 저장소 (Keras-SD-Serving)가 있습니다.
2023 년 1 월 13 일 업데이트 :이 프로젝트는 Google이 주최 한 최초의 Keras Community Prize 대회에서 2 위를 차지했습니다.
Hugging Face의 원본 스크립트에 따라이 저장소는 Pokemon 데이터 세트를 사용합니다. 그러나 tf.data 와 더 잘 작동하도록 재생되었습니다. 데이터 세트의 재생 버전은 여기에서 호스팅됩니다. 자세한 내용은 해당 링크를 확인하십시오.
finetune.py 에서 미세 조정 코드가 제공됩니다. 교육을 실행하기 전에 종속성 ( requirements.txt 참조)이 설치되어 있는지 확인하십시오.
python finetune.py 실행하여 기본 인수로 교육을 시작할 수 있습니다. 지원되는 명령 줄 인수에 대해 알아 보려면 python finetune.py -h 실행하십시오. --mp 플래그를 통과하여 혼합-정제 교육을 활성화 할 수 있습니다.
훈련을 시작할 때 확산 모델 체크 포인트는 현재 손실이 이전 손실보다 낮은 경우에만 시대적으로 생성됩니다.
OOM과 더 빠른 교육을 피하려면 적어도 V100 GPU를 사용하는 것이 좋습니다. 우리는 A100을 사용했습니다.
주목할 몇 가지 중요한 세부 사항 :
교육 세부 사항 :
256x256과 512x512의 두 가지 해상도에 대한 모델을 미세 조정했습니다. 우리는이 두 가지 다른 해상도로 미세 조정을 위해 배치 크기와 에포크 수만 다양했습니다. 우리는 그라디언트 축적을 사용하지 않았기 때문에이 코드 스 니펫을 사용하여 에포크 수를 도출합니다.
python finetune.py --batch_size 4 --num_epochs 577python finetune.py --img_height 512 --img_width 512 --batch_size 1 --num_epochs 72 --mp256x256 해상도의 경우 컴퓨팅 시간을 절약하기 위해 에포크 수를 의도적으로 줄였습니다.
미세 조정 중량 :
여기에서 미세 조정 된 확산 모델 가중치를 찾을 수 있습니다.
이 저장소에 사용 된 기본 포켓몬 데이터 세트는 다음 구조와 함께 제공됩니다.
pokemon_dataset/
data.csv
image_24.png
image_3.png
image_550.png
image_700.png
... data.csv 다음과 같습니다.
사용자 정의 데이터 세트 가이 구조를 따르는 한 dataset_archive 를 제외한 현재 코드베이스의 어떤 것도 변경할 필요가 없습니다.
데이터 세트에 이미지 당 여러 캡션이있는 경우 교육 중 이미지 당 캡션 풀 중 하나를 무작위로 선택할 수 있습니다.
데이터 세트를 기반으로 하이퍼 파라미터를 조정해야 할 수도 있습니다.
import keras_cv
import matplotlib . pyplot as plt
from tensorflow import keras
IMG_HEIGHT = IMG_WIDTH = 512
def plot_images ( images , title ):
plt . figure ( figsize = ( 20 , 20 ))
for i in range ( len ( images )):
ax = plt . subplot ( 1 , len ( images ), i + 1 )
plt . title ( title )
plt . imshow ( images [ i ])
plt . axis ( "off" )
# We just have to load the fine-tuned weights into the diffusion model.
weights_path = keras . utils . get_file (
origin = "https://huggingface.co/sayakpaul/kerascv_sd_pokemon_finetuned/resolve/main/ckpt_epochs_72_res_512_mp_True.h5"
)
pokemon_model = keras_cv . models . StableDiffusion (
img_height = IMG_HEIGHT , img_width = IMG_WIDTH
)
pokemon_model . diffusion_model . load_weights ( weights_path )
# Generate images.
generated_images = pokemon_model . text_to_image ( "Yoda" , batch_size = 3 )
plot_images ( generated_images , "Fine-tuned on the Pokemon dataset" ) weights_path 가져올 수 있습니다 ( diffusion_model 과 호환해야 함). 코드 스 니펫을 재사용 할 수 있습니다.
추론 코드를 사용하려면이 Colab 노트북을 확인하십시오.
처음에, 우리는 256x256의 해상도에 대한 모델을 미세 조정했습니다. 다음은 원래 모델의 결과와 비교와 함께 몇 가지 결과입니다.
| 이미지 | 프롬프트 |
|---|---|
| 요다 | |
| 날개가있는 로봇 고양이 | |
| 헬로 키티 |
미세 조정 된 모델이 원래 모델보다 더 안정적인 출력을 가지고 있음을 알 수 있습니다. 결과가 미적으로 훨씬 더 개선 될 수 있지만 미세 조정 효과가 보입니다. 또한, 우리는 256x256 해상도 (에포크 수와 배치 크기를 제외하고)를 포옹하는 얼굴의 스크립트와 동일한 하이퍼 파라미터를 따랐습니다. 하이퍼 파라미터가 더 좋으면 결과가 향상 될 것입니다.
512x512 해상도의 경우 비슷한 것을 관찰합니다. 그래서 우리는 unconditional_guidance_scale 매개 변수를 실험하고 40으로 설정되면 (다른 인수를 고정 상태로 유지하면서) 결과가 더 좋아 졌음을 알았습니다.
| 이미지 | 프롬프트 |
|---|---|
| 요다 | |
| 날개가있는 로봇 고양이 | |
| 헬로 키티 |
참고 : 512x512의 미세 조정은이 글을 쓰는 시점에서 여전히 진행 중입니다. 그러나 분산 훈련 및 그라디언트 축적의 존재없이 단일 시대를 완료하는 데 많은 시간이 걸립니다. 위의 결과는 60 번째 에포크 이후에 파생 된 체크 포인트에서 나온 것입니다.
Lambda Labs는 유사한 레시피 (그러나 더 많은 최적화 단계를 위해 훈련)를 통해 놀라운 결과를 보여줍니다.