l 발췌: Learning OpenCV 제대로 배우기(개리 로스트 브라드스키 저, 황선규 역)
기계 학습이란?
기계 학습(ML: machine learning)의 목적은 주어진 데이터를 유용한 정보 형태로 변환하는 것이다. 다시 말해서 데이터들의 집합을 기계에게 학습시킨 후, 새로운 데이터에 대한 질문에 기계가 대답할 수 있게끔 만드는 작업이다. 예를 들어, “이 데이터와 가장 유사한 데이터는 무엇인가?”와 같은 질문에 대한 답을 알고 싶은 것이다. 때로는 비용(cost) 요소가 존재하는 경우도 있는데, 이 경우 다음과 같은 질문이 가능하다. “현재 잘 팔리고 있는 상품들 중에서 만약 소비자들에게 해당 상품의 광고를 보여주었을 경우 소비자의 구매욕이 가장 증가할 것 같은 제품은 어떤 것인가?” 기계 학습은 데이터에서 얻은 규칙이나 패턴을 이용하여 추후 입력되는 데이터로부터 유용한 정보를 추출한다.
OpenCV 기계 학습 알고리즘
마할라노비스
데이터의 분포 모양을 고려한 거리 측도이다. 데이터 공분산을 이용한 나눗셈 연산이 포함되어 있다. 만약 공분산이 단위행렬(단위 분산)일 경우, 마할라노비스 거리는 유클리디언 거리와 완전히 동일하다.
* 두 점간의 거리와 유사도 판별 - http://blog.daum.net/pg365/166
K-평균
데이터의 분포를 K개의 군집으로 나누는 비교사 군집화 알고리즘이다. 이때 군집의 개수 K는 사용자에 의해 입력 받는다. K-평균 방법은 중심점들이 가우시안이 아니라는 점과 군집 결과가 마치 비누 거품 모양을 닮았다는 점에서 기대값-최대화(expectation maximization) 방법과 차이가 있다. 군집화 된 영역들은 희소 히스토그램의 빈으로써 사용되기도 한다. 이 알고리즘은 Steinhaus에 의해 발명되었고, Lloyd에 의해 사용되었다.
* OpenCV K-means 예제 - http://blog.daum.net/pg365/211
정상/순수 베이즈 분류기
특징들의 분포가 가우시안을 따르고, 서로 통계적으로 독립적이라고 가정한 생성 분류기이다. 이러한 가정은 항상 들어맞는 것이 아니기 때문에 이 분류기는 종종 “순수 베이즈(naïve Bayes)” 분류기라고 불린다. 그러나 이 방법은 상당히 잘 동작한다.
* OpenCV 정규 베이즈 분류기(Normal Bayes Classifier) 예제 - http://blog.daum.net/pg365/208
결정 트리
규별 분류기의 일종이다. 트리는 현재 노드에서 데이터를 가장 잘 나눌 수 있는 하나의 데이터 특징과 임계값을 찾는다. 데이터가 두 클래스로 분기되고, 이러한 작업은 트리의 왼쪽과 오른쪽 자식 노드에서 재귀적으로 반복된다. 결정 트리는 그다지 자주 최고 성늘을 보여주지는 않지만, 속도가 빠르고 높은 기능성을 가지고 있기 때문에 가장 먼저 시도되는 분류기이다.
부스팅
구별 분류기들의 집단이다. 최종 분류는 개별 분류기들의 분류 결과에 가중치를 적용하여 조합함으로써 결정된다. 훈련 단계에서 분류기들의 집단은 한 번에 하나씩 학습된다. 각각의 분류기들은 “약한” 분류기라 불린다. 일반적으로 이러한 약한 분류기들은 “결정 그루터기”라고 불리는 단일 변수 결정 트리들로 구성된다. 훈련 단계에서 결정 그루터기는 데이터로부터 자신의 분류 결정을 학습하고, 데이터에 대한 해당 그ㄹ터기의 정확도를 근거로 가중치도 학습한다. 각 분류기를 하나씩 훈련시키는 과정에서 데이터들의 가중치가 재조정함으로써 오차를 발생시킨 데이터에 관심이 더 집중되게 만든다. 이러한 훈련 과정은 데이터 잡합의 전체 오차가 집합 임계각보다 낮아질 때까지 계속 된다. 이러한 알고리즘은 대령의 훈련 데이터들이 사용 가능할 때 효과적이다.
* OpenCV 부스팅(Boosting) 알고리즘 예제 - http://blog.daum.net/pg365/209
랜덤 트리
다스의 결정 트리들로 구성된 구별 포레스트(forest)를 말한다. 각 결정 트리는 지정된 깊이까지 확장될 수 있다. 각 트리의 노드들은 데이터 특징들에서 암의로 선택된 부분 집합에 대해서만 분기 변수를 선택하도록 되어있다. 이렇게 함으로써 각 트리들은 통계적으로 독립적인 결정을 내리게 된다. 실행 단계에서는 각 트리들이 가중치 없는 득표를 얻게 된다. 이 알고리즘은 매우 효과적이고, 각 트리의 결과 숫자들의 평균을 구함으로써 회귀를 수행할 수도 있다.
얼굴 검출/하르 분류기
부스팅을 효과적으로 이용한 객체 검출 응용프로그램이다. OpenCV 배포판에는 놀랄 만큼 잘 동작하는 전면 얼굴 검출기가 포함되어 있다. 제공되는 프로그램을 이용하여 다른 객체들을 새로 훈련시킬 수도 있다. 이 알고리즘은 강체와 특징 있는 장면 영상에서 잘 동작한다.
기대값-최대화(EM)
군집화를 위해 사용되는 생성 비교사 알고리즘이다. 이 알고리즘은 입력 데이터를 N개의 가우시안 함수로 근사화하며, 여기서 N은 사용자에 의해 입력 받는다. 기대값-최대화는 복잡한 분포의 데이터들을 소수의 파라미터(가우시안 함수의 평균과 표준 편차)로 펴현할 수 있다. 이 방법은 분할에서도 사용된다. 이 방법과 앞서 설명한 K-평균 방법과 비교해 보라.
K-최근방 이웃
매운 단순한 구별 분류기이다. 훈련 데이터는 레이블과 함께 저장된다. 실험 데이터가 들어오면 실험 데이터와 가장 가까운 K개의 데이터 중에서 가장 많이 발견된 레이블을 찾고, 이를 해당 데이터의 레이블로 할당된다. 거리 계산은 일반적으로 유클리디안 거리를 사용한다. K-최근방 이웃 방법은 실제 사용할 수 있는 분류 방법 중에서 가장 간단한 방법이다. 이 방법은 효과적이긴 하지만, 느리고(훈련 데이터를 모두 보관하여야 하기 때문에) 많은 메모리 공간을 필요로 한다.
* OpenCV K-근접이웃(K-Nearest Neighbor; K-NN) 분류기 예제 - http://blog.daum.net/pg365/212
신경망/다층 퍼셉트론(MLP)
입력 신호를 더 잘 표현하기 위하여 입력 노드와 출력 노드 사이에 “은닉층(hidden layer)”를 가지고 있는 구별 알고리즘이다. 이 방법은 훈련 과정은 느릴 수 있지만, 실제 분류는 매우 빠르게 동작한다. 문자 인식에서 가장 좋은 성능을 나타낸다.
* OpenCV 인공신경망(Artificial Neural Networks; ANN) 예제 - http://blog.daum.net/pg365/213
서포트 벡터 머신(SVM)
회기에서도 사용될 수 있는 구별 분류기이다. 두 데이터 점 사이의 거리 함수는 고차원 공간에서 정의된다. 데이터를 고차원 공간으로 투영함으로써 이 데이터들이 보다 선형으로 분리되기 쉬운 상태로 변형된다. 서포트 벡터 머신은 고차원 공간에서 클래스들을 최대한 효과적으로 분할하는 초평면(hyperplane)을 구한다. 이 알고리즘은 제한된 데이터에 대하여 최고의 성능을 보이지만, 대량의 데이터 집합이 사용 가능한 경우에는 부스팅이나 랜덤 트리보다 성능이 떨어지는 경향이 있다.
* OpenCV 서포트 벡터 머신(Support Vector Machine; SVM) 예제 - http://blog.daum.net/pg365/210
from http://blog.daum.net/pg365/213
기계학습 관련 opencv 라이브러리 http://blog.secmem.org/364
- 결정트리, SVM,neural network, bayesian, k- nearist neighbor
'전공지식정리 > 영상처리(Image Signal Processing)' 카테고리의 다른 글
동적할당 (0) | 2022.01.20 |
---|---|
cvSobel (0) | 2022.01.20 |
[스크랩][공유] 허접한 교통표지판 인식 구현 동영상입니다. (0) | 2022.01.20 |
영상에서의 모멘트(스크랩) (0) | 2022.01.20 |
모두를 위한 머신러닝/딥러닝 강의 (0) | 2020.12.08 |