ABOUT ME

Today
Yesterday
Total
  • Face Detection
    컴공지식/컴퓨터비전 2024. 10. 28. 20:21

    Haar-like Feature가 얼굴 탐지를 위해 쓰인다.

    Haar-like Feature검은색 사각형과 흰색 사각형 안에 있는 픽셀 값들의 합의 차이를 계산하는 거다.

     

    왜 이걸 쓰냐면 얼굴의 특징적인 부분을 탐지하기에 좋다. 예를 들어서

    눈은 밝은 이마 아래에 어둡게 보이는 경향이 있거, 코는 양옆보다 밝은 영역으로 탐지될 수 있다.

    그래서 검은색 사각형은 어두운 부분(눈 등), 흰색 사각형은 밝은 부분(이마 등)과 대응된다.

     

    Haar-like Feature의 특징은 검은 사각형 내부의 픽셀 합 - 흰 사각형 내부의 픽셀 합을 계산한다.

    이렇게 계산된 값이 얼굴 탐지에 중요한 특징 값이 되는 거다.

    그리고 아무 위치나 스케일에서 쓸 수 있다.

    이미지 안의 어디든, 크기가 커지든 작아지든 유연하게 탐지할 수 있다는 거다.

     

    얼굴 탐지에서 훈련(Training) 과정이 어떻게 진행되는지 알아보자

    여기서도 Haar-like Feature가 중요한 역할을 한다.

     

    훈련(Training) 과정에서 무슨 일이 벌어지나?

    1. 여러 크기와 위치의 특징 생성
      • 이미지를 샅샅이 훑으면서 다양한 위치와 크기에서 Haar-like 특징을 뽑는다.
        • 눈, 코, 입 주변의 밝기 패턴 같은 중요한 정보를 찾아낸다.
    2. 많은 특징 중 '중요한' 것만 선택
      • 수천 개의 특징이 생성되지만, 그 중에서 얼굴을 잘 구분하는 유의미한 특징만 골라야 한다.
        • 예를 들어, 눈 위-아래의 밝기 차이 같은 건 얼굴 탐지에 꽤 유용하다.
        • 반대로 덜 중요한 특징은 버린다. 무조건 많이 뽑는다고 다 쓸모 있는 게 아니다.

     

    정리하자면 훈련 단계에서는 수많은 위치와 크기에서 특징을 생성하고, 그 중에서 얼굴 탐지에 가장 잘 맞는 특징만을 고르는 거다.

     

    이제 얼굴 탐지에 많이 쓰이는 주요 알고리즘 Adaboost(아다부스트)을 알아보자

    Adaboost는 여러 개의 약한 학습기(weak learner)를 조합해서 강한 학습기(strong learner)를 만드는 Boosting 알고리즘이다.

    얼굴 탐지에선 OpenCV에서 이 Adaboost를 사용해서, 여러 특징(feature) 중에서 얼굴을 탐지하는 데 중요한 특징을 찾아내도록 훈련시킨다.

     

    약한 학습기란? 그냥 혼자선 제대로 학습을 못하는 모델이다.

    예를 들어, 얼굴 탐지에서 어떤 학습기가 “눈 주변 밝기만” 보고 판단한다면 그건 하나만으로는 부족할거다.

    그래서 여러 약한 학습기를 조합해서 강한 학습기로 만드는 게 목표다.

    실패한 샘플에 더 집중하는 게 이 알고리즘의 핵심이다.

    초기에는 단순하게 분류하지만, 잘못 분류된 샘플에 더 많은 가중치를 부여해서 점점 더 학습을 개선하는 거다.

    이렇게 계속 실수를 보완해 나가면서 점점 더 정확한 모델이 만들어진다.

    아다부스트 트레이닝을 이미지를 통해 알아보자

     

     

    • Step 1: 약한 학습기 1이 단순하게 분류를 시도한다. 하지만 몇몇 오답(예: 주황색 삼각형)을 남기고 실패하지.
    • Step 2: 두 번째 약한 학습기가 이전에 틀렸던 샘플에 더 집중한다(가중치 증가). 이번엔 수직 방향으로 경계를 나눠본다.
    • Step 3: 또 틀린 부분을 보완하는 새로운 학습기가 추가된다. 조금씩 정확해진다.
    • Step 4: 이렇게 여러 학습기가 협력한 덕분에 최종적으로 모든 데이터를 잘 분류하게 된다.

    정리하자면, Adaboost는 처음엔 부족한 여러 약한 학습기를 조합해서 점점 더 정확한 모델을 만드는 과정이다.

     

    다음으로 Cascade Classifier(캐스케이드 분류기)에 대해 알아보자

    캐스케이드 분류기는 약한 학습기(Weak Learners)를 여러 개 모아서 강한 학습기(Strong Learner)를 만들고, 그 강한 학습기들을 연속적으로 배치(Cascade)한 구조다.

    이 구조 덕분에 얼굴이 아닌 부분(잡다한 부분)을 빠르게 거르고, 얼굴인 부분만 정밀하게 탐지할 수 있다.

     

     

    이 그림을 보면 여러 강한 학습기들이 단계별로 연결돼 있다.

     

    • 첫 번째 단계: 기본적인 특징으로 얼굴인지 아닌지 빠르게 필터링
    • 두 번째, 세 번째 단계: 점점 더 정밀한 검사를 통해 얼굴 여부를 판별
    • F(Fail): 어느 단계에서든 얼굴이 아니라고 판단되면, 해당 창(sub-window)은 바로 버림.
    • T(True): 모든 단계를 통과한 것만 더 정밀한 탐지를 거침.

     

    이렇게 처리하는 이유는 효율성 때문이다. 모든 부분을 정밀하게 검사하면 시간이 너무 오래 걸리니까..

     

    이제 Integral Image(적분 이미지)에 대해서 알아보자

    Haar-like Feature를 계산할 때 특정 사각형 내부의 모든 픽셀 값을 합산해야 하는데, 이걸 그냥 다 더하면 계산이 너무 느려진다.

    그래서 Integral Image라는 방법을 써서 사각형 영역의 픽셀 합을 아주 빠르게 계산하는 거다.

    마치 한 번 계산한 결과를 미리 저장해 두고, 필요할 때 꺼내 쓰는 방식이다.

     

    오른쪽 적분 이미지는 각 칸은 해당 칸의 왼쪽과 위쪽 모든 값을 합한 결과다.

    이처럼 한 번 계산해 두면, 특정 영역의 합을 빠르게 계산할 수 있다.

    중복 계산 없이 바로바로 값이 나와서 속도가 확 빨라진다.

     

     

    '컴공지식 > 컴퓨터비전' 카테고리의 다른 글

    얼굴 인식 코드  (1) 2024.10.28
    Tracking(추적)이란?  (2) 2024.10.28
    객체 탐지 방법  (1) 2024.10.28
    이미지 매칭 코드  (1) 2024.10.24
    CNN이란?  (2) 2024.10.24
Designed by Tistory.