Python/파이썬 OpenCV 공부

[OpenCV 머신러닝] OpenCV 머신러닝 클래스 - 객체 생성, 학습, 추론 - create, train, predict

AI 꿈나무 2020. 10. 24. 19:21
반응형

OpenCV 머신 러닝 클래스

 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로 배우는 컴퓨터 비전과 머신 러닝' 을 공부하면서 정리해 보았습니다.

docs.opencv.org/4.3.0/d6/d00/tutorial_py_root.html

 

OpenCV: OpenCV-Python Tutorials

Core Operations In this section you will learn basic operations on image like pixel editing, geometric transformations, code optimization, some mathematical tools etc.

docs.opencv.org

반응형