이번엔 StyleGAN3의 실제 구현에 대해 말씀드리겠습니다.
Fourier Features부터 서서히 이해하려고 해서 좀 시간이 많이 걸렸습니다 ㅜ NTK랑 연결되고 그래서 공부할게 계속 불어났네요
근데 NTK는 결국 이해하지 못했고, 그냥 무한한 width를 갖는 mlp와 동치라는 것과 Fourier Features에서는 분석 툴로서 사용됐다는 점만 짚어도 충분 했습니다.
Measure
우선 이 논문의 목적에 대해 다시 환기하면, 가장 중요한 부분은 Translation Equivariance 입니다. 그래서 이에 대한 measure 또한 필요한데, PNSR을 약간 변형한 measure를 제안합니다.
위 식에서 t는 translation을 의미합니다. 그냥 말 그대로 Translation Equivariance에 대한 PNSR 이라고 보면 될 것 같습니다 !
Fourier features and baseline simplification
StyleGAN3에서는 StyleGAN2와 다르게 constant가 아닌 Fourier features를 사용합니다. 원래 이 fourier features는 implicit representation task에서 low dimensional input이 들어올 때 high frequency 정보를 학습할 수 있게 도와준 방법인데, 이는 본 모델의 목적성과 잘 맞다고 할 수 있습니다.
근데 제가 알기로는 fourier features는 sin, cos 둘 다 매핑해서 NTK로 표현했을때 stationary, tunability 를 나타냈는데 본 모델의 코드는 sin 으로만 매핑하더라구요.. 뭐 똑같은 sinusoid라 문제가 없을 것 같기도 하구요..
fourier features의 원래 논문에서는 scale factor는 1, frequency factor는 정규 분포에서 가져왔을 때 가장 좋은 결과를 내놓았다고 했는데, 본 모델 구현 시에도 동일한 방법을 사용했습니다.
그리고 Appendix F. 에 나와있는 내용인데 단순한 fourier mapping 만을 사용하는게 아닌, transformation을 적용합니다. (translation, rotation). 이는 affine_grid function을 사용합니다.
이러한 Fourier Features 적용하는 것 뿐만이 아닌, 전 포스트에서 언급했던 것 처럼, per pixel noise injection 또한 없앴습니다.
추가로, mixing regularization, path length regularization, output skip connection 구조 또한 삭제했습니다.
그리고 본 논문에서는 훈련 중 gradient magnitude dynamics가 모델의 성능과 큰 관련이 있을 것이라고 예상했고, 이를 직접 적용해주기 위해 각 convolution 이전에 간단한 normalization 방법을 사용했습니다. 이는 EMA로 pixel, feature map에 대해 std를 tracking 한 다음 나눠주는 방법을 사용했습니다.
Boundaries and Upsampling
앞 포스트에서 언급했던 의도하지 않은 position information 주입을 막기 위해 crop 하는 방법을 사용했습니다. 원래의 CNN은 크기가 의도한 크기와 일치하게끔, padding으로 과하게 조정하는 방법을 사용합니다. 이렇게 사용하기 보다, 각 층에서 원래의 크기보다 약간 더 큰 결과가 나오게 하고 이에 대해 crop 하여 크기를 맞춰주는 방법을 사용했습니다. 이 때 각 방향으로 10pixel의 마진 정도가 허용 가능하다고 합니다.
그리고 aliasing을 막기 위해 기존에 있는 bilinear interpolation 과 같은 방법이 아닌 직접 만든 필터를 사용하여 upsampling을 진행합니다. (Kaiser window, sinc function)
Filtered nonlinearities
앞 포스트에서 언급했던 것처럼 non linearity의 경우, upsampling - nonlinear function - downsampling 의 방법을 사용합니다.
Non critical sampling
원래 critical sampling이란, cutoff를 stopband 부분과 완전히 일치시키는 것 입니다. 이렇게 하는 이유는 anti aliasing과 high frequency detail 사이의 balance를 맞춰주기 위함입니다. 하지만 본 논문에서 더 초점을 맞추고 있는 부분은 translation equivariance 인데, aliasing은 이러한 성질에 굉장히 안좋은 영향을 미치기 때문에, 본 논문에서는 cutoff를 좀 더 엄격하게 지정합니다. (oversampling이라고 하더라구요.)
실제로 구현 시 마지막 highest resolution을 내놓는 layer를 제외하고는 모두 lower cutoff를 갖게 합니다.
이렇게 마지막 layer를 제외하는 이유는 generator가 최종 이미지 생성 시, 선명한 이미지를 생성해내야하기 때문입니다.
Flexible Layer Specifications
위에서 소개드렸던 것과 같이, 많은 수정을 거쳤는데도 여러 문제점이 남아있었다고 합니다.
StyleGAN2에서는 고정된 sampling rate를 사용했기 때문에 cutoff, frequency와 같은 설정도 모든 레이어에 대해 동일했습니다. 하지만, 본 모델은 layer 별로 이러한 설정을 조정할 수 있기 때문에 각 레이어에 대해 따로 지정해줄 필요가 있습니다. 이를 Flexible Layer라고 합니다.
자세한 설정 사항은 논문에 명시되어 있습니다.