머신러닝이란
“머신러닝”이란 무엇일까요? 직역을 해보면 “기계가 배운다”라는 의미로 해석이 됩니다.
과거에는 인공지능을 개발할 때 해당 분야의 전문가들이 만든 많은 양의 샘플들을 데이터 베이스화 하여 자료들을 일일이 수작업으로 컴퓨터에 직접 등록하는 방법을 사용했습니다.
하지만 이런 방법은 대부분의 작업이 사람의 손을 거쳐야 하므로 필연적으로 많은 시간과 노력, 비용이 발생하게 됩니다.
또한, 시대가 발전함에 따라 사람조차 명확하게 구분할 수 없는 지식을 구현해야 하거나, 사람이 일일이 구현하기에는 너무 많은 양의 규칙들이 필요한 경우가 생겨나기 시작합니다.
이러한 경우에 사용할 수 있도록 고안된 방법이 머신러닝(Machine Learning)입니다.
머신러닝 작업 흐름
- 훈련단계
- 목표정의 -> 데이터 수집 -> 데이터 준비 -> 모델 개발 -> 모델 훈련 -> 모델 평가 -> 목표정의(순환)
- 추론단계
- 입력 -> 입력 준비 -> 훈련된 모델 -> 출력 해석
오늘은 CreateML으로 훈련을 통한 모델 생성 방법에 대해서 알아봅시다
Core ML
Core ML 은 앱에 머신 러닝 모델을 손쉽게 통합하는 편의성에 더불어 Apple 기기에서 놀랄 만큼 빠른 성능을 선보입니다.
Core ML 기반 API를 사용하여 내장된 머신 러닝 기능을 앱에 추가하거나 Create ML을 사용하여 Mac에서 바로 맞춤형 Core ML 모델을 학습시킬 수 있습니다.
- 온전히 기기 자체에서 모델 실행
- Core ML 모델은 엄격하게 사용자의 기기에서만 실행되고 네트워크에 연결할 필요가 없으므로 앱의 반응을 보장하면서 사용자 데이터를 비공개로 유지할 수 있습니다.
- 첨단 신경망 실행
- Core ML은 이미지, 비디오, 사운드 및 기타 리치 미디어를 파악하도록 설계된 첨단 신경망과 같은 최신 모델을 지원합니다.
- 모델을 Core ML로 변환
- TensorFlow 또는 PyTorch와 같은 라이브러리의 모델을 Core ML 컨버터를 사용하여 그 어느 때보다 쉽게 Core ML로 변환할 수 있습니다.
- 기기 내에서 모델 맞춤화
- 앱에 번들로 제공되는 모델을 기기 내의 사용자 데이터로 업데이트할 수 있어, 개인 정보를 침해하지 않고도 사용자 행동에 맞춰 모델을 유지할 수 있습니다.
Create ML
Create ML 앱을 사용하면 코드 작성 없이 Mac에서 바로 Core ML 모델을 빠르게 빌드하고 학습시킬 수 있습니다.
학습 데이터만 준비하면 바로 시작할 수 있습니다.
모델 학습 및 정확성을 시각화하는 데 도움이 되는 스냅샷 및 미리 보기와 같은 기능으로 학습 과정을 제어할 수도 있습니다.
Create ML 프레임워크 및 Create ML Components를 사용하여 더욱 깊이 있고 디테일하게 모델을 생성 가능합니다.
모델의 유형
머신러닝(Create ML)을 통한 모델 만들기
꽃의 이미지 분류를 할 수 있는 모델을 만들어 봅시다. (준비물: 데이터의 사진)
Create ML 프로젝트 생성
Developer Tool 에서 Create ML 생성하기
새로운 문서를 만듭니다.
우리는 이미지 분류를 위해 image classification으로 생성
Create ML 생성
모델을 학습시킬 준비
모델을 만들기 앞서 Create ML 사용법에 대하여 간단히 설명하겠습니다.
- 학습을 시키기 위해선 최소 2개의 폴더와 이미지가 필요합니다. (최소 100개 정도의 데이터)
Pet이라고 예를 들면 Dog 20장, Cat 20장, Rabbit 20장, Pig 20장, Snake 20장 이런 식으로 100장 정도 필요하다. - 데이터는 많으면 많을수록 좋지만 사진의 학습 반복수로 모델의 구분성능을 좌우하지는 않습니다.
Parameters
- Iterations (반복 횟수)
- 학습에서 동일한 과정을 반복해 모델의 구분 성능을 높입니다.
- 너무 과도한 반복 학습은 오히려 정확도를 떨어트릴 수도 있습니다.
- Augmentations(증강)
- 각 데이터 세트의 이미지를 복사하여 추가 이미지를 수집하지 않고도 변환 또는 필터를 적용합니다.
- 다양한 상황을 가정해(노이즈가 있거나, 블러, 크롭 된 사진 등) 이미지 후처리를 한 후 학습을 진행해 구분 성능을 높입니다.
- 학습 시간이 굉장히 늘어나는 단점이 있으며, 이미지가 매우 많을 경우는 이미 이미지 수 자체가 그러한 상황이 반영되어 있을 확률이 높기 때문에 그대로 진행하는 것이 나을 수 있습니다.
모델의 폴더 구조
모델의 구조는 이와 같이 만들어 줍니다. (JPEG, PNG 파일 권장)
모델 폴더(큰 범위의 모델) --- 안쪽에 --->
클래스 폴더 or 카테고리 폴더 (분류할 모델) --- 안쪽에 --->
각각의 데이터들(이미지) 과 같은 구조로 만들어줘 합니다.
한번 실제 사용할 모델을 만들어 봅시다.
- 최상위 폴더 - 큰 범위의 모델 (Flowers) : 분류하고 싶은 모델
- 하위 폴더 - 카테고리 (꽃의 종류) : 분류하고 싶은 데이터를 각각의 폴더로 만들어 줍니다.
- 최하위 폴더 - 데이터(이미지) : 카테고리 폴더 안쪽에 각각 맞는 데이터(사진)들을 저장합니다.
학습할 폴더 추가 하기
플러스(+) 버튼을 눌러 위에서 만들어준 Flowers(모델)를 넣어줍니다
학습 시작하기
Train 을 누르면 머신러닝 시작
학습이 끝나면 테스트 정확도 및 실패 등 여러 정보를 확인할 수 있습니다.
Training(훈련)
Evaluation(정확도 평가)
테스트에 모델에 대한 정확도 점수를 나타냅니다.
바로 아래설명 한 "모델 분류와 정답"를 참고하세요.
Preview(실시간 테스트)
Preview에서 사진을 갖고 실시간으로 테스트가 가능합니다.
(드래그로 이미지를 올려주면 됩니다.)
모델의 분류와 정답
모델을 평가하는 요소는 결국, 모델이 내놓은 답과 실제 정답의 관계로써 정의를 내릴 수 있습니다.
정답이 True와 False로 나누어져 있고, 분류 모델 또한 True False의 답을 내놓습니다.
그렇게 하면, 아래와 같이 2x2 matrix로 case를 나누어볼 수 있습니다.
이제 각 case별로 살펴보겠습니다.
- True Positive(TP) : 실제 True인 정답을 True라고 예측 (정답)
- False Positive(FP) : 실제 False인 정답을 True라고 예측 (오답)
- False Negative(FN) : 실제 True인 정답을 False라고 예측 (오답)
- True Negative(TN) : 실제 False인 정답을 False라고 예측 (정답)
Precision (정밀도)
- 정밀도란 모델이 True라고 분류한 것 중에서 실제 True인 것의 비율입니다. ◦ TP / (TP + FP)
Recall (재현율)
- 재현율이란 실제 True인 것 중에서 모델이 True라고 예측한 것의 비율입니다 ◦ TP / (TP + FN)
Precision, Recall 두 지표 모두 높으면 높을수록 좋은 모델입니다.
모델의 정확도 개선방법
- Parameters 설정에서 Iterations(반복 횟수)를 두배로 증가 켜서 학습시킵니다.
- Parameters 설정에서 Augmentations(증강)을 설정 후 학습시킵니다.
- 일반적으로 데이터가 많을수록 성능이 향상되지만 테스트 데이터만큼 다양한 모델 예제를 보여주는 것도 중요합니다.
여러 상황(흐린 사진, 작은 사진 등)의 데이터를 추가 학습시킵니다.
이와 같은 인공지능이 구분하기 힘든 사진에는 더욱더 많은 데이터를 학습시켜야 인식이 가능합니다.
저도 분간이 안되네요 ㅎㅎ
모델의 정확도 개선 대하여 더 자세한 내용을 알고 싶다면 링크 를 참고하세요.
완성된 모델 mlmodel 파일로 추출하기
Get 버튼을 클릭 후 모델을 생성해 줍니다.
생성 완료
이렇게 훈련한 모델을 만들어 봤습니다.
CoreML와 Vision을 통한 모델 사용 방법에 대하여 알고 싶으면 여기 를 클릭하세요
참고
'Xcode > Framework' 카테고리의 다른 글
[iOS/Swift] SceneKit의 사용법 (2) - 주사위 만들기 (0) | 2023.01.08 |
---|---|
[iOS/Swift] SceneKit의 사용법 (1) - 정육면체와 달을 만들어 보자 (0) | 2023.01.07 |
[iOS/Swift] ARKit의 종류 (0) | 2023.01.07 |
[iOS/Swift] CoreML (2) - 훈련 된 Model 사용하기 (3) | 2023.01.04 |
[iOS/Swift] WeatherKit 사용법 (0) | 2022.12.24 |