* 이하 프로젝트는 인공지능 연합 동아리 deep daiv. 2024 여름 기수 딥러닝 입문 <디비딥러닝> 팀의 첫 번째 프로젝트로, 팀원 이건, 이호균, 손보민, 황재령의 공동 작업물임을 알립니다.
주제 선정 배경
스포츠 경기를 보면 팬들의 응원이 선수들에게 굉장히 큰 영향을 준다는 것을 알 수 있을 텐데요, 실제로 응원 소음은 선수의 심리적 스트레스를 감소시키고 경기 집중력을 향상시키는 데 중요한 역할을 합니다. 이번 2024 파리 올림픽에서도 관중들의 응원 소리에서 힘을 얻은 선수들이 많다고 합니다.
올림픽에서는 각 나라마다 강세를 보이는 종목이 다르고, 그에 따라 관중들의 국적 비율도 달라집니다. 예를 들어 우리나라의 경우, 양궁이나 펜싱 경기에서 상대적으로 많은 한국인을 찾아 볼 수 있는 것처럼요. 저희는 이러한 경향에 주목했습니다. 관중석에서 한국인의 비율을 분석해 우리나라가 어떤 종목에서 높은 인기와 강세를 보이는지 알아보는 것을 목표로 프로젝트를 진행했습니다.
그러나 한국인의 비율을 구하는 데 여러 어려움이 있을 것이라고 판단했습니다. 우선, 많은 사람들 가운데 아시아인의 얼굴을 인식해야 하고, 그 속에서 중국인, 일본인, 한국인을 구분해야 합니다. 아시아인 얼굴의 유사도가 높아서 적절한 데이터셋과 모델을 구축하는 데 제한이 있었기 때문에 관중석에서 아시아인의 비율을 찾는 것으로 범위를 넓혔습니다.
데이터 수집
관중석에는 다양한 국적의 사람들이 있기 때문에 인종적 다양성을 고려하여 데이터를 수집할 필요가 있었습니다. 저희가 사용한 UTKFace 데이터셋은 23,874장의 얼굴 데이터를 포함하고 있고, 각 이미지는 나이, 성별, 인종으로 레이블링 되어 있어 태스크에 적합했습니다.
그러나 딥러닝 모델이 데이터를 학습하고 아시아인을 찾아내기 위해선 몇 가지 전처리 과정이 필요했습니다.
데이터 전처리
프로젝트 초반에는 모델의 실행 속도와 정확도, 크게 두 가지 부분에 초점을 맞췄습니다. 실행 속도를 높이기 위해 이미지의 크기를 224x224로 줄였고, 화질을 기존의 50%로 낮추는 방식으로 전처리했습니다. 그 결과, 실행 속도는 눈에 띄게 좋아졌지만 높은 정확도를 얻지 못 했습니다. 정확도가 낮았던 가장 큰 이유는 훈련 데이터와 테스트 데이터 사이에서 발생할 수 있는 문제점들을 고려하지 않았기 때문이었습니다.
1. 훈련 데이터셋 ↔ 테스트 데이터셋 화질 차이
테스트에 이용하는 관중석 속 사람들의 얼굴 이미지 화질은 낮은 반면, 훈련에 이용한 UTKFace 데이터셋의 화질은 높았습니다. 학습 데이터와 훈련 데이터 사이의 화질 차이가 낮은 정확도의 원인이라고 판단해 UTKFace 데이터셋의 모든 이미지를 기존 화질의 25%로 낮춰 학습하였습니다. 하지만 여전히 화질 차이가 미세하게 남아 있어 15%까지 낮춰 학습을 시도했습니다. 데이터 간의 화질 차이 문제는 해소됐지만 모델 학습에 차질이 생겨 최종적으로 25%로 화질을 낮춘 데이터를 학습에 이용했습니다.
2. 데이터 편향 문제
UTKFace 전체 데이터 중 백인 이미지가 42.5%로 가장 높았는데, 편향을 고려하지 않고 모델을 학습시킨 결과, 대부분의 아시아인을 백인으로 분류하는 문제가 있었습니다. 따라서 다른 인종 데이터와 비율을 맞추기 위해 백인 데이터를 기존의 1/3로 줄여서 전처리했습니다.
인종 이미지 개수 비율 (%)
인종 | 이미지 개수 | 비율(%) |
백인 | 10,146 | 42.5% |
흑인 | 4,560 | 19.1% |
인도인 | 4,011 | 16.8% |
아시아인 | 3,462 | 14.5% |
기타 | 1,695 | 7.1% |
3. 이미지 검출 시 바운딩 박스 문제
관중석 이미지에서 얼굴을 검출하게 되면, 얼굴의 위치와 크기를 나타내는 사각형의 박스인 바운딩 박스(Bounding Box)의 좌표를 함께 구할 수 있습니다. 그러나 얼굴의 크기가 모두 달라 바운딩 박스의 비율이 제각각이었습니다. 딥러닝 모델이 인종을 예측하려면 입력하는 이미지의 크기가 모두 같아야 하기 때문에 학습 데이터(224x224) 와 동일하게 바운딩 박스 비율을 1:1로 설정했습니다.
모델링
프로젝트는 크게 세 부분으로 나뉩니다. 얼굴 검출, 모델 학습, 인종 추정 단계가 있으며, 저희는 관중석에서 얼굴을 검출하는 모델(Detection)과 UTKFace 데이터셋으로 인종을 에측하는 모델(Classification), 이렇게 두 가지 모델을 사용했습니다. Detection과 Classification을 효과적으로 수행하는 다양한 모델이 있기 때문에 각각 3~4개의 후보 모델을 찾아보았습니다.
- 얼굴 탐지 모델(Human Detection Model)모델 베이스 파라미터 수
모델 베이스 파라미터 수 RetinaFace GPU 27,293,600 YuNet CPU 75,856 MTCNN CPU/GPU 554,424 - 인종 분류 모델(Human Race Estimation Model) : 딥러닝 모델 아키텍쳐를 직접 구축하는 방법도 있었지만, 분류 태스크에 뛰어난 성능을 보이는 모델이 이미 많이 공개되어 있기 때문에 그중 하나를 선정해서 사용했습니다. 후보로 선정한 모델은 MobileNetV2, ResNet101, VGG-19, ArcFace였습니다. 정확도와 레퍼런스의 양을 기준으로 하여 일차적으로 MobileNetV2와 ResNet101, 두 가지 모델을 선정했습니다.
MobileNetv2
경량화된 딥러닝 모델로, 모바일 및 임베디드 디바이스에서 효율적인 성능을 제공합니다. 이 모델은 깊이별 분리 합성곱(Depthwise Separable Convolutions)을 사용하여 연산량을 줄이면서도 높은 정확도를 유지합니다. 또한, 잔차 연결(Residual Connections)을 도입하여 학습 효율성과 성능을 개선합니다. 구조적 효율성을 강조하여 모바일 환경에서도 빠른 추론 속도를 자랑하기 때문에 다양한 모바일 애플리케이션과 실시간 비전 시스템에서 널리 사용됩니다.
ResNet101
CNN의 일종으로, 101개의 레이어를 갖추고 있어 복잡한 이미지 인식 작업에 강력한 성능을 제공합니다. 이 모델의 핵심 특징은 잔차 블록(Residual Blocks)으로, 네트워크의 깊이에 관계없이 학습을 안정화시키고 성능을 향상시킵니다. 이미지 분류, 객체 탐지 등 다양한 비전 태스크에서 널리 사용되며, 대규모 데이터셋에서 뛰어난 정확도와 성능을 자랑합니다.
초반에는 데이터 편향이나 증강을 전혀 고려하지 않은 채로 모델 학습을 진행했습니다. 훈련 데이터에 과적합 되어 정확도는 높게 나왔지만 실제 관중석 이미지로 테스트 했을 때는 대부분의 사람이 백인으로 분류되는 문제점이 발생했습니다.
피드백과 코드 수정을 거쳐 데이터 편향 문제를 해결하고 데이터를 증강해서 다양한 조건에서 모델이 학습할 수 있도록 했습니다. 최적의 증강 방식을 찾고자 노력했으며, 총 3번에 걸쳐 증강을 수정했습니다. 저희가 가장 처음으로 사용한 증강 방법은 다음과 같습니다.
- 이미지 -80 ~ +80도 회전
- 50% 확률로 가로로 뒤집기
- -20% ~ +20% 밝기 조절
- 색상 정규화
하지만 이러한 네 가지 증강 방법을 활용해 데이터셋을 학습시킨 결과 오히려 정확도가 증강하기 전보다 낮아지는 문제가 발생했습니다. 문제의 원인을 파악하며 관련 자료를 다시 찾아보았습니다. 증강 전에는 훈련 데이터에 과적합 되어 높은 정확도가 나왔고, 증강 시 이미지를 회전하는 부분에서 너무 크게 기울이면 배경 노이즈도 같이 포함돼 오히려 정확도가 떨어진다는 사실을 발견했습니다.
회전 후 발생하는 배경 노이즈를 삭제하기 위해 중앙 부분을 잘라내는 방법도 같이 고려해 다음과 같은 기법으로 데이터셋을 증강했습니다.
- 이미지 -15 ~ +15도 회전
- 중앙 부분 잘라내기
- 가우시안 블러 추가
- -20% ~ +20% 밝기 조절
- 50% 확률로 가로로 뒤집기
- 색상 정규화
데이터 증강 후 MobileNetV2와 ResNet101 모델의 정확도와 손실을 비교해 본 결과, 평균적으로 ResNet101의 정확도가 MobileNetV2보다 약 0.2 높게 나타났고, 손실은 약 0.6 낮게 나타났습니다.
저희는 이후 ‘올림픽 관중’을 키워드로 모델의 성능을 테스트하기 위해 원래 목표에 부합했던 ‘종목별로 관객의 수가 달라지는’ 대표적인 종목인 양궁의 관중 사진을 가져와 테스트했습니다. MobileNetV2와 ResNet101 모두 상당히 높은 정확도의 얼굴 인식을 보였지만, 인종을 구별하는 태스크에서 ResNet101 좀 더 높은 정확도를 보여주고 있습니다.
모델 선정 후, 처음에는 데이터 증강과 ResNet101 모델의 구조만 사용했으나, 사전 학습 모델(Pre-trained Model)을 사용하면 더 높은 정확도를 얻을 수 있을 것이라는 피드백을 받아 torchvision.models 모듈에서 ImageNet의 데이터로 사전 학습된 ResNet101 모델을 불러왔습니다.
ResNet101 모델의 구조
ResNet101은 CNN의 일종으로, 다음 그림은 CNN을 기반으로 하는 모델의 단순화된 구조를 나타낸 것입니다. 크게 Convolutional Base와 Classifier로 구분되는 것을 확인할 수 있습니다.
- Convolutional Base
이미지에서 특징을 추출하는 컨볼루션 층(Convolutional Layers)과 데이터의 차원을 줄이고, 중요한 특징을 유지하는 풀링 층(Pooling Layers)으로 구성되어 있습니다. Convolutional Base의 목표는 이미지로부터 특징을 효과적으로 추출하는 것입니다.
- Classifier
주로 완전 연결 계층(Fully Connected Layer)로 이루어져 있습니다. 완전 연결 계층이란 모든 계층의 뉴런이 이전 층의 출력 노드와 하나도 빠짐없이 모두 연결되어 있는 층을 말하며, Classifier의 최종 목표는 이미지를 알맞은 카테고리로 분류하는 것입니다.
전이 학습으로 모델을 새로 학습 시키려면, 우선 기존 모델의 Classifier를 삭제하고, 목적에 맞는 새로운 Classifer를 추가해야 합니다. 다음으로 새롭게 만들어진 모델을 다음 세 가지 전략 중 하나로 Fine-Tuning 합니다.
- 전체 모델을 새로 학습시키기
- 사전학습 모델의 구조만 사용하면서 내 데이터셋에 맞게 전부 새로 학습시키는 방법입니다. 더 정확히는 모든 레이어의 가중치를 업데이트하면서 학습을 진행하는 것이며, 모델을 처음부터 학습시키기 때문에 큰 데이터셋이 필요합니다.
- 일부 레이어만 새로 학습시키기
- 마지막 몇 개의 레이어만 가중치 업데이트가 되도록 하는 방법입니다. 만약 사용할 데이터셋이 작고 모델의 파라미터가 많다면 과적합의 위험성이 있기 때문에 적은 계층만 학습시키고, 데이터셋이 크고 모델의 파라미터가 적다면 더 많은 계층을 학습시켜도 됩니다.
- Classifier만 새로 학습시키기
- 이 방법은 컴퓨팅 연산 능력이 부족하거나 데이터셋이 너무 작을때, 혹은 내가 풀고자 하는 문제가 pre-trained 모델이 이미 학습한 데이터셋과 매우 비슷할 때 고려해볼 수 있습니다.
저희는 세 가지 방법을 모두 사용하여 성능을 평가했습니다. ResNet101 모델의 구조를 더 자세히 살펴보면 layer1, layer2, layer3, layer4와 같이 4개의 블록으로 이루어져 있습니다. 1개부터 4개의 블록을 새로 학습시킨 결과, layer2, layer3, layer4를 새로 학습시킬 때가 가장 높은 정확도(0.8249)를 보이는 것을 확인할 수 있습니다.
데이터 증강과 전이 학습을 통해 모델 성능을 개선한 결과, 백인을 아시아인으로 구분하는 빈도를 크게 줄일 수 있었습니다.
향후 계획
프로젝트를 진행하면서 여러 시행착오를 겪었습니다. 만족스러운 결과를 얻긴 했지만 아직 발전할 수 있는 부분이 많이 있고, 화질이 낮은 이미지를 제대로 분류하지 못 하거나 백인을 아이사인으로 분류하는 등 해결하지 못 한 문제점도 있습니다. 현존하는 문제점과 저희가 생각한 해결 방안은 다음과 같습니다.
- 선글라스, 모자 등 얼굴이 가려진 경우 정확하게 분류하지 못 합니다.
- 해당 데이터로 추가 학습
- 무작위로 이미지의 특정 부분을 지우는 데이터 증강 기법 추가
- 백인과 아시아인을 정확히 분류하지 못 합니다.
- 피부톤의 차이를 확실히 하기 위해 이미지 색상 대비를 더 높이는 데이터 증강 기법 추가
- 관중 데이터 추가 수집 후, 학습 시 UTKFace 데이터와 관중 데이터 같이 학습
- 여전히 저화질 데이터 분류의 어려움 존재합니다.
- 학습 데이터 화질 추가 저하
- MobileNetV3와 같은 최신 모델 이용
또한 피드백을 통해 모델 성능을 개선할 수 있는 방안을 몇 가지 제안 받기도 했습니다. 모델 자체는 완성 되었으나 위의 문제점과 더불어 피드백을 적극적으로 반영하여 향후 더 발전시켜 보고자 합니다. 저희가 받은 피드백은 다음과 같습니다.
- 바운딩 박스의 영역을 임의로 넓혀 보기
- 바운딩 박스는 얼굴 부분만 포함하고 있기 때문에 보다 정확한 예측을 하기 위해선 박스의 크기를 임의로 넓혀 머리 전체를 포함하면 더 좋은 결과가 있을 것이라 예상됩니다.
- 색상 정규화 부분을 0.5 정도로 수정하거나 삭제
- 프로젝트에서 사용한 색상 정규화는 ImageNet의 정규화 방식과 같기 때문에 모델의 특성에 맞게 0.5로 바꾸거나 아예 삭제하면 더 높은 정확도를 보일 것이라 예상됩니다.
- EfficientNet과 같은 성능이 더 뛰어나고 가벼운 모델 사용
- ResNet101도 좋은 모델이지만 EfficientNet처럼 더 가볍고 성능이 좋은 모델도 많이 공개되었기 때문에 태스크에 더 적합한 모델을 찾으면 더 높은 정확도를 얻을 수 있습니다.
마무리
이번 프로젝트는 올림픽 관중석의 얼굴 이미지를 분석하여 종목별로 아시아인의 비율을 파악하는 데 목표를 두고 진행되었습니다. 프로젝트를 통해 얼굴 탐지 및 인종 분류 모델의 성능을 높이기 위해 여러 데이터 전처리 및 증강 기법을 시도했고, 전이 학습을 활용해 모델의 효율성을 향상시켰습니다. 그 결과, 관중석 이미지에서 아시아인을 효과적으로 탐지할 수 있는 모델을 개발할 수 있었습니다.
그러나 여전히 몇 가지 개선할 점이 남아있습니다. 위에서 언급함과 같이, 얼굴이 가려진 경우나 저화질 이미지를 정확하게 분류하지 못하는 문제점, 그리고 아시아인과 백인을 구분하는 데 어려움 등이 존재합니다. 많은 분들이 제시해주신 의견과 피드백을 바탕으로 남은 시간 동안 다양한 방법을 통해 모델 성능을 더욱 향상할 계획입니다.
단순히 ‘관중 비율을 계산할 수 있을까?’ 하는 궁금증에서 시작된 프로젝트가 딥러닝 기술을 만나 실질적인 가치를 창출하는 좋은 사례가 되었습니다. 앞으로 진행될 더 다양하고 재미있는 프로젝트에도 많은 관심과 지속적인 성원 부탁드립니다.
감사합니다.
'딥러닝' 카테고리의 다른 글
[프로젝트] 킥보드 위험 상황 디텍션 (1) | 2024.10.27 |
---|---|
[논문리뷰] 5% 아쉬운 무단횡단 감지 딥러닝. YOLOv4+DeepSORT를 중심으로 (0) | 2024.09.10 |
[논문 리뷰] 보행자 감지 최강자(라 주장하는) 모델 : Localized Semantic Feature Mixers for Efficient Pedestrian Detection in Autonomous Driving (5) | 2024.09.04 |
MoveNet으로 수집한 데이터를 seq데이터로 변환하자 (0) | 2024.08.30 |
Mediapipe는 다중인식 되지 않는다. MoveNet을 이용해보자 (0) | 2024.08.23 |