구글에서 만든 퀵드로우라는 웹 게임을 해보신 적 있나요? 예전에 인기를 끌었던 온라인 게임처럼 제시어를 설명하는 그림을 그리고 그걸 맞추는 형태의 간단한 게임입니다. 하지만 한 가지 다른 점은 그림을 보고 제시어를 맞추는 주체가 다른 사람이 아닌 딥 러닝으로 학습한 컴퓨터라는 것입니다.
(왜 도끼가 아닐까요....)
사실 이 게임은 단순 오락용으로 만들어진 게임이 아닙니다. 이 게임을 하면서 사람들이 그린 스케치들은 스케치를 인식하고 그려내는 sketch-RNN이라는 딥 러닝 모델을 학습시키기 위한 데이터셋으로 활용됩니다. 이 글에서는 바로 그 sketch-RNN에 대해서 소개드리려고 합니다.
sketch-RNN의 구조 자체는 간단합니다. Bidirectional RNN의 autoencoder를 이용해 입력 스케치로부터 latent vector를 추출하고 이것을 다시 decoder에 넣어 새로운 스케치를 얻습니다. 이 때 스케치는 단순히 완성된 한 장의 그림이 아니라 펜을 움직이는 액션들의 시퀀스로 취급됩니다. 따라서 스케치는 [x축의 이동거리, y축의 이동거리, p1, p2, p3]로 이루어진 벡터들의 시퀀스로 표현됩니다. 여기에서 p1는 펜을 종이에 그대로 대고 있는지, p2는 펜을 종이에서 들었는지, p3는 스케치가 끝났는지 여부를 나타내는 바이너리 값입니다.
앞서 얘기한 것처럼 encoder를 이용해 생성할 스케치에 대한 조건을 줄 수 있지만, encoder를 생략하고 모델이 자유롭게 스케치를 생성하게 할 수도 있습니다. 전자의 경우 입력으로 넣은 스케치와 유사한 스케치들이 생성되지만, 후자의 경우에는 보다 다양한 형태의 스케치들이 생성됩니다. (논문에 예시 그림이 있으니 궁금하신 분들은 확인해보시기 바랍니다.)
또는 encoder에서 얻어진 latent vector 값을 조절할 수도 있습니다. 원래 값에 새로운 특징을 추가하거나 빼버림으로써 입력 스케치에 없었던 새로운 특징을 가진 스케치를 얻을 수 있는 것입니다. 가령,
고양이 얼굴 + (돼지 전체 - 돼지 얼굴) = 고양이 전체
와 같은 식으로 동작하게 됩니다. (이것도 논문에 예시그림이 있고 귀여우니까 꼭 확인해보시기 바랍니다.)
스케치를 단순한 그림이 아닌 시퀀스로 처리하고 있기 때문에 사람이 스케치를 다 완성하지 못한 시점에서도 결과를 예측하는 것이 가능합니다. 퀵드로우 게임을 하는 도중에도 아직 그림을 다 그리지 못했는데 답을 맞춰 버리는 경우가 종종 발생합니다.
어플리케이션 관점에서 본다면, 그림을 그리고 있는 도중에도 사용자의 의도를 파악하고 딥 러닝 모델이 이어질 스케치의 모양을 제안할 수도 있을 것입니다. 구글의 오토드로우가 그런 어플리케이션에 가장 근접한 모습을 보여주고 있는 것 같습니다. 오토드로우는 사용자가 그린 러프한 스케치를 깔끔한 그림으로 변환시켜 주는 기능을 가지고 있습니다.
이렇게 대충 그림을 그리면...
이렇게 바꿔줍니다!
그림을 보시면 아시겠지만 어떻게 바꿀지는 화면의 상단 부분에서 사용자가 직접 선택할 수 있고, 단순히 선을 깔끔하게 정리해주는 것이 아니라 그림이 무엇인지(semantic 요소) 인식하고 그것에 대한 다양한 선택지를 제공하고 있습니다. 그래서 아래와 같이 고양이 얼굴 그림을 전혀 다른 형태의 고양이 그림으로 바꿀 수도 있습니다.
사실 이 글은 도끼를 제대로 인식하지 못하는 퀵드로우에 대한 분노로 시작되었습니다만, 이런 창의적인 분야에서딥 러닝이 사용자를 보조하는 역할을 수행하기 위한 좋은 연구인 것 같습니다. 다만 양질의 학습 데이터를 구분해내고 적극적으로 학습하는 능동학습 기법이 적용된다면 보다 향상된 결과를 얻을 수 있을 것으로 기대됩니다.
재밌어 보이는 포스팅이네요...
딥러닝이 아직 개발단계라고 보이지만 실생활에도 많이 접해진 것 같아요.
IT관련 전공중이지만 개발속도는 진짜 상상이상이네요
특히 구글처럼 양질의 데이터를 많이 보유하고 있는 회사들은 정말 다양한 분야에 딥 러닝을 접목시켜 발전하고 있는 것 같습니다.
Congratulations @man-in-the-moon! You received a personal award!
Click here to view your Board
Do not miss the last post from @steemitboard:
Congratulations @man-in-the-moon! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!