-
ML 세션 : 애플 생태계에서 ML 기술 활용하기Apple Developer Academy @ POSTECH🍍 2024. 9. 27. 22:04
애플 디벨로퍼 아카데미에서 ML 스터디를 진행하며 애플 생태계에서 ML 기술을 활용하는 방법에 대한 세션을 진행하게 되었습니다.
다들 안녕들하신지요? 아임 파인입니다.
오늘은 애플 생태계에서 AI 모델을 어떻게 활용할 수 있는지 코드와 함께 알아보려고 합니다.
다들 평소에 AI를 어떻게 활용하고 계시나요?
저는 모든 일상속에서 AI와 함께하고 있는데요.
코드를 짤때는 물론이고 글을 적기전 내용을 구성할 때, 새로운 기술을 학습할때 등
다양한 상황에서 gpt와 같은 생성형 ai의 도움을 받고 있습니다.
혹시 얼마전에 gpt의 새로운 모델이 또 나왔다는 사실을 알고 계셨나요?
새로 나온 모델의 이름은 o1으로 현재는 o1-preview라는 미리보기 형태로 체험이 가능합니다.
한동안 인터넷상에서 한국인만 해석할 수 있는 리뷰라는 제목으로 돌았던 글 중 하나입니다. 한국어 특징을 활용한 일종의 암호화를 통해 외국인들은 번역기를 이용해도 해당 내용의 의미를 알 수 없게 만들었습니다.
OpenAI의 새로운 모델을 소개하는 영상에서, 이전까지 어떤 ai 도 해석해내지 못했던 방식의 문장을 정확하게 풀어내는 모습을 보여줍니다.
해당 영상을 보고 직접 새로나온 o1-preview 모델을 사용해 봤는데요.
사용하면서 느꼈던 점은
기존에는 주어진 질문을 분석한뒤에 이 질문 자체에 대해 대답을 주는 방식이었다면
새로 나온 모델은 질문이 주어진 맥락을 스스로 파악하고 문제를 해결하기 위한 절차를 스스로 나누어서 단계별로 문제를 해결해 나갔습니다.
o1-preview를 이용하는 내내 내앞의 기계가 뭔가 진짜 생각을 하고 있는 것 같다는 느낌이 드는 동시에 이제 진짜 얼마남지 않았구나라는 생각이 들었습니다.
평소에 장난으로 AI를 너무 학대해서 나중에 울트론이 되면 내가 제일먼저 사냥당할거다. 라는 식으로 말하곤 했었는데 새로운 모델이 나오는 주기가 점점더 짧아지는 만큼 정말 그날이 올 수도 있겠다라는 상상을 했습니다.
이렇게 빠르게 발전하는 AI을 단순한 문제를 해결하는데만 사용하기에는 너무 아깝다고 생각했습니다.
앞으로 다가올 미래에는 이 엄청난 능력을 가진 AI를 얼마나 잘 활용할 수 있느냐에 따라 개인의 역량이 결정되지 않을까요?
그렇다면 우리는 AI와 좋은 친구가 될 수는 없을까요?
올해 함께 모여서 다같이 봤던 WWDC 키워드 또한 AI 었습니다.
애플 또한 AI 전쟁시대에서 OpenAI와의 협업을 통해 AI 기술을 자사의 기기들에 적극적으로 도입하고 있습니다.
그러면 애플 생태계에서의 AI 기술들이 어떻게 활용되는지 알아보도록 합시다.
가장 먼저 AI 기술을 어플리케이션에 적용하기 위해서는 어떠한 과정을 거치는지 알아봅시다.
크케 3가지 단계로 나뉘는데요.
첫번째로는 Train 단계입니다. 어플리케이션에서 사용할 AI 모델을 훈련시키는 단계로 제공하려는 기능이 뭔지에 따라 알맞는 모델을 선택하고 각 도메인에 맞는 데이터를 제공하여 제공할 서비스에 맞게 AI를 훈련시키는 단계입니다.
두번째 단계는 Prepare 단계입니다. 이 단계에서는 앞서 훈련한 AI 모델을 아이폰이나 맥북과 같은 애플 플렛폼에서 활용할 수 있는 포멧인 CoreML로 변환해야합니다. 이 단계에서는 모델의 구조나 파라미터를 조정해가며 충분히 쓸만한 성능을 내면서도 기기의 리소스를 많이 사용하지 않는 지점을 찾는게 중요합니다.
세번째 단계는 Intergrate 단계로 CoreML 로 변환한 모델을 애플에서 제공하는 프레임워크와 함께 코드를 이용해 활용할 수 있습니다.
앞선 설명으로는 무슨 이야기인지 감이 안오실테니 우리 식물 인식 앱을 만든다고 가정해봅시다.
첫번째 Train 단계에서의 목표는 사용자가 찍은 사진이 어떤 식물인지 구분해주는 AI 모델을 훈련시키는 것입니다. 이 과정에서는 다양한 식물 종의 이미지 데이터셋을 확보하고 다양한 인공지능 구조중에 이미지 분류에 적합한 모델을 선택합니다. 그리고 앞서 확보한 이미지들을 모델이 잘 학습할 수 있는 형태로 데이터 전처리를 한뒤 이 데이터들을 모델에 학습을 시키고 최종적으로 잘 학습이 잘되었는지 즉 실제로 쓸만한지 검증하는 절차를 거칩니다.
두번째 Prepare 단계에서의 목표는 만든 모델을 apple의 플렛폼 , 아이폰, 맥북 같은 기기에서 사용할 수 있도록 CoreML 형식으로 변환을 해주고 다양한 최적화 기법을 이용해 모바일 기기에서도 모델을 사용할 수 있도록 경량화를 해줍니다.
마지막으로 Intergrate 단계에서는 coreML로 변환한 모델을 앱에 통합하여 실제 유저가 사용 가능한 어플을 만드는 겁니다. 단지 모델만 있다고 사용 가능하지는 않죠? 앱에 유저가 사진을 찍을 수 있도록 카메라 기능도 넣고 찍은 사진을 모델에게 판단에 달라고 요청하는 코드, 또 답변을 받아와서 유저에게 보여주는 코드 등 전체 프로세스를 구현해주어야겠죠?
오늘은 위의 과정에서도 실제 model을 가져와서 어플리케이션에서 어떻게 적용할 수 있는지에 대해 좀더 알아봅시다. 단순히 CoreML를 프로젝트에 추가했다해서 해당 모델을 바로 코드단에서 사용할 수 있는게 아닙니다.
이 슬라이드에서 볼 수 있듯이 각 모델에 따라 입력과 출력 형식이 정해져 있습니다.
즉 이 모델을 활용하기 위해서는 이 모델이 이해할 수 있는 형태로 데이터를 주어야하고
해당 모델의 출력 결과를 우리가 이해할 수 있는 형태로 변환하는 과정이 필요합니다.
즉 모델과 앱사이에서 중개자 역할을 하는 중간걔층이 필요합니다.
그리고 애플에서 제공하는 다양한 형태의 프레임워크가 해당 역할을 해줍니다.
따라서 우리는 입력과 출력 형식을 일일이 고민하지 않아도 이러한 api 들을 이용해 model에게 요청을 보내고 model이 처리한 결과를 받아 볼 수 있습니다.
도서관에서 다음과 같은 책을 봤었는데요, 이책은 영화에서 색이 어떻게 쓰이고 어떠한 느낌을 나타내는지 대한 책이었습니다.
이책을 읽고나니 각 사진의 분위기를 대표할 수 있는 색을 뽑아주는 앱이 있으면 좋겠다고 생각했습니다.
사진을 선택하면 해당 사진을 대표하는 색을 뽑아주도록 다음과 같은 설계를 했습니다.
색상 추출 로직
1. 픽셀단위로 색의 빈도수를 계산한다.
2. 빈도수를 계산시 객체로 인지되는 경우 가중치를 부여한다. 사람은 + ( 우리의 시각이 일반 배경보다 사람이나 사물에 더 집중하는 점을 고려)
사용자가 앱에서 색상을 뽑고 싶은 사진을 선택하면
해당 사진에서 객체를 인지하고 인지한 객체에 대한 라벨과 바운딩 박스를 얻습니다.
픽셀이 해당 바운딩 박스에 위치한 경우 가중치를 부여하고 사람인 경우 더 큰 가중치를 부여 했습니다.
이를 통해 사람으로 인지된 영역에 있는 색이 대표성을 띄도록 했습니다.
사용자에게 사진을 입력으로 받아 model에게 입력으로 주면
모델은 주어진 사진에서 인지되는 객체에 대하여 바운딩 박스와 함께 라벨을 줍니다.
모델로는 8비트 양자화를 통해 기존 YOLOv3 모델의 1/4 크기 모델을 사용했으며
모델과 앱 로직의 중간 계층으로는 Vision 프레임워크를 활용했습니다.
그러면 만든 앱을 어떻게 작동하는지 한번 보여드린뒤 해당 앱에서 ml model이 어떻게 활용되는지에 대해서 설명드리도록 하겠습니다.
이 코드는 애플의 CoreML과 Vision 프레임워크를 이용해 이미지에서 객체를 탐지하는 예시입니다. CoreML 모델을 활용하여 객체 인식을 수행하는 과정을 설명하기 위해, 코드는 크게 3단계로 나눌 수 있습니다:
- 모델 준비 단계 (Model Setup)
setupModel()
메서드에서 CoreML 모델을 설정합니다.- 여기서 중요한 점은, 객체 탐지를 위해 CoreML 모델 자체만으로는 충분하지 않고, Vision 프레임워크를 통해 중간층 역할을 하는
VNCoreMLModel
을 설정하여 사용한다는 점입니다. - 이 과정은 머신러닝 모델을 직접 다루기 어렵기 때문에, Vision 프레임워크가 이를 처리할 수 있는 요청 형태로 변환해줍니다.
let miniYolo = try YOLOv3Int8LUT(configuration: configuration) self.model = try VNCoreMLModel(for: miniYolo.model)
- 객체 탐지 요청 구성 단계 (Detection Request Setup)
detectObject(in:completion:)
메서드에서 실제 객체 탐지를 수행합니다.- 이때 중요한 점은,
VNCoreMLRequest
를 통해 모델을 이용한 탐지 요청을 생성하고,VNImageRequestHandler
를 사용해 이미지 처리를 시작합니다. Vision이 이 과정을 백그라운드에서 처리하며, 결과가 준비되면 완료 핸들러가 호출됩니다.
let request = VNCoreMLRequest(model: model) { request, error in // 결과 처리 및 에러 핸들링 } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) try handler.perform([request])
- 탐지 결과 처리 단계 (Detection Result Processing)
- Vision 프레임워크가 완료 핸들러를 호출하면,
VNRecognizedObjectObservation
을 통해 객체 탐지 결과를 받아 처리합니다. 이때, 탐지된 객체들의 레이블과 bounding box를 추출해 사용자에게 전달합니다. - Vision 프레임워크는 입력 이미지의 좌표계를 사용하여
boundingBox
를 처리하기 때문에, 이를 처리하기 위한 변환 함수도 구현되어 있습니다.
- Vision 프레임워크가 완료 핸들러를 호출하면,
let detectedObjects = results.map { observation -> DetectedObject in let boundingBox = self.convertNormalizedRect(observation.boundingBox, imageSize: image.size) let topLabel = observation.labels.max(by: { $0.confidence < $1.confidence })?.identifier ?? "Unknown" return DetectedObject(label: topLabel, boundingBox: boundingBox) }
요약해보면
- 모델 설정: CoreML 모델을 Vision의
VNCoreMLModel
로 변환해 사용합니다. - 탐지 요청:
VNCoreMLRequest
와VNImageRequestHandler
를 사용해 Vision 프레임워크에 객체 탐지 요청을 보냅니다. - 결과 처리: 탐지된 객체 정보를
VNRecognizedObjectObservation
으로 받아 레이블과 위치를 처리합니다.
이 전체 프로세스는 Vision 프레임워크가 CoreML 모델을 매끄럽게 사용할 수 있도록 중간층 역할을 수행하며, 이를 통해 애플 생태계 내에서 ML 기술을 쉽게 활용할 수 있게 해줍니다.
마지막으로 이번 세션을 위해 앱을 만들면서 느낀점에 대해서 공유해드리고자합니다.
먼저, 내가 만들고자 하는 서비스에 딱 맞는 모델을 찾는 일이 생각보다 쉽지 않다는 걸 다시 한번 깨달았습니다.
특히 모바일 플랫폼에서는 모델의 정확도뿐 아니라 성능에 대한 고민이 필수적이었습니다.
아무리 좋은 AI 모델이라도, 모바일 환경에서 속도나 배터리 소모에 부담을 준다면 사용자 경험에 큰 영향을 미칠 수밖에 없죠.
또한, 애플에서 제공하는 프레임워크들이 내가 원하는 입출력을 항상 제공하지 않을 수도 있다는 점도 중요하게 느껴졌습니다. Vision이나 CoreML 같은 도구들이 매우 강력하긴 하지만, 실제로 내 서비스에 맞춤형으로 적용하려면 커스터마이징이 필요하거나, 원하는 대로 동작하지 않을 때가 있었습니다.
마지막으로, 앱을 개발할 때 AI 기술 자체보다 그 기술을 어떤 방식으로 활용할 것인가가 더 중요하다는 사실입니다. AI는 도구일 뿐이고, 그 도구를 통해 해결하고자 하는 문제를 명확히 정의하고, 실제 사용자가 원하는 가치를 전달할 수 있는 방식으로 잘 적용하는 것이 핵심이라는 생각이 듭니다. AI 기술이 중요한 것은 맞지만, 그 기술이 사용자 경험에 자연스럽게 녹아드는 것이 더 중요하다는 걸 이번 기회를 통해 다시 한번 느낄 수 있었습니다.
이러한 점들을 염두에 두고, 앞으로도 더 나은 사용자 경험을 제공하는 데 집중하면서 AI를 활용해 나가야겠다는 생각이 듭니다.
'Apple Developer Academy @ POSTECH🍍' 카테고리의 다른 글
Run & Learn : 배움은 계속된다. (0) 2024.12.17 얼만큼 할 수 있고 얼마만에 할 수 있을까? - 파이룰 (0) 2024.10.14 마지막 출발선에 서서 뒤를 바라보다. (0) 2024.09.09 질문 방향의 전환 (0) 2024.04.13 - 모델 준비 단계 (Model Setup)