1장. 머신러닝 시작
Computer Vision/OpenCV

1장. 머신러닝 시작

반응형

이번에 공부할 책 표지💪

 

 

1장 에서는 이 책에 필요한 소프트웨어와 파이썬 모듈을 설치하는 방법을 설명한다.

목차



컴퓨터 비전은 자율주행 자동차와 구글의 딥마인드(DeepMind)같은 혁신적인 시스템을 주도하는 딥러닝 및 컨볼루션 신경망(CNN, Convoultional Neural Networks)과 함께 머신러닝의 가장 흥미로운 응용 분야 중 하나다.

우선, 1장에서는 머신러닝이 왜 그렇게 인기가 있었는지 이야기하고, 해결할 수 있는 문제의 종류를 살펴본다. 또한 OpenCV를 사용해 머신러닝 문제를 해결하는 데 필요한 도구를 소개한다. 이 책 전반에 걸쳐서는 독자가 OpenCV와 Python에 대한 기본 지식은 이미 갖췄지만, 더 많은 것을 배울 여지가 있다고 가정한다.

기술적 요구사항

다음 링크에서 1장의 코드를 참고할 수 있다.

https://github.com/PacktPublishing/Machine-Learning-for-OpenCV-Second-Edition/blob/master/Chapter01/

Software & Hardware 요구사항.

  • OpneCV 버전 4.1.x
  • Python 버전 3.6 (모든 3.x버전은 괜찮다)
  • 파이썬과 필수 모듈을 설치하기 위한 아나콘다 파이썬 3
  • 모든 OS 사용가능
  • 최소 4GB RAM이 좋다.
  • GPU는 필요하지 않다.

머신러닝 시작

머신러닝은 적어도 60년 전 부터 있었대,

초기 머신러닝 시스템은 데이터를 처리하고 의사 결정을 하기 위해 if... else문으로 직접 코딩한 규칙을 사용했었고,

이메일로 예를 들면, '스팸 필터' 가 초기 머신러닝 시스템인거지. 특정 단어들을 블랙리스트로 설정해놓고, 해당 단어들이 나올 때 그 메일은 스팸으로 설정하는.. 이런게 스팸필터인데 7장에서 더 똑똑하게 만들어볼거래.

의사 결정 트리(5장)에서 의사 결정 트리를 결합 & 중첩시키면 의사 결정 규칙은 복잡해지는데, 의사 결정 트리가 if... else 조건 집합처럼 보일지라도 훨씬 더 많으며, 실제로는 5장에서 살펴볼 머신러닝 알고리즘의 일종이라는 것을 유념해야 해.

이제는 머신러닝을 적용하는 경우를 생각해봤을 때, 예제를 제외한 다른 경우들의 처리 규칙을 정의하기 어려울 수 있다. 이럴 때, 머신이 스스로 작업을 이해하고, 해결할 수 있으면 제일 좋을 것 같잖아? 많은 양의 데이터 내에 숨겨져 있는 여러 주요 관계가 다양하면 사람이 놓칠 가능성도 있대. (8장 참고) 많은 양의 데이터를 다룰 때, 머신러닝은 종종 이러한 숨겨진 관계(데이터 마이닝, data mining)를 추출하려고 사용한대. (관계를 모르니까 OR 관계가 너무 많으니까 양으로 때려 버리는거지.)

사람들이 만든 시스템이 실패한 예로 이미지에서 얼굴을 검출하는 경우를 들 수 있어. 오늘날 대부분의 스마트폰에서는 이미지에서 얼굴을 검출할 수 있지만, 20년 전에는 얼굴 검출 방법이 대부분 지원되지 않았었지.

인간이 얼굴을 인식하는 방식이 머신과는 달랐기 때문이지. 인간은 얼굴을 인식할 때 눈, 코, 입 등과 같은 얼굴의 특징을 먼저 찾아봤을 텐데,

머신은 이미지 픽셀이 있고 픽셀에 특정 GrayScale이 있다는 것을 머신에게 알려줘야해. 이런 이미지 표현 방식의 차이로 인해서 동일하게 적용하기엔 어려웠고, 이런 접근을 4장에서 볼거야.

