[CoreML] Apple도 AI 한다고 (1) - CoreML의 기본 개념을 배워보자

2023. 4. 14. 14:43Framework, Library

내 블로그에서 올라오는 글의 비중을 보면 알겠지만, 현재는 iOS 개발을 공부하는 비중이 내 개발 공부의 8할 이상을 차지하고 있다.

지금 나는 릴리즈 프로젝트도 진행해 보고, 다양한 라이브러리와 문서들을 참고하고, RxSwift, 디자인 패턴, 아키텍처 등을 공부하면서 iOS 개발자가 되기 위한 지식을 조금씩 길러가는 중이다.

그럼에도 불구하고, 나는 항상 인공지능(AI), 머신러닝(ML), 딥러닝(DL) 분야에 대한 배움의 갈증을 느낀다.


우선 전역 후 복학을 하면, 학교에서는 소프트웨어융합학과 "데이터 사이언스 트랙" 커리큘럼을 따라가야 하기에,
지금 내가 주로 하고 있는 클라이언트 개발보다는 데이터 사이언스, 머신러닝 분야에 대한 공부가 자의든 타의든 더 주축이 돼야 한다는 이유가 크다.

하지만 이 말고도 처음 개발 공부를 배운 동기를 생각해 보면, 단순히 어떤 앱을 만드는 개발자가 되고 싶어서가 아니라,
스포츠 데이터 분석에 대한 흥미 때문에 시작한 것이기 때문에.
그리고 앞으로도 SW와 체육을 융합시키고 싶다는 나 스스로의 목표가 있기 때문에.

iOS 개발이 아무리 재밌더라도, 지금의 나는 인공지능(AI), 머신러닝(ML), 딥러닝(DL) 분야에 대한 공부를 결코 놓을 수 없다.

 

이렇게 iOS와 데이터 사이언스 사이의 고민이 계속되던 와중, 불현듯 한 질문이 내 머릿속을 스쳐 지나갔다.

"머신러닝을 iOS 앱에 적용시키면 되지 않을까?"

이 질문에 대한 답을 바로 오늘부터 다루게 될 Core ML Framework에서 찾게 될 것이다.

 

Apple Developer Documentation

 

developer.apple.com

Core ML은 쉽게 말해서 iOS 앱에서 머신러닝(ML)을 쉽게 적용할 수 있도록 도와주는 프레임워크(Framework)다.

조금 더 자세하게 말하자면, Swift 코드에서 머신러닝 모델에 더 쉽게 접근하고 사용할 수 있도록, 
그리고 그 모델을 앱에 통합하고, 예측, 훈련하는 과정까지 필요한 기능을 한 번에 모아둔 기능이라고 생각하면 된다.


Core ML은 iOS 11이 배포되면서 동시에 배포된 프레임워크인데,
사실 Core ML 배포 이전에도 이미 Apple에서는 머신러닝과 관련된 기능을 사용할 수 있었다고 한다. (그 사용 방법이 어려웠을 뿐,,)

Core ML이 배포되면서 기존, 머신러닝을 할 때마다 따로 구분되어 사용했던 계층(프레임워크)들을 한 번에 묶어버렸고, 이에 따라 iOS 개발에서도 Core ML이라는 프레임워크를 사용해서 머신러닝을 보다 쉽게 사용할 수 있게 된 것이다.

이제 본격적으로 Core ML의 기초 개념들을 배워보자.
아래 사진은 Apple에서 Core ML의 계층을 설명하면서 함께 제공하는 사진이다.

기본적으로 아래에 있는 Accelerate and BNNS와 Metal Performance Shaders(MPSes) 같은 기존 프레임워크가 iOS 11 이전에서 사용했던 애들이다.

💡Accelerate와 MPSes에 대한 추가적인 이야기

1) Accelerate와 MPSes 프레임워크는 Core ML 내부에서 사용되지만, Core ML Model이 어느 것을 사용할지 내부적으로 결정하는 과정을 거친다.
2) Accelerate 프레임워크는 메모리가 많이 필요한 작업에서 사용 -> CPU 사용
3) MPSes 프레임워크는 계산이 집약적으로 발생하는 작업에서 사용 -> GPU 사용

Core ML에서도 이 두 프레임워크를 패키징하여, 기본 ML 성능 프레임워크로 동작하는 데 사용하게 된다.

그리고 Core ML에서는 추가적으로 해당 머신러닝의 특화된 영역에 따라,
이미지 분석을 위한 Vision, 텍스트 처리를 위한 Natural Language, 오디오를 텍스트로 변환하는 Speech, 오디오에서 소리를 알아차릴 수 있는 Sound Analysis 까지 다양한 영역 특화 프레임워크(framework)를 지원한다.

Core ML의 계층은 이렇게 나뉘어진다.

그럼 실제로 Core ML을 사용할 때는, 어떤 순서로 작업이 진행되는 것일까?

아래 그림을 참고하면서, Core ML 작업 흐름을 이해해 보자.

우선, 머신러닝을 수행하고 싶은 특정한 데이터(영상 데이터, 이미지 데이터, 소리 데이터 등...)가 있어야 할 것이다.

그럼 그 데이터를 머신러닝에서 사용하기 위해, 머신러닝 모델(.mlmodel)로 만들어줘야 하는데, (training)
이 과정에서는 Keras, turi, Caffe, Scikit-learn, LibSVN, XGBoost와 같은 프레임워크를 모두 모듈식으로 구성해서 오픈소스로 애플이 지원한다. -> 이 부분 때문에 결국은 파이썬을 이용하는 머신러닝도 공부해야 한다 ^__^

아무튼, 이렇게 사용할 수 있도록 지원하는 패키지의 이름이 Core ML Tools이다.
그리고 이 ML 모델을 Core ML에서 제공하는 기능을 통해 앱에 적용하는 과정을 거치면 된다. (inference)


그럼 이제 내가 어떤 것들을 공부하면 될까?

이 역시도 아래 Apple 개발자 공식 문서에서 Get started with Core ML이라는 이름으로 친절하게 설명해주고 있다.

코드 없이 바로 Mac으로 빌드나 Core ML 모델을 학습시킬 수 있는 방법인 Create ML 부분,
위에서 말했듯이 다른 Python 라이브러리를 사용해서 머신러닝 모델을 만드는 방법인 Core ML Tools 부분,
애플이 이미 학습과 전환을 끝내둔 형태로 제공하는 Core ML Models 부분까지 앞으로 순서대로 배워보도록 하겠다.

+ 번역이 개판이긴 하지만, 관련된 책도 첨부해 보겠다. (아래는 원제)

 

실전! Core ML을 활용한 머신러닝 iOS 앱 개발

애플 CORE ML을 활용한 스마트한 IOS 앱 만들기!CORE ML은 다양한 머신러닝 작업을 지원하기 위해 설계된 API를 제공하는 애플의 유명한 프레임워크다. 이 프레임워크를 활용하면 머신러닝 모델을 훈

book.naver.com

 

Machine Learning with Core ML

Leverage the power of Apple's Core ML to create smart iOS apps Key Features * Explore the concepts of machine learning and Apple's Core ML APIs * Use Core ML to understand and transform images and videos * Exploit the power of using CNN and RNN in iOS appl

book.naver.com