관리 메뉴

ComputerVision Jack

[컴퓨터 비전 - 머신 러닝] 본문

Image Processing/Computer Vision

[컴퓨터 비전 - 머신 러닝]

JackYoon 2020. 2. 10. 15:06
반응형

머신 러닝과 OpenCV

머신 러닝(machine learning)

주어진 데이터를 분석하여 규칙성, 패턴을 찾는 것

이를 이용하여 의미있는 정보를 추출하는 과정을 나타낸다.

  • 학습(train) : 데이터로부터 규칙을 찾아내는 과정
  • 모델(model) : 학습에 의해 결정된 규칙
  • 예측(predict) : 새로운 데이터를 학습된 모델에 입력으로 전달하고 결과 판단하는 것
  • 레이블(label) : 훈련 데이터에 대해 정답에 해당하는 내용

지도 학습에 의한 영상 분류 과정

지도 학습(supervised learning)

지도 학습은 정답(label)을 알고 있는 데이터를 이용하여 학습 진행

회귀(regression)분류(classification)으로 나뉜다.

 

비지도 학습(unsupervised learning)

훈련 데이터의 정잡에 대한 정보 없이 오로지 데이터 자체만을 이용하는 학습

데이터간의 구분되는 특징을 이용하는 군집화(clustering)에 사용된다.

경계면에 대한 사진

네모와 세모를 정확히 나누기엔 보라색선이 좋다. 하지만 초록색 선이 일반화에 더 특화되어 있다.

일반화에 더 특화된 경계선을 검출하는 것이 더 좋다.

 

virtual bool StatModel::train(InputArray samples, int layout, InputArray response);

#학습을 수행하는 함수

 

virtual float StatModel::predict(InputArray samples, OutputArray results = noArray(), int flags = 0) const;

#학습된 모델에 대해 테스트 데이터의 응답을 얻는 함수

 

openCV 머신러닝 클래스

ANN_MLP 

인공 신경망(aritificial neural network) 다층 퍼셉트론(multi - layer perceptrons).

여러개의 은닉층 포함한 신경망 학습시키고 데이터 예측할 수 있다.

 

DTrees

이진 의사 결정 트리(decision trees) 알고리즘

부스팅 알고리즘 Boost 클래스와 랜덤 트리 알고리즘(RTree) 클래스의 부모 클래스 역할을 한다.

 

Boost

부스팅(boosting)알고리즘, 다수의 약한 분류기에 적절한 가중치를 부여하여 성능 좋은 분류기 제작

 

RTrees

랜덤 트리 또는 렌덤 포레스트 알고리즘. 

입력 특징 벡터를 다수의 트리로 예측하고, 그 결과를 취합하여 분류 or 회귀를 적용

 

EM

기대값 최대화(Expectation Maximization).

가우시안 혼합 모델을 이용한 군집화 알고리즘

 

KNearest

k 최근접 이웃(k-Nearest Neighbor)알고리즘. 

샘플 데이터와 인접한 k개의 훈련데이터를 찾고, 가장 많은 개수에 해당하는 클래스를 샘플 데이터 클래스로 지정

 

Logistic Regression

이진 부류 알고리즘

 

NormalBayesClassifier

정규 베이즈 분류기. 

정규 베이즈 분류기는 각 클래스의 특징 벡터가 정규 분포를 따른 다고 가정.

학습 데이터로부터 각 클래스의 평균 벡터와 공분산 행렬을 계한하고 이를 예측에 사용

 

SVM

서포트 벡터 머신(support vector machine) 알고리즘

두 클래스의 데이터를 가장 여유 있게 분리하는 초평면을 구한다. 커널 기법을 이용하여 비선형 데이터 분류에도

사용할 수 있고, 다중 클래스 분류 및 회귀에도 적용할 수 있다.

k 최근접 이웃

k 최근접 이웃(kNN)

분류 또는 회귀에 사용되는 지도 학습 알고리즘

특정 공간에서 테스트 데이터와 가장 가까운 K개의 훈련 데이터를 찾는다.

kNN 알고리즘에 의한 점 분류

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

#KNearest 객체 생성.

 

virtual void KNearest::setDefaultK(int val);

#기본적인 K 값은 10으로 설정. 이를 변경하는 함수

 

virtual void KNearest::setIsClassifier(bool val);

# true 분류 false 회귀로 적용 설정 후에 StatModel::train()함수 이용하여 학습 진행

 

virtual float KNearest::findNearest(InputArray samples, int k, OutputArray results, OutputArray neighborResponses = no Array(), OutputArray dist = noArray()) const;

#테스트 데이터에 대한 예측을 수행 할때 사용

knn 적용
knn 을 이용항 필기체 숫자 인식

 

3입력하면 3출력

하지만 정확도가 그렇게 좋지 않다.

서포트 벡터 머신

서포트 벡터 머신(SVM)

기본적으로 두 개의 클래스로 구성된 데이터를 가장 여유있게 분리하는 초평면을 찾는 머신러닝

초평면 : 두 클래스의 데이터를 분리하는 N차원 공간상의 평면

SVM 알고리즘으로 두 클래스 분할
비 선형 데이터에 커널 트릭 적용하기

virtual void SVM::setType(int val)

#svm클래스 속성 설정. 타입과 커널 함수

 

virtual void SVM::setKernel(int kernelType);

#커널 함수 지정 함수

svm 적용

HOG & SVM을 이용하여 KNN보다 정확한 필기체 숫자 인식

필게체 숫자 인식

KNN보다 정확도가 좀더 올라 갔다.

 

ex_knn.cpp
0.00MB
ex_MNIST_knn.cpp
0.00MB
ex_MNIST_svm.cpp
0.00MB
ex_SVM.cpp
0.00MB

반응형
Comments