케라스 BiGAN
얼마 전 DeepMind에서 BigBiGAN(BigGAN + BiGAN) 모델이 발표되어서 이슈되고 있습니다. 이 중 케라스 기반의 BiGAN 깃헙을 프랑소와 쏠레님이 트윗해주셔서 소개드립니다.
보통 GAN은 노이즈를 Generator에 입력한 후 Generator가 생성한 이미지와 실제 이미지를 Discriminator가 분류하는 방면, BiGAN은 이미지로부터 뽑아낸 노이즈와 Generator로 생성한 이미지를 같이 Discrimiator에 입력합니다. 여기서 핵심은 “이미지로부터 뽑아낸 노이즈”라는 것인데, 이미지를 인코딩한 잠재벡터라고 보시면 됩니다.
(출처: Adversarial Feature Learning, Jeff Donahue, https://arxiv.org/abs/1605.09782)
이렇게 이미지로부터 잠재벡터를 잘 뽑아내는 네트워크를 학습시켰다면, 이미지간 유사도를 측정해볼 수 있겠죠? 즉 이미지를 입력하면, 잠재벡터를 뽑아내고, 가지고 있는 이미지들에 대해서 뽑아낸 잠재벡터와 가장 유사한 것을 골라내는 식입니다. (혹은 만들거나 말이죠)
풍경 사진으로부터 유사도를 뽑아내는 BiGAN 케라스 코드를 통해서 한 번 살펴보시죠~
가장 왼쪽에 있는 사진이 모델에 질문을 던진 사진이고, 오른쪽 두번째부터는 데이터셋에서 가장 유사한 순서대로 검출된 이미지입니다. 그 밖에,
- BiGAN의 특징 공간 내에서 클러스터링을 하거나
- 실제 이미지와 유사한 이미지를 만들어내는 등 다양한 활용이 소개되어 있네요.
소스코드
- Matthew님(manicman1999)의 깃헙: https://github.com/manicman1999/Keras-BiGAN
파일 구조는 다음과 같습니다.
- bigan.py: BiGAN 네트워크를 정의하고 학습하는 코드입니다.
- guess.py: BiGAN 특징 공간의 Inverse Distance Weighting 유사도를 이용하여 게임을 해보는 코드입니다.
- idw.py: Inverse Distance Weighting을 계산하는 코드로 거리가 가까울수록(유사도가 높을 수록) 높은 값을 반환하는 함수입니다.
책 소개
[추천사]
- 하용호님, 카카오 데이터사이언티스트 - 뜬구름같은 딥러닝 이론을 블록이라는 손에 잡히는 실체로 만져가며 알 수 있게 하고, 구현의 어려움은 케라스라는 시를 읽듯이 읽어내려 갈 수 있는 라이브러리로 풀어준다.
- 이부일님, (주)인사아트마이닝 대표 - 여행에서도 좋은 가이드가 있으면 여행지에 대한 깊은 이해로 여행이 풍성해지듯이 이 책은 딥러닝이라는 분야를 여행할 사람들에 가장 훌륭한 가이드가 되리라고 자부할 수 있다. 이 책을 통하여 딥러닝에 대해 보지 못했던 것들이 보이고, 듣지 못했던 것들이 들리고, 말하지 못했던 것들이 말해지는 경험을 하게 될 것이다.
- 이활석님, 네이버 클로바팀 - 레고 블럭에 비유하여 누구나 이해할 수 있게 쉽게 설명해 놓은 이 책은 딥러닝의 입문 도서로서 제 역할을 다 하리라 믿습니다.
- 김진중님, 야놀자 Head of STL - 복잡했던 머릿속이 맑고 깨끗해지는 효과가 있습니다.
- 이태영님, 신한은행 디지털 전략부 AI LAB - 기존의 텐서플로우를 활용했던 분들에게 바라볼 수 있는 관점의 전환점을 줄 수 있는 Mild Stone과 같은 책이다.
- 전태균님, 쎄트렉아이 - 케라스의 특징인 단순함, 확장성, 재사용성을 눈으로 쉽게 보여주기 위해 친절하게 정리된 내용이라 생각합니다.
- 유재준님, 카이스트 - 바로 적용해보고 싶지만 어디부터 시작할지 모를 때 최선의 선택입니다.