ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로젝트] 얼굴 사진으로 나이 감지하기
    AI 부트캠프 2022. 1. 11. 22:09

    1. 문제 정의

    청소년들이 성인 신분증을 도용하여 술이나 담배를 구매한 뒤, 되려 판매업자를 협박한 사례를 본 적 있는가? 미성년자들이 위조 신분증으로 술을 구매한 뒤, 자진 신고하여 자영업자들은 수백 만원의 벌금을 물게 한 사건이 빈번하다.

     

    [팩트체크K] 청소년에 속아 술 판매한 업주, 처벌 면제? 방심은 금물!

    "부탁이다... 이집에서 끝내거라!!!" 지난달 온라인 커뮤니티와 SNS에서 논란이 된 사진입니다. 사진 속 현...

    news.kbs.co.kr

     

    그렇다면 청소년들이 편의점이나 마트에서 담배를 구매할 수 있는 확률은 몇 프로일까? 중3 학생의 경우 50프로 이상이며, 고2, 고3 학생의 경우 80프로 이상이다. (출처: 질병관리청 <청소년 건강행태 조사> 2005~2020). 

     

    미성년자가 청소년 유해 약물 구매 하는 것을 딥러닝으로 방지 할 수 있지 않을까라는 질문으로 이 프로젝트를 시작하게 되었다. 

    편의점이나 마트에서 고객의 얼굴 이미지를 감지하고 분석해서 술이나 담배를 구매할 수 있는 성인 고객인지 판단하는 모델을 구축하는 것이 이 프로젝트의 목표이다. 

     

     

    2. 가설 설정

    만들고자 하는 모델은 사람 얼굴 이미지를 이용해서 미성년자 또는 성인 그룹으로 나누는 분류 모델이다. 여기서 미성년자와 성인의 기준은 나이 20살이다. 그러므로 20살에 근접한 나이 대의 (17-22세) 경우, 그 외의 다른 나이 대 보다 정확도가 더 떨어질 것이라는 가설을 세우고 실험하였다. 

     

     

    3. 데이터셋

    UTKface 데이터셋은 약 2만 여개의 얼굴 사진으로 구성되어 있다. 

     

    UTKFace

    20k+ cropped face images with age, gender and ethnicity

    www.kaggle.com

    0-19세까지는 Kid, 20세 이상부터는 Adult 그룹으로 라벨링하였다. 

    또한, 미성년자, 성인 두 그룹으로 분류하는 모델이기 때문에 베이스라인은 0.5를 갖는다. 

     

     

    4. 모델링

    CNN 모델

    CNN모델의 구조는 다음과 같다. 텐서를 축소하고 과적합을 방지하기 위해 MaxPooling2D를 각 레이어마다 추가하였다. 또한 배치 정규화 (Batch Normalize)를 통해 학습 속도를 개선하고 기울기값 소실 (Gradient Vanishing) 문제를 해결하였다. Dropout은 특정 피처만을 과도하게 학습하는 오버피팅 문제를 방지하고자 사용하였다. 

    학습 데이터 정확도 : 0.758
    검증 데이터 정확도 : 0.744

     

    ResNet50 모델

    전이 학습은 이미 학습된 신경망의 일부를 이용하는 것을 의미한다. 이미지 분류의 경우 ResNet이나 VGG가 대표적인 전이 학습으로, 이 프로젝트의 경우 ResNet을 사용하였다. ResNet은 50개의 레이어로 구성된 컨볼루션 신경망으로, 백만개가 넘는 영상으로 훈련되어 우수한 성능을 보인다. 

    학습 데이터 정확도 : 0.981
    검증 데이터 정확도 : 0.776

    CNN모델과 비교하여 학습 데이터의 경우 정확도가 대폭 상승하였다. 

      CNN Model ResNet50 Model
    Train Data Accuracy 0.758 0.981
    Validation Data Accuracy 0.744 0.776

    따라서, ResNet50를 사용한 모델로 최종 모델을 결정하였다.

     

     

    5. 최종 모델 평가

    가설 검증을 위해 개의 테스트 데이터셋을 사용하였다. 번째는 20세에 근접한 나이대 즉 17-22세 까지의 그룹이다. 두 번째는 그 외의 모든 나이 그룹이다.

    경우 정확도가 각각 0.7, 0.88로 큰 차이를 보인다. , 미성년자와 어른 그룹을 구분하는 20살 기준점 근접한 나이대의 경우 정확도가 떨어지는 것을 확인하였다. 그러므로 처음 설정한 가설이 사실임을 알 수 있다.

    최종 모델을 이용해 총 세 가지 이미지를 예측해 보았다. 아기와 할머니처럼 기준 나이 20세에서 나이 차이가 큰 경우는 분류를 정확하게 하는 것을 확인할 수 있다.

    하지만 20대의 경우는 Kid, Adult의 확률이 큰 차이를 나타내지 못하고 있다. 

     

     

    6. 회고

    앞서 언급했듯이 20세와 큰 차이가 안나는 나이대의 경우 미성년자/성인의 구분이 어렵다. 사실 이 문제는 현실에서도 나타나기 때문에 딥러닝으로 구현한 모델에서도 그대로 나타난다고 생각한다. 이를 해결하기 위해 더 많은 양의 데이터 확보와 완성도 높은 모델링이 필요해 보인다. 또한 전이 학습 모델을 변경하는 방법 등을 통해 성능을 개선할 수 있으리라 생각한다. 

    사실 처음 계획했을 때는 만든 모델을 웹 서비스로 배포하는 것까지 완성하고자 하였다. 하지만 예상보다 훨씬 오래걸리는 모델 학습 시간으로 인해 프로젝트 마감 시간(일주일)을 지키기 위해 계획 수정을 하였고, 웹 서비스 구현은 보류하게 되었다. 

     

     

    GitHub Code

     

    GitHub - DAWUNHAN/faceAgeDetection: Building a model to detect ages by Face Images

    Building a model to detect ages by Face Images. Contribute to DAWUNHAN/faceAgeDetection development by creating an account on GitHub.

    github.com

     

     

    Reference

    GitHub. 2022. GitHub - christianbv/AgeNet: Age estimation project in TDT4173, NTNU Trondheim. We have created a deep CNN for predicting ages based on images.. [online] Available at: <https://github.com/christianbv/AgeNet> [Accessed 11 January 2022].

    Kjærran, A. and Bugge, E. (2021). Facial Age Estimation Using Convolutional Neural Networks.

    Kosis.kr. 2022. KOSIS. [online] Available at: <https://kosis.kr/statHtml/statHtml.do?orgId=117&tblId=DT_117_12_Y014> [Accessed 10 January 2022].

     

    Presentation

    안녕하세요 한다운입니다

    오늘 발표는 문제 정의와 가설 설정을 , 이 이슈를 해결하기 위해 필요한 데이터와 모델을 차례대로 소개하겠습니다

    제가 주목한 이슈는 청소년들이 술, 담배를 직접 구매하여 청소년 유해 물질에 노출되는 문제입니다.  차트를 보시다시피, 청소년 담배 구매 용이성은 고2, 3 학생의 경우 80% 이상으로 나타났습니다. 또한 대다수의 마트나 편의점에서 주류 판매를 할 때 신분증을 확인하지 않는 것으로  나타났습니다.  또한 몇몇 청소년들은 신분증을 도용하여 담배와 주류를 구매하고 있습니다. 이를 방지하기 위해  구매자 얼굴 이미지를 통해 나이를 감지하고, 술 담배를 구매할 수 있는지 판단하는 모델을 구축하고자 합니다.

    술과 담배를 구매할 있는 스무살 이상을 성인 그룹으로, 그 이하는 미성년자로 구분하는 모델을 만들려고 합니다. , 20살과 근접한 나이대인 17살에서 22살까지는 그 외의 나이대보다 모델링 정확도가 낮으리라는 가설을 설정하였습니다. 이를 위해, 테스트 데이터의 경우 17살에서 22살까지의 그룹과, 그 외의 그룹으로 다시 한번 나누었습니다.

    데이터는 UTK 페이스 데이터셋을 사용하였습니다. 학습, 훈련, 검증 데이터가 약 2만개 이상의 크기를 갖고 있습니다. 19세 이하는 미성년자로, 그 이상은 성인으로 라벨링 하였으며, 미성년자인지 성인인지 분류하는 모델이기 때문에 베이스라인은 0.5입니다.

    다음은 구축한 CNN 모델입니다. 맥스 풀링 과정을 통해 텐서의 크기를 줄이고, 과적합을 방지하였습니다. 또한 배치 노멀라이즈를 통해 학습 속도를 개선하고, 기울기값 소실 문제를 해결하였습니다. 드롭아웃은 특정 피처만을 과도하게 학습하는 오버피팅 문제를 방지할 수 있습니다. 이 모델을 학습한 결과 정확도는 0.75, 검증 데이터의 경우는 0.74로 베이스라인보다 더 높게 나왔습니다.

    성능을 올리기 위해 전이학습을 진행하였습니다. ResNet5050개의 레이어로 구성된 컨볼루션 신경망으로, 백만개가 넘는 영상으로 훈련되어 우수한 성능을 보입니다. 앞서 진행한 cnn 모델과 비교해 학습 데이터의 정확도가 대폭 상승한 것을 확인할 있습니다. 따라서, ResNet을 사용한 모델로 최종 모델을 결정하였습니다.

    최종 모델을 이용해 가지 다른 이미지를 예측하였습니다. 아기와 할머니처럼 기준 나이인 20살과 차이가 큰 나이대의 사진은 분류를 정확하게 하는 것을 확인할 수 있습니다.반면, 20대의 사진으로 예측한 경우, 미성년자와 성인의 확률이 큰 차이를 보이지 않는 것으로 나타났습니다.

    정확한 수치를 얻기 위해 개의 테스트 데이터셋을 사용하였습니다. 번째는 20세에 근접한 나이대십칠세에서 스물 두살까지의 그룹입니다. 두 번째는 그 외의 모든 나이 그룹입니다. 경우 정확도가 각각 0.7, 0.88로 큰 차이를 보입니다. , 미성년자와 어른 그룹을 구분하는 20살 기준점 근접한 나이대의 경우 정확도가 떨어지는 것을 확인하였습니다. 그러므로 처음 설정한 가설이 사실임을 알 수 있습니다.

    이번 프로젝트를 진행하면서 느낀 점을 공유하겠습니다. 사실 처음 계획했을 때는 모델을 빠른 시간 안에 만든 , 직접 서비스를 구현해서 웹 사이트로 배포하려 했습니다. 하지만 사이즈의 데이터셋을 학습하는 시간이 굉장히 오래 걸렸고, 계획을 수정해야 했습니다. 그래서 기회가 된다면 실제로 사람들이 사용할 수 있도록, 서비스를 완성해서 배포하고 싶습니다. 또한, 앞서 말씀드린 것 처럼 스무살과 근접한 나이대의 경우 정확도가 낮아지는 문제를 아직 해결하지 못했습니다. 부분은 모델링을 완성도 있게 만들고, 많은양의 데이터를 확보한 뒤 다시 한번 도전해보고 싶습니다.

    발표를 들어주셔서 감사합니다.

    'AI 부트캠프' 카테고리의 다른 글

    [n511] Python Programming  (0) 2022.01.18
    [n435] 이미지 처리 요약  (0) 2022.01.12
    [n434] GAN  (0) 2022.01.05
    [n433] AutoEncoder  (0) 2022.01.04
    [n432] Segmentation & Object Detection  (0) 2022.01.03

    댓글