colab 주소: https://colab.research.google.com/drive/1TPWYcpTIotUj1Wou3rD7Vy2l508MWC1a#scrollTo=4MmNXKTkIIec
이번 글은 지난 KDT 프로젝트 글에 이어서 쓰는 글입니다.
최근 3주동안 지인들을 만날 때마다 팀에서 만든 서비스 테스트를 부탁드려봤습니다. 재미는 물론, 어느 정도 정확도도 나오는 걸 확인할 수 있었어요. 대략 이상형에 가까운 연예인 7명을 추천하면, 그 중 2~5명은 이상형에 해당한다고 응답해주셨습니다.
지난 번에는 얼굴의 Feature를 구하기에 앞서, AutoEncoder를 이용해 Feature를 얻고, Clustering을 수행했을 때, 유의미한 결과가 나오는지 살펴보았습니다. 그리고 Cluster 알고리즘이 Classifier의 역할도 할 수 있다는 것을 알게 되었죠. 하지만 이 실험을 하고 나서도, AutoEncoder가 얼굴 Feature를 잘 잡아낼 수 있을지 평가해보기도 어려웠고, 얼굴 Feature를 얻더라도 그 Feature가 이상형에 관련된 Feature일 지 의문은 풀리지 않았었어요.
다른 조원분이 AutoEncoder를 대신해서 쓸 수 있는 모델을 찾아와 주셨어요. FaceNet은 얼굴 Feature에 Metric Learning을 이용하여, 동일한 일물이라면 distance가 작도록 학습시킨 모델입니다. (FaceNet 논문, 논문 리뷰) 일단 저는 이 모델을 써볼 겸, 얻어낸 Feature가 어떤 Feature인지 구분해낼 수 있을지 실험해보기로 했습니다.
MTCNN 모델을 이용하여 얼굴을 찾아 crop하고, FaceNet을 이용하여 128개의 Feature를 얻어냈습니다. 그 다음, 각 Feature마다 가장 작은 값을 갖는 이미지 6장, 가장 큰 값을 갖는 6장을 출력해보았어요.
위의 사진과 같이 남자 122번째 feature는 안경의 유무라는 것을 알 수 있었어요. 하지만 나머지 Feature는 눈으로 보았을 때 어떠한 Feature인지 알아낼 수가 없었죠. 더군다나, 화질이 좋지 않은 이미지도 있고, 화장, 명암, 등 여러 가지 요소에 의해 좋은 Feature를 얻기 어렵다고 생각했죠. 저는 이러한 부분을 팀에 전달했고, 다른 조원분이 이러한 이슈를 맡아, 해당 연예인의 해상도 높은 다른 사진을 수집해주시기로 했어요.
일단, 이상형 Feature를 얻기 전에, 이상형이란 무엇인지, 어떤 것들과 연관이 있을지 연구해볼 필요가 있었어요. 그래서 매력에 관계된 이 책을 읽게 되었죠. 책에는 여러 가지 재밋는 내용이 많았지만, 저희 프로젝트에 가장 직접적으로 영향을 미친 두 가지 내용만 소개해드리고자 합니다.
그리고 저는 2번 내용에서 얻은 아이디어를 바로 실험해보기로 하였습니다.