본문 바로가기
머신러닝/Face Emotion Detection project

얼굴인식 기반 감정분석 프로젝트

by su0a 2024. 6. 27.

Intro

아이폰에 있는 페이스 아이디 기능에 얼굴 감정분석 기능을 추가하여 하루 동안의 감정 변화를 그래프로 시각화하고 슬픔, 화남의 감정이 느껴질 때 응원의 메세지를 띄워주는 기능이 있다면 어떨까 라는 생각으로 프로젝트를 진행하게 되었다.

 

데이터셋

얼굴 감정 분석 데이터 셋으로는 AI Hub의 한국인 감정인식을 위한 복합 영상 데이터셋을 사용하였다. 해당 데이터셋은 총 7개의 라벨(분노, 슬픔, 불안, 상처, 당황, 기쁨, 중립)로 분류되어 있다.

이 프로젝트에서는 중립의 이미지를 학습할 필요가 없다고 판단하여 중립에 해당하는 데이터셋을 제거하고 상처와 슬픔의 이미지 데이터셋이 비슷하여 두 이미지 데이터셋을 통합하였다.

또한 페이스 아이디를 사용하여 핸드폰을 잠금해제 할 때 화면에 80% 이상이 얼굴을 나타내는데 반해 해당 데이터셋은 얼굴 이미지가 이미지 내의 얼굴 크기가 10% 이상 40% 이하의 데이터였다. 그래서 yolov5를 통해 이미지 내의 얼굴 부분만 검출 후 모든 이미지의 사이즈를 224*224크기로 동일하게 resize하였다.

 

모델학습

이미지를 학습시킬 모델을 선정할 때 VGG19, ResNet18, ResNet34, ViT 등 다양한 모델을 사용하여 정확도를 측정하였다. 먼저 ViT는 학습시간이 다른 모델에 비해 너무 오래 걸리고 코랩 gpu할당이 계속 끊어지는 관계로 아쉽게 포기했다,, VGG19보다는 ResNet18의 성능이 더 높게 나왔고 2만장 이상의 데이터셋을 학습시켰을 경우 ResNet18보다 ResNet34의 성능이 더 높게 나왔다. ResNet34를 파인 튜닝한 모델을 프로젝트에 사용하려 했으나 교수님께서 ResNet을 직접 구현하고 수정해보라고 하셔서 ResNet30(3,4,4,3)도 학습시켜보고 컨볼루션 레이어를 하나더 추가한 ResNet32(3,3,3,3,3)도 만들어 학습시켜 보았다. ResNet32 모델이 원래 ResNet에 비해 깊이가 더 깊다보니 학습률이 약간 더 높음을 확인했고 ResNet32 모델을 학습데이터 4만장 (각 라벨별 1만장), 검증데이터 1만장 (각 라벨별 2천장)으로 학습시켰다. epoch 10회 때 80%정도의 성능이 나왔고 그 이후에는 성능이 낮아지는 과적합의 양상을 보였다. 파인튜닝한 모델을 사용하지 않고 학습데이터로만 학습하다보니 정확도가 많이 높지 않았던 것으로 보이며 더 많은 데이터로 학습했다면 성능이 더 좋아졌을 것 같다.

프로젝트 결과

앱이 아닌 웹으로 프로젝트를 진행하게 되어 페이스 아이디를 사용할 수 없었다. 그래서 실제 사람의 얼굴에서 드러난 감정을 분석하여 모델의 정확도를 측정하는 방향으로 프로젝트로 진행하게 되었다.

먼저, 실제 사람의 감정을 유도할 수 있는 다양한 사진을 준비했다. 실험에 참여한 사람들이 이 사진들을 보고 있을 때, 그들의 얼굴을 10번 정도 측정하여 감정 분석 모델에 입력으로 넣었다. 이후, 참가자들에게 각 감정(분노, 슬픔, 불안, 당황, 기쁨)에 대해 느낀 정도를 퍼센트로 입력받았다. 마지막으로, 감정 분석 모델의 결과와 참가자들이 입력한 감정 수치의 차이를 그래프로 시각화했다.

분석 결과, 분노, 슬픔, 기쁨과 같이 얼굴에 뚜렷하게 드러나는 감정에 대해서는 모델의 결과와 참가자들의 입력이 유사하게 나타났다. 그러나 불안과 당황과 같은 미묘한 감정에 대해서는 모델이 정확히 감지하지 못하는 것을 확인할 수 있었다.

배운점

이번 프로젝트를 통해 몇 가지 중요한 점을 배울 수 있었다.

  1. 데이터 전처리의 중요성: 처음에 사용한 데이터셋은 얼굴 크기가 다양했기 때문에 YOLOv5를 통해 얼굴 부분을 검출하고 이미지 크기를 표준화하는 작업이 필요했다. 이 과정에서 데이터 전처리가 모델 성능에 큰 영향을 미친다는 것을 실감할 수 있었다.
  2. 모델 선택 및 튜닝: 다양한 모델을 실험하면서 각 모델의 장단점을 비교해볼 수 있었다. 특히 ResNet32와 같은 커스텀 모델을 직접 설계하고 학습시키면서 모델 구조와 학습 과정에 대한 깊은 이해를 얻을 수 있었다.
  3. 과적합 문제: 학습 데이터의 양과 모델의 복잡도 사이의 균형을 맞추는 것이 중요하다는 것을 배웠다. ResNet32 모델이 초기에는 높은 성능을 보였지만, epoch가 증가하면서 과적합 문제가 발생했다. 이를 통해 학습 과정에서 과적합을 방지하기 위한 전략의 필요성을 느꼈다.
  4. 감정 인식의 한계: 분노, 슬픔, 기쁨 등 명확한 감정은 잘 인식되었지만, 불안과 당황 같은 미묘한 감정은 잘 잡아내지 못했다. 이를 통해 감정 인식 모델이 특정 감정에 대해 더 정교한 학습이 필요하다는 것을 알게 되었다.

이러한 배움을 바탕으로, 앞으로는 더 다양한 데이터셋을 활용하고, 모델의 과적합을 방지할 수 있는 방법들을 더 연구해볼 계획이다. 또한, 감정 인식의 정밀도를 높이기 위한 추가적인 기술적 접근 방법들도 탐구해볼 것이다.