캐스케이드 분류

Codren·2021년 6월 25일
0

Section 1. 캐스케이드 분류 (Cascade Classifier)

1. Viola – Jones 얼굴 검출기

수 천개의 얼굴 영상(Positive)과 얼굴이 아닌 영상(Negative)을 훈련하여 분류 모델을 구현하고 해당 모델을 이용해서 입력 영상 속 얼굴을 검출하는 방식

  • 2001년에 바이올라 존스가 얼굴 검출 관련 논문 발표
  • AdaBoost 라는 알고리즘을 사용한 머신러닝 기술
  • 유사 하르(Harr-like) 특징을 사용
  • 캐스케이드(cascade) 방식을 통한 빠른 동작 속도




2. 유사 하르 특징 (Haar-like features)

  • 사각형 형태의 필터 집합을 사용
  • 흰색 사각형 영역 픽셀 값의 합에서 검정색 사각형 영역 픽셀 값을 뺀 결과 값을 추출
  • 최종적으로 + 값인지 - 값인지를 기준으로 얼굴의 특징이 있는지 판단
  • 사람의 눈쪽은 눈썹과 눈동자 등으로 인해 어둡고, 그 아래 콧등 부분은 밝게 표시되는 특징들을 추출




3. 캐스케이드 분류기(Cascade classifier)

  • 특징을 모으는 작업은 에이다 부수트 알고리즘으로인해 수행되며 평균적으로 6000개의 특징을 추출하는데, 모두 비교하기에는 비효율적
  • 또한 영상 파일에서 보통 얼굴이 한 두개 있을 뿐 나머지 부분은 얼굴이 아닌 non-face 영역
  • non-face인 영역을 빠르게 skip 하도록 다단계 (cascade) 검사 수행
  • 캐스케이드 분류기 얼굴 검출 과정 시각화 영상 유튜브 링크




4. cv2.CascadeClassifier 객체 생성 및 학습 데이터 불러오기

  • cv2.CascadeClassifier 객체, 학습 데이터 파일

  • filename - 얼굴을 검출하도록 특징을 지정해논 파일이며 미리 학습된 모델
  • 객체를 생성할 때 생성자를 이용해서 filename 값으로 XML 파일을 지정
  • 또는 객체 생성 후 load 함수를 이용하여 학습된 모델 데이터 (XML) 삽입




5. 미리 학습된 XML 파일

  • OpenCV 깃허브 사이트에서 다운로드 가능 OpenCV github




6. 캐스케이드 분류 함수

  • detectMultiScale 함수
  • image - 입력영상
  • scaleFactor - 영상 축소 비율 (기본값 1.1.)
  • minNeighbors - 얼마나 많은 이웃 사각형이 검출되어야 최종 검출 영역으로 설정할지를 지정 (기본값 3)
  • flags - (현재)사용되지않음
  • minSize - 최소 객체 크기(w, h)
  • maxSize - 최대객체크기(w,h)
  • result - 검출된 객체의 사각형 정보(x, y, w, h)를 담은 numpy.ndarray. shape=(N, 4)




7. 캐스케이드 분류 실습

  • 실습 코드 핵심 부분

    ① 입력 영상 파일을 src로 불러옴
    ② cv2.CascadeClassifier 객체를 생성하고 다운로드 받은 XML 파일을 생성자 인자로 넘김
    ③ detectMultiScale 함수를 이용하여 얼굴로 판단되는 부분의 정보를 faces 변수에 저장
    ④ faces 에는 x,y,w,h 정보가 담겨있으므로 이를 이용하여 사각형을 출력


  • 출력 결과

0개의 댓글