휴먼스케이프 Software engineer Covy입니다.
본 포스트에서는 StyleGAN을 이용한 UGATIT 논문에서 구현한 selfie2anime를 직접 실습해보는 시간을 가지려고 합니다.
논문에 대해서 읽어보시고 싶은 분은 이곳을 참고하시면 좋고, 코드를 돌려보고 싶은 분들은 이곳을 참고하시면 좋습니다.
selfie2anime (left: soyeon from (G)-idle, right: animated selfie)
Objective
앞서 링크를 드린 제 repository의 readme를 읽으시면, 어렵지 않게 이미지를 애니메이션화하실 수 있습니다. Readme에도 적혀있지만, 저는 pretrained model 과 이를 이용해 image transaltion 과정을 간단하게 구현한 github code를 fork해 가져와서 조금 더 구현을 따라하기에 애로사항이 없도록 그 과정을 정리해 드리려고 합니다.
그렇기에, readme만으로 구현을 따라해보실 수 있다 싶은 분들은 가볍게만 읽어주시면 좋을 것 같습니다.
Method
1. Fork repository
가장 첫 과정은 제 repository에서 fork를 해 가지고 계신 로컬 저장소에 코드를 저장하는 과정입니다.
fork repository
위의 그림에서 붉은 박스 내에 있는 주소를 복사한 뒤에 본인의 terminal에서 다음과 같이 작성하시면 됩니다.
git clone https://github.com/REPOSITORY_URL
2. install tensorflow
다음으로 python 3.6.5 version을 설치한 뒤에 tensorflow library를 설치해야 합니다. 이 때, tensorflow는 2.0버전 미만으로 설치를 진행해야 하는데, 그 이유는 구현해 놓은 코드에서 2.0버전 이후로 삭제된 함수등을 사용하고 있기 때문입니다.
이를 위해서 저는 python 3.6.5 version 을 설치하여 pip를 이용해 tensorflow 1.8 version을 설치하여 구현을 진행했습니다. pip를 사용하여 tensorflow를 설치하는 방법은 아래와 같습니다.
3. install requirements
다음으로 코드를 실행하는데 필요한 라이브러리를 설치해야 합니다. 필요한 라이브러리를 정리하고, 다음과 같이 설치할 수 있습니다.
이 때, 저는 dlib를 설치할 때 cmake가 설치되어 있지 않으면 설치가 되지 않는 이슈를 경험 했고, 다음과 같이 dlib를 설치하기 전에 cmake를 설치해주었더니 정상적으로 설치할 수 있었습니다.
4. applying pre-trained data
다음으로 저는 학습을 스스로 진행시켜보고 싶었으나, 가지고 있는 GeForce GTX 1060 3GB의 GPU로는 CUDA out of memory가 발생했으며, google colab를 이용할 경우에는 한 데이터에 대해 학습 시키는데 1,000,000 iteration이 필요했는데 한 iteration당 1초가 넘게 걸리는 것을 보고 사실상 어렵다고 판단했습니다.
그래서 pre-trained data를 이용해서 구현이 가능한지를 살펴보았고, 원본 논문에서 제공한 데이터를 이용해서 구현을 진행해 볼 수 있었습니다.
저는 이곳에서 100epoch 짜리 학습 데이터를 얻을 수 있었고, 이를 다운로드 받아서 모델에 적용시켜서 확인해 볼 수 있었습니다.
다운로드 받은 파일을 위와 같은 위계에 놓으면, 이후 실행할 주피터 노트북 파일에서 모델에 학습된 weight를 씌울 수 있게 됩니다.
5. executing test.ipynb
마지막 과정은 test.ipynb 파일을 실행시켜 원하는 이미지를 변환하는 과정입니다. 터미널에서 jupyter notebook을 입력하면 주피터 노트북이 켜지고, test.ipynb를 선택합니다.
test.ipynb를 실행하면 위와 같은 그림이 나타나고, 위에서부터 차례로 shift+enter를 누르며 실행시켜갈 수 있습니다. Load Test Image에서 원하는 이미지의 url을 img_path에 입력하면 원하는 이미지를 변환할 수 있습니다. 아래 Run 단에 오기까지의 과정은 이미지를 읽어들이고, 대비를 주고, alignment를 바꾸는 등의 이미지 전처리 과정이며, 그 이후가 학습된 데이터를 바탕으로 이미지를 변환하는 곳입니다.
이후 Run 단에서 앞서 선택한 이미지의 변환을 확인할 수 있고, 아래의 코드들은 이를 함수화하여 여러번 실행할 수 있는 작업들을 구현해 놓은 것들입니다.
아래는 앞서 변환한 전소연 이외에도, 제가 좋아하는 래퍼들의 사진을 애니메이션화 시켜본 것들입니다.
Conclusion
이것으로 간단하게 facial image를 animated image로 변환하는 selfie2anime의 사용에 대해서 알아보았습니다. 개인적으로, 딥 러닝 개발의 큰 네 단계를 모델 설계, 학습, fine tuning, 구현/사용성 개선 이라고 생각하는데 이 중 가장 첫 단계인 구현/사용성 개선 측면에서 글을 써보았습니다.
StyleGAN 으로는 다양한 것들을 할 수 있기에 재미있는 분야가 아닌가 싶습니다. 관심 있으신 분들은 한 번 직접 구현하거나 학습해보셔도 좋을 것 같습니다.
Get to know us better! Join our official channels below.
Telegram(EN) : t.me/Humanscape KakaoTalk(KR) : open.kakao.com/o/gqbUQEM Website : humanscape.io Medium : medium.com/humanscape-ico Facebook : www.facebook.com/humanscape Twitter : twitter.com/Humanscape_io Reddit : https://www.reddit.com/r/Humanscape_official Bitcointalk announcement : https://bit.ly/2rVsP4T Email : support@humanscape.io