김동현
김동현
Dec 13, 2018 · 6 min read

안녕하세요. 스타일쉐어 백엔드 개발자 김동현입니다.

2018년의 스타일쉐어에서는 뷰티, 중고 그리고 데일리룩이라는 피드가 추가로 등장했는데요, 그중 제가 작업했던 데일리룩 피드를 만들게 된 배경과 개발 방향에 대해 공유드리고자 합니다.

스타일쉐어 데일리룩

#데일리룩 #ootd / 타자 치는 것은 귀찮아

데일리룩에 관련된 스타일들만 뽑아내는 방법 중에 가장 간단한 방법은 텍스트로 분리해내는 방법이었을 것입니다.

하지만 #데일리룩 #ootd는 사진이나 내용이 관계가 없더라도 들어가 있는 경우가 많았습니다.

또한 위의 피드처럼 정성스러운 글을 써주는 유저도 많긴 했지만 자신의 데일리 로그를 남기면서 글을 작성하지 않는 경우도 더러 있었습니다.

즉, 단순히 텍스트로만 구별해내기에는 이미지에 대한 질을 확신할 수 없었고, 텍스트가 주된 서비스가 아니다 보니 설명 없는 좋은 이미지들이 많았는데요.

우리는 이 이미지들을 놓치고 싶지 않았습니다.

그래서 결과적으로 텍스트 대신 이미지를 사용하는 방향을 선택하게 되었습니다.

이미지로 어떻게 구별해낼까?

다행히도 R-CNN의 높은 인식률과 Pre-Trained 된 모델의 label 중 person이 이미 학습되어있던 터라 별도의 Transfer Learning 없이 이미지 내에서 body parts가 있는지 없는지 찾아내는 것은 아주 어렵지 않았습니다.

다만 문제가 있다면 body parts에 들어가는 모든 부분을 person이라고 예측하던 부분이었죠.

예를 들자면 아래와 같습니다.

다음과 같이 제가 사용한 모델에서는 body parts를 person이라는 라벨로 처리하고 있었습니다.

단순히 R-CNN의 person 라벨만을 믿기에는 의도했던 데일리룩 외에도 너무나도 많은 것들이 데일리룩이라는 이름으로 필터링될 것 같았습니다.

그래서 또 다른 필터가 하나 더 필요하다는 생각이 들었습니다.

Pose Estimation

Body Parts 중 우리가 원하는 부분이 사진에 있으면 좋겠다!라는 생각을 곰곰이 하다 보니 우연히 머릿속에 스쳐 지나가는 하나의 장면이 있었습니다.

Source: http://graphics.berkeley.edu/papers/Kirk-SPE-2005-06/

바로 3D 모델링 중에서 Motion Tracker 에 관련된 장면이었는데요. 이것을 Tracker가 아니라 이미지에서 stick figure를 뽑아낼 수 있으면 되지 않을까?라는 생각이 들었습니다.

놀라운 딥러닝의 세계에는 이미 여러 명의 Stick Figure를 뽑아낼 수 있는 경지에 도달해 있었습니다.

Source: https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

Pose Estimation 딥러닝 모델을 사용하여 아래와 같은 결과물을 얻어낼 수 있었는데요.

이미지 내의 Body Parts의 존재 여부를 알게 되었으니 우리가 원하는 Body Parts가 이미지 내에 있는지 검사할 수 있게 되었습니다.

하지만 해당 모델이 마냥 가볍지는 않았기에 사용자의 업로드가 많은 순간에는 예측 Task가 밀리기 시작했습니다.

그래서 아주 단순하지만, 효과적인 아이디어들을 적용하였는데요.

pose estimation을 하기 전에 R-CNN을 돌린 후 person으로 예측된 bounding box가 있다면 pose estimation 모델을 돌리도록 했습니다.

하지만 위의 필터를 통했음에도 원하는 결과물이 안 나오는 경우가 종종 있었는데요.

바로 다음과 같은 경우입니다.

생각보다 작은 사람의 stick figure도 잘 추출 내어서 해수욕장으로 떠나 찍은 사진 속의 저 멀리 있는 휴양객을 데일리룩으로 잡는 일이 종종 발생했거든요.

그래서 위의 조건에 더불어서 person이라고 예측된 bounding box size가 전체 이미지 크기 대비 n % 이상의 크기 일 경우 Pose Estimation을 진행하자는 것이었죠.

적당한 크기 이상의 데일리룩들을 뽑아내고 싶었고 사람이 너무 작아서 안 보이는 경우도 피할 수 있었습니다.

빠른 분류 속도는 덤이었고요.

덕분에 유저들이 올린 콘텐츠 중 데일리룩이라는 범주에 속하는 콘텐츠를 잘 뽑아낼 수 있었습니다.

아래는 위의 과정을 거쳐서 Pose Estimation까지 처리되어 데일리룩 사진이라고 판별된 이미지입니다.

이다음으론 무엇을 더 해볼 수 있을까요?

사진 속의 자세를 알 수 있게 되었으니 좀 더 재밌는 것을 할 수 있을 것 같은데요.

예를 들면 K-Means를 적용하면 비슷한 모습의 데일리룩들만 모아볼 수도 있고 스타일쉐어 유저들이 자주 찍는 자세 라던가 유저 별 자세 선호도 등등 재밌는 것들을 할 수 있을 것 같습니다.

날 따라 해 봐요 같은 것도 해볼 수 있겠네요 :)

같이 해보지 않을래요?

아직도 재밌는 것들이 많이 남은 스타일쉐어 에서는 더 많은 것을 하기 위해 개발자분들을 모시고 있습니다 :)

백엔드 개발자라고 해서 백엔드 개발에만 국한되지 않고 하고 싶은 것들을 해도 된다, 할 수 있다고 이야기해 주는 회사라고 생각합니다.

스타일쉐어를 좀 더 알고 싶으시다면 여기를 눌러 주세요 :)

StyleShare

안녕하세요, 스타일쉐어 팀원들이 작업하다 짬내서 적는 블로그입니다 :-) 새로운 세대를 위한 더 나은 쇼핑 여정을 만들어나가는 과정에서 겪는 저희의 다양한 경험을 공유합니다. 그리고 저희와 문제해결 과정에 함께하실 좋은 분들과 만나고 싶습니다. join@stylesha.re

김동현

Written by

김동현

피할 수 있다면 피하자

StyleShare

안녕하세요, 스타일쉐어 팀원들이 작업하다 짬내서 적는 블로그입니다 :-) 새로운 세대를 위한 더 나은 쇼핑 여정을 만들어나가는 과정에서 겪는 저희의 다양한 경험을 공유합니다. 그리고 저희와 문제해결 과정에 함께하실 좋은 분들과 만나고 싶습니다. join@stylesha.re

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade