반응형

Python/파이썬 OpenCV 공부 88

[OpenCV 딥러닝] OpenCV에서 제공하는 DNN 모듈로 GoogLeNet 모델을 실행하여 영상 인식하기 - cv2.dnn.readNet

GoogLeNet 영상 인식 저번 포스팅에서는 CNN 모델을 OpenCV DNN 모듈로 실행하는 것을 해보았습니다. 이번에는 OpenCV DNN 모듈을 이용해서 GoogLeNet 모델을 실행하는 것을 해보겠습니다. OpenCV에서는 GoogLeNet 모델을 학습을 시키는 것이 아니라 미리 학습해둔 파일을 받아와서 추론을 진행할 수 있습니다. 학습이 어떻게 진행되었는지를 알아야 DNN 모듈에 적절한 입력값을 설정할 수 있습니다. GoogLeNet의 입력 : 224x224, BGR 컬러 영상, 평균 값 = (104,117,123) GoogLeNet의 출력 : 1x1000 행렬, 1000개 클래스에 대한 확률값 미리 학습된 GoogLeNet 학습 모델 및 구성 파일 다운로드 Model Zoo에서 미리 학습되어..

[OpenCV 딥러닝] 미리 학습된 파일을 OpenCV DNN 모듈로 딥러닝 실행하기 - cv2.dnn.readNet

OpenCV DNN(Deep Neural Network) 모듈 미리 학습된 딥러닝 파일을 OpenCV DNN 모듈로 실행할 수 있습니다. 순전파(foward), 추론(inference)만 가능하며 학습은 지원하지 않습니다. 1. 네트워크 불러오기 - cv2.dnn.readNet OpenCV로 딥러닝을 실행하기 위해서는 우선 cv2.dnn_Net 클래스 객체를 생성해야 합니다. 객체 생성에는 훈련된 가중치와 네트워크 구성을 저장하고 있는 파일이 필요합니다. cv2.dnn.readNet(model, config=None, framework=None) -> retval • model: 훈련된 가중치를 저장하고 있는 이진 파일 이름 • config: 네트워크 구성을 저장하고 있는 텍스트 파일 이름, config..

[OpenCV 머신러닝] OpenCV에서 k-means 알고리즘 사용하기 - cv2.kmeans

OpenCV에서 제공하는 함수를 이용하여 k-means 알고리즘을 이용하는 방법에 대해 공부해보겠습니다. k-평균(k-means) 알고리즘 k-means 알고리즘은 주어진 데이터를 k 개의 구역으로 나누는 군집화(clustering) 알고리즘입니다. 비지도 학습이며 데이터를 무작정 입력으로 주고 임의의 기준으로 나눠주는 형태로 동작하는 알고리즘 입니다. k는 군집 갯수를 의미하여 사용자가 지정해줘야 하는 파라미터입니다. k-means 알고리즘 동작 순서 1. 임의의 k개 중심을 선정합니다. (초기치 중심을 설정해줘야 합니다) 랜덤하게 각 샘플의 중심이라고 간주할 위치를 임의로 선택합니다. 초기 중심점을 어떻게 선정하냐에 따라 결과값이 달라지게 됩니다. 2. 모든 데이터에 대하여 가장 가까운 중심을 선택하..

[OpenCV 머신러닝] 학습 데이터 영상을 위치 정규화하여 성능 높이기 - cv2.moments, cv2.warpAffine

학습 데이터 영상 정규화 - Normalization 학습 데이터 영상과 테스트 데이터 영상의 위치, 크기, 회전 등의 요소를 정규화 하면 인식 성능을 향상시킬 수 있습니다. 이번 포스팅에서는 입력 영상의 무게 중심이 전체 영상 중앙이 되도록 위치를 정규화하여 성능을 높여보겠습니다. 무게 중심을 이용한 정규화 방법은 흰색 객체의 x좌표, y좌표를 다 더해서 전체 픽셀수로 나누어서 구현합니다. 무게 중심 정규화 이외에도 회전, 기울기, 크기 정규화를 한다면 더 정확도가 높아질 수 있습니다. 이전 포스팅에서 구현해보았던 HOG&SVM 필기체 숫자 인식 프로그램을 위치 정규화로 성능을 높여보겠습니다. [OpenCV 머신러닝] OpenCV에서 HOG 알고리즘을 이용한 SVM 필기체 숫자 인식 HOG & SVM ..

[OpenCV 머신러닝] OpenCV에서 HOG 알고리즘을 이용한 SVM 필기체 숫자 인식

HOG & SVM 필기체 숫자 인식 픽셀값을 이용하여 SVM을 학습시키는 것보다 HOG 알고리즘으로 추출한 특징 벡터를 이용하여 SVM을 학습시키는 것이 정확도가 더 뛰어납니다. 이번 포스팅에서는 HOG 특징 벡터를 이용한 SVM 학습 방법에 대해 알아보고 필기체 숫자를 인식해 보겠습니다. 필기체 숫자 데이터 필기체 숫자 데이터는 OpenCV 깃허브에서 제공하는 숫자 데이터를 이용했습니다. opencv/opencv Open Source Computer Vision Library. Contribute to opencv/opencv development by creating an account on GitHub. github.com 데이터에는 20X20 숫자 영상이 가로 100개, 세로 50개 총 5000개..

