셀럽미: 닮은 아이돌 찾기 소개

셀럽미: 닮은 아이돌 찾기 서비스는 사용자로부터 사진을 입력받아 가장 비슷한 아이돌을 찾아주는 서비스에요.

https://celebme.net

아래처럼 내 사진을 넣으면 가장 닮은 아이돌을 남녀를 구분하여 빠르게 확인해볼 수 있어요.

사이트 주소는 celebme.net 이에요.

셀럽미: 닮은 아이돌 찾기는 사진을 업로드하는 형태가 아니라

인공지능 모델을 내 웹브라우저 메모리에 로드하고, 사진도 메모리에 로드하여 비교를 하고 종료되기 때문에

내 사진이 어딘가에 올라가는거 아니야?하는 걱정없이 편리하게 사용할 수 있어요.

사진 어디에도 저장되지 않아요!

구글의 Teachable Machine

과거의 셀럽미는 구글의 인공지능 서비스인 teachablemachine 을 활용하여 제작되었었는데요.

teachable machine은 웹브라우저에 데이터를 올리고 브라우저상에서 인공지능을 학습하는데,

이런 방식으로는 많은 아이돌의 사진을 일일이 업로드할 수 없는 치명적인 문제점이 있었어요.

이주일이 넘는 기간동안 오류라는 오류는 다 겪으며.. 오랫동안 이미지를 수집했는데요!

이미지를 수집하는것도 참 큰 일이더라구요.

남녀 도합 53983개에 달하네요.

학습에 사용된 아이돌 목록

남자: https://raw.githubusercontent.com/kwontaeheon/kceleb_model/main/men_label/labels.txt

 

여자: https://raw.githubusercontent.com/kwontaeheon/kceleb_model/main/women_label/labels.txt

 

구글 크롤링을 통해 수집한 아이돌 사진 목록은 무려 5만장을 넘는데,

이걸 브라우저에 올리려하면 크롬이 죽고.. 시스템이 죽는 아주 안타까운 상황을 여러번 만나게 되었어요.

그래서 구글 서비스를 완전히 사용하지 않았느냐 하면 그것은 아니구요!

제가 갖고있는 노트북 GPU머신에서, 구글의 TensorFlow를 사용하여 이미지 분류 모델을 직접 학습시켰습니다.

사실 직접 학습하는게 어려운 일은 아니었는데요.

어려운건.. 수집한 수많은 이미지를 정제하고 동일한 사이즈와 포맷으로 만드는게 가장 어려웠어요!

우선 저 이미지들을 가운데기준 정사각형으로 Crop하는 배치스크립트를 별도로 수행했고

PNG로 수집된 데이터에 대해 Corrupted된 데이터는 삭제시키는 Image File Validation 도 수행했어요.

이 과정에는 linux의 mogrify 스크립트를 사용했어요.

그리고 모델 학습 코드는 TFLite 의 Model Maker를 활용했어요.

TensorFlow Lite Model Maker 활용 인공지능 학습

https://www.tensorflow.org/lite/models/modify/model_maker/image_classification

Image classification with TensorFlow Lite Model Maker

이미지분류에대한 학습 코드는 상당히 짧게 구현할 수 있는데요.

data = DataLoader.from_folder(image_path)

train_data, validation_data = data.split(0.8)

model = image_classifier.create(train_data, validation_data=validation_data)

model.export(export_dir='.')

이렇게 단순하게봐서는 코드 네줄로 인공지능을 학습해볼 수 있어요!

인공지능 모델 학습 최적화

상세하게보면 위 코드와 같이 단순하게 작성시 기본 Model Spec인 EfficientNetLite0 모델을 사용하게 되는데요.

https://www.tensorflow.org/lite/api_docs/python/tflite_model_maker/image_classifier/EfficientNetLite0Spec

EfficientNetLite0 모델은 모델이 작고 가벼워 빠른 처리가 필요할 때 사용되는 스펙이지만

사실 셀럽미: 닮은 아이돌 찾기는 이미지 분류속도가 중요하지 않고

정말 닮은 아이돌을 잘 찾아주는데에 중점을 둔 서비스라서 다른 모델스펙을 이래저래 적용해보았어요.

그래서 좀더 크고 정확한 EfficientNetLite4 모델이나,

MobileNet이나 ResNet 도 학습시켜보고

결국 최종적으로는 Tensorflow Hub에 등록된 가장 정확도가 높은 모델을 찾아 적용했어요!

https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_b3/classification/2

21년에 공개된 ICML 논문을 기반으로

이전보다 더 나은 매개변수 효율성과 더 빠른 교육 속도를 달성하는 이미지 분류 모델 이에요.

모델 변경에 따른 정확도는 기존보다 두 배 정도 상승하는 효과를 가져왔는데요.

사실 100개가 넘는 카테고리를 분류하려면 양질의 데이터와 전처리가 필요한데

저혼자 손으로 일일이 봐야하다보니 그렇게까지 시간을 들이지는 못했어요.

그래서 최종적인 모델 분류 Validation accuracy는 0.5를 넘지 못했어요.

그렇지만 와이프와 제가 직접 사진을 찍어보며 경험해본 바에 의하면

새로운 아이돌과 1초는 닮은것같은 아이돌이 잘 나오는걸 확인할 수 있었어요!

셀럽미: 닮은 아이돌 찾기 서비스 소개 마무리

오늘은 셀럽미: 닮은 아이돌 찾기를 업데이트 하면서 사용한 기술들에 대해 알아보았어요.

데이터를 모으고 인공지능을 새롭게 학습하기까지 한 달 여 개인시간을 들여 모델 패치를 마무리하였는데요.

긴 호흡으로 스스로 만들어보면서 꽤 즐겁고 재밌게 코딩했던 것 같아요.

셀럽미의 클라이언트 코드는 github에 모두 공개되어있으니

비슷한 코딩에 관심있는 분들은 복사하여 새로운 서비스를 만들어보셔도 좋을 것 같아요.

https://github.com/kwontaeheon/kceleb_client

GitHub – kwontaeheon/kceleb_client

셀럽미: 닮은 아이돌 찾기

얼굴로 보는 인공지능 아이돌 테스트, 나와 닮은 아이돌을 찾아보세요. 대표 아이돌 사진 데이터로 학습한 인공지능이 나의 얼굴로 닮은 아이돌을 찾아드립니다. 회원가입도 필요없이 화면에서 바로 확인해보세요! 사진 데이터는 그 어디에도 전송되지 않습니다. 인공지능이 보는 나의 연예인상 테스트 한번 해보세요! 테스트를 통해 나와 닮은 연예인 찾기를 할 수 있습니다.

celebme.net

여러분도 셀럽미에서 나와 닮은 아이돌을 빠르게 찾아보세요