SinGan에서 놀았습니다.

소개



ICCV 2019 Best Paper를 수상한 SinGan에서 놀아 보았습니다.
논문 : SinGAN: Learning a Generative Model from a Single Natural Image
부록은 여기 .

SinGan의 특징


  • 각 패치 크기에 대해 패치의 내부 분포 (내부 통계량) *를 배우십시오
  • 한 장의 이미지로 학습 할 수 있으므로 많은 양의 이미지가 필요하지 않습니다.
  • 응용범위가 넓은
  • paint-to-image
  • editing
  • harmonization
  • super-resolution
  • animation


  • ※논문중에서는 internal statistics of patch나 internal distribution of patch로 표현되고 있습니다. 적절한 번역어를 알 수 없기 때문에 "패치의 내부 분포"입니다.

    구성



    (그림은 논문에서 인용)

    patch-GANs를 쌓는 것과 같은 구성으로 되어 있습니다. 먼저 노이즈에서 저해상도 이미지 $\tilde{x}_{N}$를 생성할 수 있도록 학습합니다.

    그런 다음 생성된 이미지를 업샘플링하여 노이즈를 추가하고 약간 큰 해상도의 이미지 $\tilde{x}_{N-1}$를 생성할 수 있도록 학습합니다.

    이 작업을 반복하면 패치 크기(그림 오른쪽의 노란색 테두리)마다 패치의 내부 분포가 학습됩니다(G는 모두 동일한 수신 필드). 이 구성의 목표는 이미지의 전반적인 구조와 부분적인 구조를 얻는 것입니다.

    환경 만들기



    ○ 실행 환경
    * 우분투 18.04 LTS
    * Anaconda3 2019.10.
    * GeForce GTX 970

    ◯ 절차
    1. github에서 저자의 저장소를 복제
    2. 파이썬 가상 환경 만들기

    github에서 저자의 저장소를 복제
    git clone https://github.com/tamarott/SinGAN.git
    

    파이썬 가상 환경 만들기
    $ conda create -n SinGAN python=3.6 #pythonのverは論文に合わせる
    $ cd SinGAN #落としてきたリポジトリに移動
    SinGAN$ python -m pip install -r requirements.txt #必要なパッケージをインストール
    

    학습



    readme.md의 설명대로.
    $ python main_tarin.py --input_name <training_image_file_name>
    

    이미지 크기에 따라 다르지만 학습 시간은 1 ~ 2 시간입니다.

    테스트



    종횡 scale을 1/2배, 1배, 2배로 하여 이미지를 생성해 봅니다.
    $ python random_samples.py --input_name <training_image_file_name> --mode random_samples_arbitrary_sizes --scale_h <horizontal scaling factor> --scale_v <vertical scaling factor>
    

    설정한 크기의 이미지가 생성되도록 스케일에 맞게 $z_N$의 차원을 증감하고 있습니다. 또, $z_N$의 값을 바꾸어 화상을 50장 출력하고 있으므로, 그 중(안)에서 개인적으로 좋은 것 같은 화상과 쓸모없는 화상을 픽업해 보았습니다.

    ◯balloons


    ◯birds


    ◯mountains3


    Training과 비슷한 분위기의 이미지는 생성되어 있지만 세부 사항을 보면 위화감을 느끼는 이미지가 흔들립니다.

    또, 분명히 이상한 화상도 생성되고 있어, birds는 세로로 줄어들면 새의 무리가 사라지고, mountains3는 세로로 늘리면 산과 수면 사이의 그림자가 이상하게 뻗어 버리고 있습니다.

    결론



    ICCV 2019 Best Paper를 수상한 SinGan에서 놀아 보았습니다. 이러한 분위기의 화상은 생성되고 있습니다만, 요망 부분이 늘어나거나, 판자를 누른 것처럼 같은 물체가 있으면, 이상한 화상도 많이 생성할 수 버립니다.

    scale변경의 샘플 프로그램(random_samples.py)은 $G_N$에서 밖에 화상 생성할 수 없기 때문에, 좀 더 고해상도의 $G$로부터 생성할 수 있으면 다소가 될까 생각합니다.

    SinGAN은 이미지 생성 이외에 초해상이나 애니메이션 등에도 응용할 수 있으므로, 그것은 나중에 시험해보고 싶습니다.

    좋은 웹페이지 즐겨찾기