GCP에서 돈을 들이지 않고 Stylegan2의 Finetuning
이번에는 인간의 얼굴을 생성하는 모델을 Finetune하여 anime-faces를 생성하게 한다.
또, 머신도 금도 없기 때문에, GCP의 VM을 사용해 가능한 한 비용을 억제한다.
참고
htps : // 기주 b. 코 m / n V ぁ bs / 스타 암 2
htps : // 토와 rds 였어 s 시엔세. 이 m / style 암 - v2 - s - 온 - t 라이 닌 g - 앙 d - 텐 ts 파세 - xp ぉ 라치 온 - 51cf96584b3
환경
[GCP]
Machine type:
custom (8 vCPUs, 50 GB memory)
GPUs:
1 x NVIDIA Tesla K80
Disc:
200GB
Framework:
TensorFlow Enterprise 1.15
※ 학습 도중에 오류가 발생하므로 메모리와 디스크는 괜찮습니다.
※gpu의 quora를 늘리는 것을 잊지 않도록
※Framework에 주의해, Stylegan2는 tf2.0에서는 움직이지 않는다
※가격$0.667/hour
준비
1. 원래 모델을 다운로드
아래에서 faces (FFHQ config-e 256x256) 다운로드
htps : // 레포슈 b. 이 m / py 텐 / 데에 p ぇあ r ニン g / 쥬 s 찡 삐 k 네 y 어 ぇ 소메 뿌 t 같다 dsty ぇ 암 2. HTML
gdown https://drive.google.com/uc?id=1BUL-RIzXC7Bpnz2cn230CbA4eT7_Etp0
2. 데이터 세트 다운로드
이번에는 kaggle에서 다음을 사용하십시오.
htps //w w. 꺄gぇ. 코 m / spl 치에 r / 아니 메후 세타 타세 t
pip install -q kaggle
cp kaggle.json ~/.kaggle/
chmod 600 ~/.kaggle/kaggle.json
kaggle datasets download -d splcher/animefacedataset
unzip animefacedataset.zip -d animefacedataset
3.Stylegan2의 저장소를 Clone
git clone https://github.com/shawwn/stylegan2.git
4. 데이터 세트의 이미지를 학습용으로 가공
Stylegan2의 학습용 화상은 정사각형이고 변의 사이즈가 2의 거듭제곱이 아니면 안되기 때문에, 사전에 화상의 사이즈를 가공해 둔다. 이번에는 파이썬 스크립트를 사용하여 256 * 256 크기로 가공했습니다.
from PIL import Image
import PIL
import os
import glob
filenames = glob.glob("~/animefacedataset/images/*.jpg")
stylegan_dir = '~/stylegan2/animefacedataset/'
base_width = 256
for filename in filenames:
new_filename = stylegan_dir + filename.split('/')[-1]
image = Image.open(filename)
width_percent = (base_width / float(image.size[0]))
hsize = int((float(image.size[1]) * float(width_percent)))
image = image.resize((base_width, hsize), PIL.Image.ANTIALIAS)
if image.size[0] == image.size[1] == base_width:
image.save(new_filename)
5. 데이터 세트 생성
이미지를 multi-resolution TFRecords로 변환
리포지토리에 포함되어 있는
dataset_tool.py
(을)를 사용해 간단하게 변환할 수 있다.자세한 내용은
htps : // 기주 b. 코 m / n V ぁ bs / 스타 암 2 # p reparin g
python dataset_tool.py create_from_images ~/stylegan2/datasets/animedataset ~/animefacedataset
[오류 있음]
다음은 정사각형이 아닌 이미지가 포함된 경우 발생하는 오류입니다.
Loading images from "./animefacedataset"
Creating dataset "./datasets/animedataset"
Added 16 images.
Traceback (most recent call last):
File "dataset_tool.py", line 642, in <module>
execute_cmdline(sys.argv)
File "dataset_tool.py", line 637, in execute_cmdline
func(**vars(args))
File "dataset_tool.py", line 526, in create_from_images
tfr.add_image(img)
File "dataset_tool.py", line 78, in add_image
assert img.shape == self.shape
AssertionError
6.Finetuning 용 스크립트 개조
원래
run_training.py
를 개조하여 Finetuning을 수행 할 수 있습니다.run()에 다음을 작성한다
run_training.py
train.resume_pkl = "/home/kitigai/ffhq-256-config-e-003810.pkl" # 1でダウンロードした学習元モデル, None = train from scratch.
train.resume_kimg = 3810.0 # 学習元モデルの学習進捗 別に0.0でも良いと思う.
train.resume_time = 0.0 # 学習元モデルの学習時間 分からないし別に0.0でも良いと思う.
원래
metrics/frechet_inception_distance.py
가 부드럽습니다. pkl을 다운로드하려고하면 "Google Drive quota has been exceeded"가되므로 로컬로 다운로드했습니다. pkl을 사용하도록 변경frechet_inception_distance.py
def _evaluate(self, Gs, Gs_kwargs, num_gpus):
minibatch_size = num_gpus * self.minibatch_per_gpu
#inception = misc.load_pkl('https://nvlabs-fi-cdn.nvidia.com/stylegan/networks/metrics/inception_v3_features.pkl')
inception = misc.load_pkl('/home/kitigai/inception_v3_features.pkl', 'inception_v3_features.pkl')
activations = np.empty([self.num_images, inception.output_shape[1]], dtype=np.float32)
7. 학습 시작
명령에 대한 자세한 내용은
htps : // 기주 b. 코 m / n V ぁ bs / 스타 암 2 # t 라이 마늘 g-와 rks
python run_training.py --num-gpus=1 --data-dir=datasets --config=config-e \
--dataset=animedataset --mirror-augment=true
[오류 있음]
--data-dir 또는 --dataset에 전달하는 경로에 "/"또는 "."가 포함되어 있으면 오류가 발생합니다
# ダメなやつ
--data-dir=./datasets
# ダメなやつ2
--dataset=/home/kitigai/stylegan2/datasets/animedatasets
RAM : 30GB의 VM을 사용하고 있으면 이하의 에러가 되었기 때문에 50GB까지 늘렸다. 케치하지 마라.
Traceback (most recent call last):
File "run_training.py", line 192, in <module>
main()
File "run_training.py", line 187, in main
run(**vars(args))
File "run_training.py", line 120, in run
dnnlib.submit_run(**kwargs)
File "/home/myuser/stylegan2-master/dnnlib/submission/submit.py", line 343, in submit_run
return farm.submit(submit_config, host_run_dir)
File "/home/myuser/stylegan2-master/dnnlib/submission/internal/local.py", line 22, in submit
return run_wrapper(submit_config)
File "/home/myuser/stylegan2-master/dnnlib/submission/submit.py", line 280, in run_wrapper
run_func_obj(**submit_config.run_func_kwargs)
File "/home/myuser/stylegan2-master/training/training_loop.py", line 341, in training_loop
metrics.run(pkl, run_dir=dnnlib.make_run_dir_path(), data_dir=dnnlib.convert_path(data_dir), num_gpus=num_gpus, tf_config=tf_config)
File "/home/myuser/stylegan2-master/metrics/metric_base.py", line 151, in run
metric.run(*args, **kwargs)
File "/home/myuser/stylegan2-master/metrics/metric_base.py", line 67, in run
self._evaluate(Gs, Gs_kwargs=Gs_kwargs, num_gpus=num_gpus)
File "/home/myuser/stylegan2-master/metrics/frechet_inception_distance.py", line 54, in _evaluate
labels = self._get_random_labels_tf(self.minibatch_per_gpu)
File "/home/myuser/stylegan2-master/metrics/metric_base.py", line 140, in _get_random_labels_tf
return self._get_dataset_obj().get_random_labels_tf(minibatch_size)
File "/home/myuser/stylegan2-master/metrics/metric_base.py", line 121, in _get_dataset_obj
self._dataset_obj = dataset.load_dataset(data_dir=self._data_d![3810.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896087/955d309d-eff5-535a-ba30-c0b6a31b50b3.png)
ir, **self._dataset_args)
File "/home/myuser/stylegan2-master/training/dataset.py", line 192, in load_dataset
dataset = dnnlib.util.get_obj_by_name(class_name)(**kwargs)
File "/home/myuser/stylegan2-master/training/dataset.py", line 86, in __init__
self._np_labels = np.zeros([1<<30, 0], dtype=np.float32)
MemoryError: Unable to allocate 0 bytes for an array with shape (1073741824, 0) and data type float32
결과
얼굴의 방향이나 입가의 표정, 헤어스타일에 주목하면 최초의 인물의 얼굴과 애니메이션 얼굴에 관련성이 있는 것을 알 수 있다. 이것은 생성 이미지의 대략적인 곳을 결정하는 네트워크의 저레벨 레이어가 거의 공통되기 때문입니다. 원래 모델과 애니메이션 모델에 같은 latent space를 주면 비슷한 얼굴이 생기고 재미있어요.
학습 30분 후
아직
학습 10시간 후
이미 그렇다.
학습 48시간 후
좋은
가격
꽤 걸렸다. 미안해.
요약
※비교:1부터 학습한 경우의 예상 시간
이번에는 config-e이므로 아래보다 시간이 걸리지 않지만 여전히 10d가 걸릴 것입니다.
구성
Resolution
Total kimg
1 GPU
2 GPUs
4 GPUs
8 GPUs
GPU mem
config-f
256×256
25000
32d
13h
16d
23h
8d
Reference
이 문제에 관하여(GCP에서 돈을 들이지 않고 Stylegan2의 Finetuning), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitigai/items/dc8af704c65587889ba9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)