Program/머신러닝

[Open CV] 머신러닝 클래스

사막여유 2022. 7. 6. 21:23
728x90

 

금일은 OpenCV에서 제공하는 머신러닝 클래스들에 대해서 알아본다.

 

 

OpenCV가 기본적으로 컴퓨터비전 라이브러리이지만 머신러닝과 관련된 라이브러리도 제공하고있다.

위 이미지를 보게되면 cv2.ml_StatModel 이라고하는 상위 클래스가 있고
( Stat : 통계 )

각각 상속받는 알고리즘 클래스들이 정의가 되어있다.

 

위 클래스들의 객체를 생성해서 각각의 알고리즘에 맞게끔 내가 가진 데이터들을 학습을 시킬 수 있다.

이때 사용하는 함수가 train() , predict() 함수이다.

train()은 학습을 하는 함수이고 predict()는 예측을 하는 역할의 함수이다.

 

그래서 예를들어 cv2.ml_KNearest 라고 하는 알고리즘의 클래스를 사용해서 머신러닝을 사용하고 싶다면

위 클래스의 train와 predict의 함수를 사용할 수 있다.

아래 클래스들을 설명해놓았다.

 

 

이번 머신러닝 강의에서는 KNearest와 SVM 클래스를 사용한다.

 

그래서 일단 머신 러닝 알고리즘 객체를 생성해줘야한다.

위같이 알고리즘 객체를 생성한 이후에는 train함수와 predict 함수를 사용해서 머신러닝을 사용한다.

 


머신러닝 알고리즘 학습

cv2.ml_StatModel.train ( samples, layout, responses ) -> retval

 - samples : 학습 데이터 행렬. numpy.ndarray.shape = ( N,d ), dtype = numpy.float32.

 * N은 샘플의 개수를 의미한다 . ( 데이터 개수 ) , d는 특징벡터의 차원 개수를 의미한다.
   예를들어 사과와 바나나를 구분할때 Hue값과 길이값을 사용해서 구분하고자하면 d는 2가된다.
   그럼 여기서 원인지 아닌지도 구분하는 인자도 넣게되면 d는 3이된다.

 - layout : 학습 데이터 배치 방법

                * 대부분의 경우 ROW_SAMPLE을 넣어줌

 - responses : 각 학습 데이터에 대응되는 응답( 레이블 ) 행렬.
                       numpy.ndarray.shape=(N,1), dtype=numpy.int32 또는 numpy.float32

 - retval : 학습이 성공하면 True


머신러닝 알고리즘 예측

이미 학습이 끝났다고 가정하고 새로운 샘플 데이터에 대해서 어떤 결과값을 갖을지에 대한 예측

cv2.ml_StatModel.predict ( samples, results=None, flags = None ) -> retval, results

 - samples : 입력 벡터가 행 단위로 저장된 행렬
                    numpy.ndarray.shape = ( N,d ), dtype = numpy.float32.
                    * N은 판단할 샘플 개수, d는 특징백터의 개수

 - results : 각 입력 샘플에 대한 예측 ( 분류 또는 회귀 ) 결과를 저장한 행혈
                 numpy.ndarray.shape ( N,1 ) , dtype = numpy.float32
                 * N은 위 samples와 동일한 샘플 개수값

 - flags : 추가적인 플래그. 기본값은 0
              cv2.ml.STAT_MODEL_RAW_OUTPUT을 지정하면 클래스 레이블이 아닌 실제 계산 결과 값을 출력

 - retval : 알고리즘에 따라 다름

 * 대부분 쓰이지 않고 samples로 입력행렬을 주게되고 results로 결과를 받는 형태로만 사용됨


728x90