하지만, CNN과 딥러닝의 등장으로.. (9장) 머신은 얼굴을 인식할 때 사람만큼 성공적으로 할 수 있게 되었어. 이제 단순히 양으로 때려박아버리는거야. 대부분의 접근 방식은 훈련 데이터에서 얼굴이 있는 위치를 나타내는 여러 형태의 어노테이션(annotation)이 필요해.

따라서, 머신은 사람이 인식할 때와 같은 방식으로 얼굴을 식별할 수 있는 능력을 가졌고, 이게 머신러닝의 진정한 힘인거지.

머신러닝으로 해결할 수 있는 문제

대부분 머신러닝은 3가지 범주 중 하나에 속한다.

  • 지도 학습 (supervised learning)
  • 비지도 학습 (unsupervised learning)
  • 강화 학습 (reinforcement learning)

지도 학습 (supervised learning)

교사가 문제에 대한 정답이 무엇인지 알려주는 느낌.

데이터 라벨링(레이블) O

training data / test data

분류 문제, 회귀 문제에 사용될 수 있다.

분류 문제 = 새로운 동물 사진을 정확히 식별하는 것

회귀 문제 = 다른 중고차의 판매 가격을 정확히 파악 하는 것.

비지도 학습 (unsupervised learning)

교사가 정답을 가르쳐주지 않고 학생이 어떻게 해야할지 고민하는 수업.

데이터 라벨링(레이블) X

가장 일반적인 결과로, 유사한 특성을 가진 개체를 포함하는 군집(cluster)을 만들 수 있다.

→ 더 높은 차원 데이터를 다양한 방식으로 볼 수 있고 데이터는 간단해짐.

강화 학습 (reinforcement learning)

교사가 정답을 맞힐 때 마다 사탕을 주고, 오답을 맞힐 때 마다 벌을 주는 느낌.

벌 보단 사탕을 받는 횟수를 늘리게 함으로써 결과를 강화시킴.

문제의 보상을 극대화.

파이썬 시작

파이썬은 데이터 적재, 데이터 시각화, 통계, 이미지 처리, 자연어 처리 과정을 지원하기 위해 수많은 오픈소스 라이브러리를 제공함.

덕분에, 데이터 과학과 머신러닝 어플리케이션의 공통 언어가 됐음.

파이썬을 사용하는 장점 중 하나는, 주피터노트북(Jupyter NoteBook)과 같은 터미널이나 다른 도구를 사용해 코드와 직접 상호작용할 수 있다는 점임.

C++로 OpenCV를 주로 사용했다면, 강력히 파이썬으로 전환할 것을 제안한다네 ㅋㅋ..

  1. 파이썬과 NVIDIA의 CUDA(Compute Unified Device Architecture)를 통한 GPU 컴퓨팅과의 결합이 중요해서
  1. 주제별 기술을 배우고 싶다? 더더욱 파이썬.. (적은 수의 구문으로 더 많은 것을 할 수 있기 때문)

OpenCV 시작

OpenCV는 컴퓨터 비전 애플리케이션용 인프라를 공통으로 제공하고자 만들어짐.

최첨단 컴퓨터 비전과 머신러닝 알고리즘의 복합 세트가 되었음.

OpenCV는 47,000명 이상의 사용자 커뮤니티를 보유하고 있으며,

700만 번 이상 다운로드 되었음.

코드 사용&수정 용이

최근 ML 붐 이후로 많은 오픈소스 머신러닝 라이브러리가 등장했고, OpenCV보다 훨씬 더 많은 기능을 제공하고 있음. 유명한 예로 scikit-learn이 있다. 이 친구는 온라인 자습서와 코드 최첨단 머신러닝 알고리즘을 제공한다.

OpenCV는 주로 컴퓨터 비전 알고리즘을 제공하고자 개발 됬으므로 머신러닝 기능은 ml이라는 단일 모듈로만 제한된다.

여전히 최첨단 알고리즘을 제공하지만, 때로는 기능이 조금 부족해 보일 수 있다.

드물게, 필요한 기능이 없다면 scikit-learn을 사용하면 된다.

설치

https://mybinder.org/v2/gh/packtpublishing/machine-learning-for-opencv-second-edition/master

바인더(Binder) 프로젝트에서 설치안하고 할 수 있다는데, 난 왜 에러뜨지?

이 책의 최신 코드 얻기

git clone & git pull origin master

