안녕하세요. 딥루트 @deep-root입니다.
이번 포스팅에서는 구글 AI experiment에서 나온 Handwriting recognition project인 Quick, Draw!에 대해서 소개해보려 합니다.
Handwriting recognition은 말 그대로 손으로 작성한 글씨나 그림을 인식하는 것을 의미하는데, 구글에서 오픈소스 프로젝트 중 하나로 데이터 및 데모를 공유하였죠.
Quick, Draw!
[IMAGE: https://steemitimages.com/DQmW9y5qX7hczJMCVtcNs7ZT2LxhMaFnE6K9L9sHAgppSny/title.PNG]
이번에 소개하는 Quick, Draw는 주어진 키워드로 사람이 그림을 그리고 AI가 어떤 그림인지 맞추는 방법으로 게임을 진핸하는데요. 쉽게 설명하면 AI와 하는 캐치마인드로 보시면 됩니다. (이제 아래에서 학습된 네트워크를 간단하게 AI로 표현하겠습니다.)
[IMAGE: https://steemitimages.com/DQmVvRNtoZk48JnbctYzwL4ChkjRVwvCfkbDS5QvVCnjoCh/%EC%BA%90%EC%B9%98%EB%A7%88%EC%9D%B8%EB%93%9C.jpg]
~~소는 역시 조선소~~
게임 진행은 간단합니다. Quick, Draw! 페이지에 접속해서 시작하기를 누르면 바로 진행할 수 있습니다.
한 번에 총 __6개__의 문제(키워드)를 풀어볼 수 있습니다. 그리고 한 키워드당 20초의 시간이 주어집니다. 제가 테스트 했을 때는 포크, 쾌속선, 팔꿈치, 냉장박스, 기차, 자동차, 6개의 키워드가 문제로 나왔습니다.
마우스로 그려서인지... 제가 똥손이라 그런건지 6개의 문제중에 한 문제는 실패했습니다. ㅠㅠ 그럼 아래에서 제가 그린 그림과 AI가 어떤 어떤 답을 찍었는지 성공 사례와 실패 사례로 한번 살펴보겠습니다.
캐치 마인드 성공!!
[IMAGE: https://steemitimages.com/DQmRdRa3RdQsvEoEmL46sNQpcFYfzwgHk4Yo1kCvxuoVPWB/boat_title.png]
[IMAGE: https://steemitimages.com/DQmeyvRmaJ4g5sz1tZmtpvjiVSq27ydzmuUcXKJS4GKVoh1/boat.gif]
우선 첫번째 키워드는 `쾌속정' 입니다. 위 그림을 보면 그림이 진행 됨에 따라서 AI가 유추를 시작하는 것을 볼 수 있습니다. 처음 배의 하단을 그렸을 때는 카누__라고 했다가, 배의 윗 부분을 그리니 __여객선, 그리고 나름의 스터스터 (프로펠러) 까지 그리자 드디어 쾌속정 이라고 정답을 외치더군요!!
캐치 마인드 실패 ㅠㅜ
[IMAGE: https://steemitimages.com/DQmbQsfvrenbtfCoMJe8yyDtABkHVVMy97qwsmisQ31oxES/arm_title.png]
[IMAGE: https://steemitimages.com/DQmYSti6nK9QeguBApgRxHn2E81KzdpxmCw2RFc9dpYQXk8/arm.gif]
두 번째는 `팔꿈치'라는 키워드 입니다. 어떻게든 팔꿈치를 표현해보려 했는데 줄->수박->콧수염->신발... 결국 20초 안에 정답을 외치게 만들지 못했습니다.
결과분석
[IMAGE: https://steemitimages.com/DQmXg23CMiD77QY8tNcHxEBJVuFwEy3HmS3bbfTvAcbnM8a/total.png]
6개의 문제를 모두 풀고나면 시도해본 문제들에 대해서 위와 같이 나타내 줍니다. 그리고 각 그림을 클릭하면 AI가 제가 그린그림과 학습된 데이터에서 어떤 그림과 매칭이 된 건지 보여줍니다. 물론 잘못 매칭된 결과과 다른 사람들이 그린 결과도 함께 보여줍니다. 제가 그린 팔꿈치의 경우에는 인어, 신발, 해변으로 인식했네요. ~~좀 더 팔꿈치를 각지게 그릴걸 그랬습니다~~
[IMAGE: https://steemitimages.com/DQmcromrk3XeqJpuU79jduewYSkgGecYQoZpRMP8kamN9cM/arm_detail.png]
마무리하며..
사실 게임으로서의 Quick, Draw를 보면 그냥 심심할 때 생각없이 해보기 좋은 데모죠. `우와, 이제 이렇게 가지고 놀 수도 있구나' 하면서요. 하지만 이런 프로젝트의 장점은 바로 오픈소스 프로젝트라는 겁니다. 사용자는 원한다면 언제든 수십만개의 낙서그림 데이터를 받을 수 있고 데이터는 지금 이 순간에도 계속 업데이트 되고 있습니다. 키워드가 주어지고 사용자가 해당 키워드에 맞는 그림을 그려주기 때문에 실시간으로 데이터를 모을 수 있죠. 모든
데이터가 다 사용되진 않겠지만 저 또한 부분적으로는 오픈 프로젝트에 기여했다고 생각할 수 있겠죠?
Brilliant!!!
[IMAGE: https://steemitimages.com/DQmQL4SNjVyZwyBrR247onHXP4AuKjyS8JQhNNYDRk7Fn17/data.PNG]
그리고, 학습 네트워크가 공개되지는 않았지만 예상컨데 시계열 데이터 (time-series data)를 처리하기 용이한 RNN (Recurrent Neural Network) 또는 LSTM (Long Short-Term Memory models) 를 사용했을 것입니다.
구글에서 제공한는 소개영상을 보면 손으로 작성한 글자를 인식할 때 아래 그림과 같이 선을 긋는 순서들도 데이터로 활용됩니다. 즉, 그림 전체의 모양 뿐만 아니라 그림을 그리는 순서 또한 인식에 중요한 특징이 됩니다. 데이터 셋 페이지에 들어가서 보시면 각 그림이 그려지는 순서 또한 함께 나타나는 것을 확인하실 수 있습니다.
이런 시계열 데이터 처리에 대표적인게 RNN 그리고 이를 개선한 LSTM 입니다. 좀 더 자세한 내용을 공부하고 싶으신 분은 ratsgo님의 블로그나 Terry님의 딥러닝 영상을 보시는 것을 추천합니다.
[IMAGE: https://steemitimages.com/DQmbvZfMtgDbqaLtXs4GJ8tMST23SvYxcKrWR6jPNxHh7PC/rnn.gif]
그럼 마지막은구글에서 만든 Quick, Draw! 소개영상으로 마무리하며 글을 마치겠습니다. 다들 한번 재미삼아 해보시면 좋겠어요!
https://www.youtube.com/watch?v=X8v1GWzZYJ4