반응형
OpenCV 머신 러닝 클래스
OpenCV에서 머신러닝과 관련된 클래스를 제공하고 있습니다.
OpenCV 머신 러닝 클래스 설명
클래스 이름 | 설명 |
ANN_MLP | 인공 신경망(artificial neural network) 다층 퍼셉트론(multi-layer perceptron) 입니다. 여러 개의 은닉층을 포함한 신경망을 학습시킬 수 있고, 입력 데이터에 대한 결과를 예측할 수 있습니다. |
DTrees | 이진 의사 결정 트리(decision trees)알고리즘입니다. DTrees 클래스는 부스팅 알고리즘은 구현한 ml::Boost 클래스와 랜덤 트리(random tree) 알고리즘을 구현한 ml::RTree 클래스의 부모 클래스 역할을 합니다. |
Boost | 부스팅(boostring) 알고리즘입니다. 다수의 약한 불류기(weak classifier)에 적절한 가중치를 부여하여 성능이 좋은 분류기를 만드는 방법입니다. |
RTrees | 랜덤 트리(random tree) 또는 랜덤 포레스트(random forest) 알고리즘입니다. 입력 특징 벡터를 다수의 트리로 예측하고, 그 결과를 취합하여 분류 또는 회귀를 수행합니다. |
EM | 기댓값 최대화(Expectation Maximizaion)를 의미합니다. 가우시안 혼합 모델(Gaussian mixture model)을 이용한 군집화 알고리즘입니다. |
KNearest | k 최근접 이웃(K-Nearest Neighbors) 알고리즘입니다. K 최근접 이웃 알고리즘은 샘플 데이터와 인접한 k개의 학습 데이터를 찾고, 이 중 가장 많은 개수에 해당하는 클래스를 샘플 데이터 클래스로 지정합니다. |
LogisticRegression | 로지스틱 회귀(logistic regression). 이진 분류 알고리즘의 일종입니다. |
NormalBayesClassifier | 정규 베이즈 분류기 입니다. 정규 베이즈 분류기는 각 클래스의 특징 벡터가 정규 분포를 따른다고 가정합니다. 따라서 전체 데이터 분포는 가우시안 혼합 모델로 표현 가능합니다. 정규 베이즈 분류기는 학습 데이터로부터 각 클래스의 평균 벡터와 공분산 행렬을 계산하고, 이를 예측에 사용합니다. |
SVM | 서포트 벡터 머신(sipport vector machine) 알고리즘 입니다. 두 클래스의 데이터를 가장 여유있게 분리하는 초평면을 구합니다. 커널 기법을 이용하여 비선형 데이터 분류에도 사용할 수 있으며, 다중 클래스 분류 및 회귀에도 적용할 수 있습니다. |
SVMSDG | 통계적 그래디언트 하향(stochastic gradient descent) SVM. 통계적 그래디언트 하향 방법을 SVM에 적용함으로써 대용량 데이터에 대해서도 빠른 학습이 가능합니다. |
머신 러닝 알고리즘 객체 생성 - cv2.ml.XXX_create()
_create() 명령어로 객체를 생성할 수 있습니다.
cv2.ml.SVM_create()
cv2.ml.KNearet_create()
....
반환값으로 각 머신 러닝 알고리즘 객체를 생성합니다.
머신 러닝 알고리즘 학습 cv2.ml_SVM.train
.train 함수로 학습을 할 수 있습니다. 적절한 인자를 입력해줘야 합니다.
cv2.ml_StatModel.train(samples, layout, responses) -> retval
• samples: 학습 데이터 행렬. numpy.ndarray. shape=(N, d), dtype=numpy.float32.
• layout: 학습 데이터 배치 방법.
cv2.ROW_SAMPLE : 하나의 데이터가 한 행으로 구성됨
cv2.COL_SAMPLE : 하나의 데이터가 한 열로 구성됨
• responses: 각 학습 데이터에 대응되는 응답(레이블) 행렬. numpy.ndarray. shape=(N, 1), dtype=numpy.int32 또는 numpy.float32.
• retval: 학습이 성공하면 True.
samples에서 N은 데이터 개수, d는 특징벡터의 차원 개수입니다.
layout 인자는 보통 cv2.ROW_SAMPLE을 입력합니다.
responses는 정답 행렬을 반환합니다.
머신 러닝 알고리즘 예측 cv2.ml_SVM.predict
.predict 함수로 추론을 할 수 있습니다.
cv2.ml_StatModel.predict(samples, results=None, flags=None) -> retval, results
• samples: 입력 벡터가 행 단위로 저장된 행렬. numpy.ndarray. shape=(N, d), dtype=numpy.float32.
• results: 각 입력 샘플에 대한 예측(분류 또는 회귀) 결과를 저장한 행렬. numpy.ndarray. shape=(N, ) 또는 (N, 1). dtype=numpy.int32 또는 numpy.float32.
• flags: 추가적인 플래그. 기본값은 0. cv2.ml.STAT_MODEL_RAW_OUTPUT을 지정하면 클래스 레이블이 아닌 실제 계산 결과 값을 출력.
• retval: 알고리즘에 따라 다름
다음 포스팅에서 OpenCV에서 제공하는 함수로 k 최근접 이웃 알고리즘을 구현하도록 해보겠습니다.
OpenCV 튜토리얼과 황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝' 을 공부하면서 정리해 보았습니다.
반응형