-
캐스케이드 분류기컴퓨터 비젼(Computer Vision)/영상 분할과 객체 검출 2022. 2. 17. 16:28
캐스케이드 분류기(Cascade Classifier)
Positive 샘플(특정 목표 객체)과 Negative 샘플(목표 객체가 아닌 것) 에 대한 최소 수 백개의 영상을 이용해 학습된되는 검출기로,
1) Haar-like feature를 사용하며, 2) Adaboost 기반의 분류를 수행하며, 3) Cascade 방식을 통해 빠른 속도로 동작한다.Haar-likfe feature
- 사각형 형태의 필터 집합
- 흰색 사각형 영역 픽셀 값의 합에서 검정색 사각형 영역 픽셀 값을 뺀 결과 값을 추출
- 24x24 Cropped 영상에서 얼굴 판별에 유용한 Haar-like feature를 선별
- 위 행은 2개의 좋은 feature을 보인다. 첫 번째 feature는 눈 영역이 코 영역보다 어둡다라는 특징에 초점을 맞춘 거 같으며, 두 번째 feature는 눈이 콧대보다 더 어둡다라는 특징에 초점을 맞춘 것으로 보인다.
- 학습시 16,000개의 features 중 최고의 features 을 선별하게 되는데, adaboost를 이용해 16,000개 features 중 6,000개의 features가 선별된다.
- 또한 6,000개의 features를 적용해 얼굴인지 아닌지 확인하게 되는데, cascade 방식을 적용해 빠르게 얼굴인지 아닌지를 판별한다.
- 영상 중 대부분의 영역은 얼굴이 아닌 영역이다.
- 빠르게 얼굴이 아닌 부분을 판별하여 속도를 높인다.
- 작동 예시: https://www.youtube.com/watch?v=hPCTwxF0qf4
cv2.CascadeClassifier() -> <CascadeClassifier obj> cv2.CascadeClassifier(filename) -> <CascadeClassifier obj> cv2.CascadeClassifier.load(filename) -> retval
- filename: XML 파일 이름 (여기서 다운 받을 수 있다.)
- retval: 성공(True) 또는 실패(False)
cv2.CascadeClassifier.detectMultiScale(image, scaleFactor=None, munNeighbors=None, flags=None, minSize=None, maxSize=None) -> result
image: 입력 영상 (cv2.CV_8U)
scaleFactor: 영상 축소 비율. default 1.1 // 높일수록 속도가 높아지나 정확도는 떨어짐.
minNeighbors: 얼마나 많은 이웃 사각형이 검출되어야 최종 검출 영역으로 설정할지를 지정. default 3
flags: 현재 사용 안됨
minSize: 최소 객체 크기. (w, h) 튜플. 영상내에 등장할 객체가 작지 않다면 값을 줘 속도를 높일 수 있음
maxSize: 최대 객체 크기. (w, h) 튜플.
result: 검출된 객체의 사각형 정보(x,y,w,h)를 담은 np.ndarray, shape=(N,4), dtype=np.int32 (N=검출된 객체 갯수)
참고
https://docs.opencv.org/4.x/de/d37/group__objdetect__cascade__classifier.html
https://docs.opencv.org/4.x/db/d28/tutorial_cascade_classifier.html
'컴퓨터 비젼(Computer Vision) > 영상 분할과 객체 검출' 카테고리의 다른 글
HOG 보행자 검출 (0) 2022.02.17 템플릿 매칭 (0) 2022.02.17 모벤트 기반 객체 검출 (0) 2022.02.16 영상 분할과 객체 검출 (0) 2022.02.16