반응형

머신러닝 10

[Open CV] 머신러닝 _ 실전코딩 _ 문서 필기체 숫자 인식

이번 시간은 문서에 표현된 필기체 숫자 인식에 대해 알아본다. 문서에서 필기체 숫자 인식 - 문서를 촬영 또는 스캔한 영상에서 필기체 숫자를 인식하는 프로그램 구현할 기술 - 각 숫자의 부분 영상 추출 Labeling , FindContour 함수등을 사요앟면 어렵지않게 찾아낼 수 있다. 레이블링 이용으로 각 숫자의 바운딩 박스 정보 추출 - 숫자 부분 영상을 정규화 과정을 거쳐 20x20 크기로 resize 어떤 형태로 resize를 해야지 SVM 또는 HOG 방법을 이용해서 정확도를 높일 수 있을지 생각해야한다. 숫자의 바운딩 박스 부분의 영상의 가로 / 세로 비율을 유지할 것 학습에 사용된 숫자 영상이 20x20 크기에 꽉 찬 형태가 아니므로 적절한 여백 유지 - HOG & SVM 방법으로 숫자 인..

[Open CV] 머신러닝 _ 숫자 영상 정규화

비지도 학습 k-평균 알고리즘에 대해 알아본다. k - 평균 ( k-meas ) 알고리즘 - 주어진 데이터를 k 개의 구역으로 나누는 군집화 알고리즘 - 지도학습처럼 해답을 주는 것이 아니고 데이터를 입력을 주고 임의의 기준으로 나눠주는 형태로 동작시키는 알고리즘 ( 머신러닝 이해하기글 참고 ) https://opencv-master.tistory.com/72?category=1092621 머신러닝 이해하기 (1) 본 포스팅은 패스트캠퍼스 OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지를 참고하여 작성하였습니다. 머신러닝 ( Machine Learning ) 이란? - 주어진 데이터를 분석하여 규칙성, 패턴 등을 찾고, opencv-master.tistory.com - 이 전 k-mean shif..

[Open CV] 머신러닝 _ 숫자 영상 정규화

이번시간에는 HOG과 SVM 알고리즘을 사용하여 숫자 인식을 하는 프로그램에서 숫자 영상을 정규화 하는 과정을 추가하여 성능을 향상시키는 방법에 관해 알아본다. HOG & SVM 필기체 숫자 인식 정중앙에 숫자를 쓰지 않을 경우? - digits.png 데이터를 80:20으로 나눠서 검증할 경우 정확도가 98.7% 이지만, 체감 성능은 훨씬 낮게 나타남 학습 데이터 영상 정규화 ( Normalization ) - 학습 데이터 영상과 테스트 데이터 영상의 위치, 크기, 회전 등의 요소를 정규화 ▶ 인식 성능 향상 * 여러개의 데이터를 분석할 일이 있을때 어떤 식으로 이 데이터들을 정규화 할지 고민해야한다. 숫자 영상의 무게 중심이 전체 영상 중앙이 되도록 위치 정규화 위 이미지를 보게되면 바운딩박스의 중심..

[Open CV] 머신러닝 _ HOG+SVM 필기체 숫자 인식

이번 시간에는 HOG알고리즘과 SVM 알고리즘을 조합해서 필기체 숫자를 인식하는 프로그램을 만들어본다. HOG알고리즘을 이용해서 필기체 숫자의 방향성정보를 추출하고 그 방향성 정보를 SVM 알고리즘을 이용해서 10개의 클래스로 나눠준다. 그리고 사용자가 숫자를 입력하면 해당 클래스를 비교하여 숫자를 인식하는 방법이다. 그럼 저번강의에서도 봤었던 digit 이미지 내부에있는 숫자를 분리해야하는데 해당 숫자들을 HOG알고리즘 사용을 위해 나눠주고 주황색 박스처럼 4개의 셀을 하나로 묶어주어 사용하면 셀 하나가 9개의 히스토그램 그래디언트 방향성 정보를 갖게된다. 그러면 나오게되는 500X324 크기의 행렬에서 SVM 알고리즘의 초평면에 의해서 클래스가 나뉘게 된다. SVM알고리즘은 기본적으로 2개의 클래스로..

[Open CV] 머신러닝 _ OpenCV SVM 사용하기

이번에는 OpenCV에서 SVM 알고리즘을 사용하는 방법에 대해서 알아본다. SVM 알고리즘을 사용하기 위해서는 SVM 객체를 먼저 생성해줘야한다. SVM 객체 생성 cv2.ml.SVM_create() -> retval - retval : cv2.ml_SVM 객체 SVM 타입 지정 cv2.ml_SVM.setType ( type ) -> None - type : SVM 종류 지정. cv2.ml.SVM_으로 시작하는 상수. SVM 커널 지정 cv2.ml_SVM.setKernel ( kernelType ) -> None - kernelType : 커널 함수 종류 지정. cv2.ml.SVM_으로 시작하는 상수 커널 타입에 관한 이미지를 OpenCV Documents에 들어가서 살펴보면 위와같은 이미지를 얻을 수..