[OpenCV 머신러닝] OpenCV에서 서포트 벡터 머신(SVM) 사용하기 - cv2.ml.SVM_create, cv2.ml_SVM.trainAuto

이전 포스팅에서 서포트 벡터 머신(SVM)에 대해 알아보았습니다. 이번에는 OpenCV로 서포트 벡터 머신을 사용하는 방법에 대해 알아보겠습니다. 객체 생성 -> SVM 타입 지정 -> SVM 커널 지정 -> SVM 자동 학습(k-폴드 교차 검증) -> predict 순으로 진행됩니다. 1. SVM 객체 생성 - cv2.ml.SVM_create() cv2.ml.SVM_create() -> retval • retval: cv2.ml_SVM 객체 cv2.ml.SVM_create() 함수로 cv2.ml_SVM 객체를 반환받을 수 있습니다. 2. SVM 타입 지정 - cv2.ml_SVM.setType cv.ml_SVM.setType(type) -> None • type: SVM 종류 지정. cv2.ml.SVM_..

[OpenCV 머신러닝] 서포트 벡터 머신 알고리즘이란?

서포트 벡터 머신(SVM, Support Vectir Machine) 알고리즘 SVM 알고리즘은 머신러닝 알고리즘에서 가장 유명하고 많이 사용되고 있습니다. SVM 알고리즘은 기본적으로 두 개의 그룹(데이터)을 분리하는 방법으로 데이터들과 거리가 가장 먼 초평면(hyperplane)을 선택하여 분리하는 방법입니다. 데이터를 분리하기 위해 직선이 필요합니다. 직선이 한쪽 데이터로 치우쳐져 있으면 데이터에 변동이나 노이즈가 있을 때 제대로 구분 못할 수 있습니다. 이러한 문제점을 해결하기 위해 margin을 이용하게 됩니다. 이 직선을 초평면(hyperplane)이라고 합니다. Support Vector은 데이터를 의미합니다. margin은 초평면과 가장 가까이 있는 데이터와의 거리를 의미합니다. 마진을 최..

[OpenCV 머신러닝] OpenCV로 KNN 필기체 숫자 인식 프로그램 구현하기

k 최근접 이웃 알고리즘을 이용한 필기체 숫자 인식 만약 정해진 폰트로 인쇄된 숫자라면 템플릿 매칭으로도 숫자 인식이 가능합니다. OpenCV 필기체 숫자 데이터는 OpenCV 깃허브에서 제공하는 숫자 데이터를 이용했습니다. opencv/opencv Open Source Computer Vision Library. Contribute to opencv/opencv development by creating an account on GitHub. github.com 데이터에는 20X20 숫자 영상이 가로 100개, 세로 50개 총 5000개의 숫자가 있습니다. 각 행에 100개의 데이터가 있고 각 숫자(0~9)는 5줄마다 구분 됩니다. 이 데이터를 이용해서 머신러닝 알고리즘을 학습시키고 추론까지 진행해 보..

[OpenCV 머신러닝] OpenCV로 k 최근접 이웃 알고리즘(KNN) 구현하기 - cv2.ml.KNearest_create

k 최근접 이웃 알고리즘 - KNN, k-Nearest Neighbor k 최근접 이웃 알고리즘은 특징 공간에서 테스트 데이터와 가장 가까이 있는 k개의 학습 데이터를 찾아 분류 또는 회귀를 수행하는 지도 학습 알고리즘의 하나입니다. 학습 데이터가 녹색이라고 가정하였을 때 원래 데이터(파랑색, 빨강색)중 가장 가까지 있는 데이터의 클래스를 부여합니다. 위 사진에서 녹색 데이터는 빨강색 데이터와 가까이 있지만 빨강색 데이터라고 판단하기에는 애매합니다. 이처럼 잘못 분류될 가능성이 있는데 이를 해결하기 위해 가장 가까이 있는 것을 k개 찾습니다. 선별한 k개 데이터에서 파랑색, 빨강색 데이터 개수를 세어 더 많이 선별된 데이터의 클래스를 부여하게 됩니다. 예를 들어 5개 데이터를 선별했을 때 3개가 파랑색,..

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

OpenCV 머신 러닝 클래스 OpenCV에서 머신러닝과 관련된 클래스를 제공하고 있습니다. OpenCV 머신 러닝 클래스 설명 클래스 이름 설명 ANN_MLP 인공 신경망(artificial neural network) 다층 퍼셉트론(multi-layer perceptron) 입니다. 여러 개의 은닉층을 포함한 신경망을 학습시킬 수 있고, 입력 데이터에 대한 결과를 예측할 수 있습니다. DTrees 이진 의사 결정 트리(decision trees)알고리즘입니다. DTrees 클래스는 부스팅 알고리즘은 구현한 ml::Boost 클래스와 랜덤 트리(random tree) 알고리즘을 구현한 ml::RTree 클래스의 부모 클래스 역할을 합니다. Boost 부스팅(boostring) 알고리즘입니다. 다수의 약..

반응형