SinGAN

YoonJ·2021년 11월 28일
0

참고 Github

https://github.com/tamarott/SinGAN

주의!
해당 코드는 torch 1.4.0, torchvision 0.5.0 버전으로 사용 가능하다. 최신 버전을 사용하려면 해당 Github를 사용하면 되지만, 논문과 완전히 동일한 결과가 도출되지는 않는다. 따라서, 해당 라이브러리들의 버전을 맞추고 진행했다.

학습 환경

  • Colab pro
  • GPU
  • 고용량 RAM

Train

%run main_train.py --input_name <input_file_name>

각 scale 마다 25단위로 iter 횟수를 보여주며 한 scale 당 2000번의 iteration을 진행한다. scale 값은 따로 정해져 있지 않으며, 대부분 scale 7, 8에서 학습을 종료한다. (6번도 있었음!)

time 라이브러리를 이용해 학습시간을 측정했을 때, 최소 20분 (scale = 6)에서 최대 58분 (scale = 8)의 분포를 보였으며 평균 45~50분의 학습 시간을 소요했다.

Paint2Image

%run paint2image.py --input_name <training_image_file_name> --ref_name <paint_image_file_name> --paint_start_scale <scale_to_inject>

paint_start_scale = 1은 random noise부터 시작하는 결과로 오히려 원본에서 멀어지는 양상을 보였으며, 대체로 paint_start_scale = 2, 3의 경우가 paint image를 살리면서 train image의 특징을 살릴 수 있었다.

Example

우선, 테스트를 위해 그림 2개는 논문에 존재하는 예제를 가지고 진행했다.

1. 그림 1

학습은 scale 6, 약 20여분 (1286초)가 걸렸다.

2. 그림 2

학습은 scale 8, 약 48여분 (2936초)가 걸렸다.

3. 그림 3

학습은 scale 8, 약 48여분 (2930초)가 걸렸다.

4-1. 그림 4-1

4-2. 그림 4-2

4-3. 그림 4-3

학습은 scale 8, 약 58여분 (3519초)가 걸렸다.

총평

일반적으로 학습은 scale 8, 평균 45~50분 정도 걸린다. paint2image의 경우, paint_start_scale = 1은 random noise부터 시작하는 결과로 오히려 원본에서 멀어지는 양상을 보였으며, 대체로 paint_start_scale = 2, 3의 경우가 paint image를 살리면서 train image의 특징을 살릴 수 있었다.

또한, 그림 4-1, 그림 4-2을 보아 원본 이미지에서 사용한 색상을 그대로 사용하는 것이 더욱 좋은 결과를 도출하는 것으로 예상된다. (SinGAN을 사용하게 된다면 웹데모에서 해당 사항도 고려해야할 것으로 생각된다.)

따라서, 사전에 정한 Input Image N장을 학습시켜 각각의 모델을 만든 후 사용자로부터 Input Image에 대한 Reference Image(브러쉬 질을 한 image)를 입력받는다. 해당 Reference Image통해 paint_start_scale = 2 혹은 3을 argument로 하여 paint to image task를 진행할 수 있다.

0개의 댓글