[Open CV] 머신러닝 SVM 알고리즘

이번 시간에는 가장 유명하고 많이 사용되고있는 SVM 알고리즘에 대해 알아본다. 서포트 벡터 머신 ( SVM : Support Vector Machine ) 알고리즘이란? - 기본적으로 두 개의 그룹 ( 데이터 ) 을 분리하는 방법으로 데이터들과 거리가 가장 먼 초평면 ( hyperplane ) 을 선택하여 분리하는 방법 ( maximum argin classifier ) 위 2개의 그룹을 분리하기 위한 직선, 즉 선형적인 직선의 형태를 만든다. 1번과 2번의 직선을 보면 2개 직선 모두 두개의 그룹을 확실하게 나눴다고 하기에는 애매한 부분이 눈에 보인다. 그럼 사각형 그룹이나 삼각형 그룹에서 노이즈가 발생하게 됐을때 1번과 2번의 직선을 사용해서 구분하기는 어렵다. 그랬을때 두 그룹을 구분하기 위해서는..

[Open CV] 머신러닝 k 최근접 이웃 알고리즘

이번 시간에는 전일 배웠던 K최근접 알고리즘을 사용해서 필기체 숫자 인식하는 프로그램에 대해 알아본다. 만약 정해진 폰트로 인쇄된 숫자라면? ( 인쇄체 숫자 ) - 템플릿 매칭으로도 가능 하지만 필기체숫자는 사람마다 다르기 때문에 템플릿매칭으로는 구분하기가 쉽지 않다. 따라서 필기체 숫자의 분류를 위해서는 다수의 필기체 숫자데이터를 이용해서 머신러닝의 도움을 받아 특징점을 추출해 알아서 분류하게끔 하는 것이 일반적인 방법이다. 필기체 숫자 데이터는 OpenCV에서 제공하는 필기체숫자 파일이 있는데 이를 머신러닝으로 학습시켜 필기체 숫자를 구분한다. https://github.com/opencv/opencv/blob/master/samples/data/digits.png GitHub - opencv/ope..

[Open CV] 머신러닝 k 최근접 이웃 알고리즘

금일은 이전 강의에서 배웠던 KNearest 알고리즘 클래스에 대해서 알아본다. k 최근접 이웃 ( kNN, k-Nearest Neightbor ) 알고리즘이란? - 특징 공간에서 테스트 데이터와 가장 가까이 있는 k개의 학습 데이터를 찾아 분류 또는 회귀를 수행하는 지도 학습 알고리즘의 하나 위 그림을 보면 파란색 사각형 오른쪽 삼각형으로 ㅇ루어져있는데 새로운 점이 들어왔을대 사각형인지 삼각형인지를 구분하고 싶다. 왼쪽 상단에 새로운 점이 들어왔을때 구분하는 가장 간단한 방법은 해당 점과 가장 가까이 있는 기존 샘플을 찾아서 해당 샘플의 클래스를 그대로 부여하는 할당하는 방법이다. 그런데 중간에 초록색 원이 들어왔을때는 어떻게 구분하면 될까? 일단 방법을 알아보기 전에 위 이미지처럼 튀어나와있는 삼각형..

[Open CV] 머신러닝 클래스

금일은 OpenCV에서 제공하는 머신러닝 클래스들에 대해서 알아본다. OpenCV가 기본적으로 컴퓨터비전 라이브러리이지만 머신러닝과 관련된 라이브러리도 제공하고있다. 위 이미지를 보게되면 cv2.ml_StatModel 이라고하는 상위 클래스가 있고 ( Stat : 통계 ) 각각 상속받는 알고리즘 클래스들이 정의가 되어있다. 위 클래스들의 객체를 생성해서 각각의 알고리즘에 맞게끔 내가 가진 데이터들을 학습을 시킬 수 있다. 이때 사용하는 함수가 train() , predict() 함수이다. train()은 학습을 하는 함수이고 predict()는 예측을 하는 역할의 함수이다. 그래서 예를들어 cv2.ml_KNearest 라고 하는 알고리즘의 클래스를 사용해서 머신러닝을 사용하고 싶다면 위 클래스의 trai..

머신러닝 이해하기 (1)

본 포스팅은 패스트캠퍼스 OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지를 참고하여 작성하였습니다. 머신러닝 ( Machine Learning ) 이란? - 주어진 데이터를 분석하여 규칙성, 패턴 등을 찾고, 이를 이용하여 의미 있는 정보를 추출하는 과정 전통적인 프로그래밍과 Machine Learning 을 많이 비교하는데 전통적인 프로그래밍은 Data 에대한 Program을 입력하게되면 그것에 대한 결과로써 Output 을 내놓는것이고 Machine Learning은 Data 는 동일하게 들어가나 Outcome ( Data 에대한 정답 ) 을 같이 입력해주면 이에대한 근거 ( Program, Rules ) 를 내놓는다. 따라서 Machine Learning 은 Program 또는 Rule을 만..

반응형