더북(TheBook)

15.3.2 SVM 클래스 사용하기

OpenCV에서 SVM 알고리즘은 같은 이름의 SVM 클래스에 구현되어 있습니다. SVM 클래스는 ml 모듈에 포함되어 있고, cv::ml 네임스페이스에 정의되어 있습니다. OpenCV에 구현된 SVM 클래스는 유명한 오픈 소스 라이브러리인 LIBSVM을 기반으로 만들어졌습니다.

SVM 클래스를 이용하려면 먼저 SVM 객체를 생성해야 하며, SVM 객체는 SVM::create() 정적 멤버 함수를 사용하여 생성할 수 있습니다. SVM::create() 함수 원형은 다음과 같습니다.

static Ptr<SVM> SVM::create();

반환값

SVM 객체를 참조하는 Ptr 스마트 포인터 객체

 

SVM 클래스 객체를 생성한 후, 훈련 데이터를 학습하기 전에 먼저 SVM 알고리즘 속성을 설정해야 합니다. 대표적으로 설정해야 할 SVM 클래스 속성에는 타입과 커널 함수 선택이 있습니다. 먼저 SVM 타입을 설정하는 SVM::setType() 함수 원형은 다음과 같습니다.

virtual void SVM::setType(int val)

val

SVM 타입. SVM::Types 열거형 상수 중 하나를 지정합니다.

 

SVM 클래스는 기본적으로 SVM::Types::C_SVC 타입을 사용하도록 초기화됩니다. SVM::Types::C_SVC 타입은 일반적인 N-클래스 분류 문제에서 사용되는 방식입니다. SVM::Types::C_SVC가 아닌 다른 타입을 사용하려면 SVM::setType() 함수를 이용하여 타입을 변경해야 합니다. SVM::setType() 함수의 val 인자에는 SVM::Types 열거형 상수 중 하나를 지정할 수 있으며, 사용 가능한 열거형 상수를 표 15-4에 정리하였습니다. SVM::Types::C_SVC 타입을 사용하는 경우, SVM 알고리즘 내부에서 사용하는 C 파라미터 값을 적절하게 설정해야 합니다. C 값을 작게 설정하면 훈련 데이터 중에 잘못 분류되는 데이터가 있어도 최대 마진을 선택합니다. C 값을 크게 설정하면 마진이 작아지더라도 잘못 분류되는 데이터가 적어지도록 분류합니다. 만약 훈련 샘플 데이터에 잡음 또는 이상치 데이터가 많이 포함되어 있는 경우에는 C 파라미터 값을 조금 크게 설정하는 것이 유리합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.