https://github.com/PacktPublishing/Machine-Learning-for-OpenCV-Second-Edition.git

  • NumPy
    • 파이썬에서 다차원 배열, 높은 수준의 수학 함수, 의사 난수 생성기 기능을 제공하는 과학 컴퓨팅용 기본 패키지.
  • SciPy
    • 고급 선형 대수 루틴, 수학 함수 최적화, 신호 처리 등을 제공하는 파이썬의 과학 컴퓨팅용 함수 모음.
  • scikit-learn
    • OpenCV에서는 부족한 헬퍼(helper)기능과 인프라를 제공하는 파이썬의 유용한 오픈소스 시스템 학습 라이브러리.
  • Matplotlib
    • 라인 차트, 히스토그램, 분산형 플롯 등의 생성 기능을 제공하는 파이썬의 주요 과학 플로팅 라이브러리.
  • Jupyter Notebook
    • 웹 브라우저에서 코드를 실행하기 위한 대화식 환경
    • 마크다운 기능 포함, 주석과 세부 프로젝트 노트북을 유지 관리하는데 도움

파이썬의 아나콘다 배포판

conda 환경에서 OpenCV 설치

설치 확인

OpenCV의 ML 모듈 엿보기

OpenCV 3.1 부터는 OpenCV의 모든 머신러닝 관련 기능이 ml모듈로 그룹화 되었다.

C++ API에서도 이 모듈은 사용된다.

머신러닝의 응용

OpenCV 4.0의 새로운 기능

OpenCV 4.0은 OpenCV가 3년 6개월 동안 열심히 작업하고 버글르 고친 결과물이며, 2018년 11월에 최종 출시되었음.

몇 가지 주요 변경 사항과 새로운 기능을 살펴보자.

  • OpenCV 4.0 릴리스를 통해 OpenCV는 공식적으로 C++11 라이브러리가 되었다. 즉, OpenCV 4.0을 컴파일하려고 할 때 C++11 호환 컴파일러가 시스템에 있는지 확인해야함.
  • 많은 C API가 제거되었음. 영향을 받은 모듈로는, 비디오 IO 모듈(videoio), 객체 감지 모듈(objdetect)등이 있다. XML, YAML, JSON용 파일 IO도 C API를 제거함.
  • OpenCV 4.0은 DNN 모듈에서도 많은 개선이 이뤄짐. ONNX지원이 추가됨. 인텔 OpenVINO는 새로운 OpenCV 버전에서도 존재감을 나타냄 (추후 장에서 확인)
  • OpenCL 가속은 AMD와 NVIDIA GPU에 고정돼 있다. 이미지 처리와 기타 작업에 매우 효율적인 엔진 OpenCV Graph API도 추가됨.
  • 모든 OpenCV 릴리스에서와 마찬가지로 성능향상을 목적으로 한 많은 변화가 있었음. QR code 감지, 디코딩 등 새로운 기능도 추가됨.

ONNX 지원은 다양한 언어와 프레임워크에 걸친 모델의 이식성을 돕고,

OpenCL은 컴퓨터 비전 애플리케이션의 런타임을 줄이고,

Graph API는 애플리케이션의 효율성을 높이는 데 도움을 주며,

OpenVINO 툴킷은 인텔의 프로세서와 모델 동물원을 사용해 매우 효율적 딥러닝 모델을 제공함.

지금은 주로, OpenVINO 툴킷DLDT에 초점을 맞출 것이며, 향후에는 컴퓨터 비전 애플리케이션을 가속화 할 것이다.

요약

1장에서는 높은 추상화 수준에서 머신러닝을 이야기했음.

머신러닝 문제 해결 방법은 총 3가지. 지도 비지도 강화

지도학습의 중요성을 이야기했고, 이 분야는 분류와 회귀라는 두가지 하위 필드로 더 나눠볼 수 있었다.

분류 모델을 사용하면 객체를 이미 인식된 클래스로 분류할 수 있고,

회귀 분석은 목표 변수의 지속적인 결과를 예측하는 데 사용할 수 있다.

2장에서는 NumPy와 Matplotlib 같은 일반적인 파이썬 도구를 사용해 머신러닝 시스템의 내부 동작을 살펴보고, OpenCV의 데이터 사용 방법을 학습한다.

반응형