Giới thiệu:
Vào mùa hè 2017, Apple đã giới thiệu CoreML, một framework cho phép bạn dễ dàng tích hợp các model Machine Learning vào ứng dụng của mình. Tuy nhiên, các model này chỉ có thể được tải xuống từ trang web của Apple hoặc được tạo ra với sự trợ giúp của một trong các thư viện Deep Learning của Python như Tensorflow, Keras, v.v. Vì vậy việc tạo ra model rất khó khăn đối với các iOS developer không có kinh nghiệm về Deep Learning. Tuy nhiên với sự ra đời của CreateML vào cuối năm 2018, các iOS developer đã có thể dễ dàng tạo ra các training model theo mong muốn.
What can it do?
Create ML cho phép bạn xây dựng model cho việc:
- Nhận dạng hình ảnh: bây giờ bạn có thể dễ dang tạo model để phân biện một con mèo với một con chó trên trong một bức ảnh :dog::cat:…v.v
- Phân loại văn bản: tạo ra một model để phân loại email spam cho riêng mình…v.v
- Dự đoán các giá trị bằng cách sử dụng dữ liệu cấu trúc: bạn có thể dự đoán giá nhà dựa trên diện tích vuông, vị trí và một số phòng ngủ….:houses:
HealthyLaucher app
Chức năng:
Ý tưởng đằng sau HealthyLuncher rất đơn giản: bạn tải lên một hình ảnh từ thư viện của mình và ứng dụng sẽ đánh giá xem bữa trưa của bạn có lành mạnh hay không. Bản thân nhiệm vụ này không dễ dàng, nhưng miễn là chúng ta sẽ tạo ra một mô hình Machine Learning cho mục đích giáo dục, chúng ta có thể đơn giản hóa nhiệm vụ. Vì vậy, giả sử rằng salad, trái cây và rau quả là tốt cho sức khỏe, trong khi các loại thức ăn nhanh phổ biến nhất thì không (bánh mì kẹp thịt, khoai tây chiên, pizza, bánh rán, v.v.). Chúng ta sẽ tạo ra model theo điều kiện trên.
Data:
Trước hết, bạn cần sưu tầm các hình ảnh dữ liệu để training. Tôi đã tải xuống bộ dữ liệu salad, trái cây, rau và thức ăn nhanh từ bộ dữ liệu Open Images v4. Ngoài ra, tôi cũng đã tìm kiếm một vài hình ảnh trênGoogle
, chọn tùy chọn được gắn nhãn để sử dụng lại
. Cuối cùng, tôi đã nhận được 63 hình ảnh cho sức khỏe và 59 cho bộ dữ liệu đào tạo thức ăn nhanh + 20 hình ảnh cho sức khỏe và 17 cho bộ dữ liệu thử nghiệm thức ăn nhanh.
Những điều cần nhớ:
Apple khuyến nghị sử dụng ít nhất 10 hình ảnh cho mỗi nhãn.
Nhưng càng nhiều hình ảnh, càng tốt.
Bạn càng có nhiều hình ảnh, model đào tạo sẽ chính xác hơn.
Chuẩn bị tập dữ liệu và thử nghiệm.
Ngoài ra, bạn có thể chia một tập dữ liệu thành dữ liệu huấn luyện và kiểm tra trong mã.
Lý tưởng nhất là tỷ lệ dữ liệu / kiểm tra nên ở khoảng 80/20 hoặc 70/30.
Số lượng hình ảnh cho mỗi nhãn phải gần như nhau (tránh sự khác biệt lớn như 50 hình ảnh cho một và 500 cho hình ảnh khác).
Hình ảnh phải giống với hình ảnh mà model thực sẽ được sử dụng.
Cung cấp nhiều hình ảnh (góc khác nhau, điều kiện ánh sáng, v.v.).
Không có ràng buộc về kích thước, tuy nhiên nên ít nhất là 299x299 pixel.
Tiếp theo, bạn chỉ cần tạo hai thư mục với dữ liệu đào tạo và kiểm tra và thêm các thư mục con vào chúng với nhãn lớp làm tên của chúng.
Training
MLImageClassifierBuilder1
2
3
4import CreateMLUI
let builder = MLImageClassifierBuilder()
builder.showInLineView()
Run playground và thêm các hình ảnh test vào assistant editor. Bạn sẽ có mô hình của bạn trong vài giây.
MLImageClassifier
Bạn có thể sử dụng MLImageClassifier có quy trình làm việc khá giống với MLImageClassifierBuider, chỉ khác là với nhiều code hơn. Trong MLImageClassifier, bạn có thể chỉ định các tham số đào tạo hoặc phân chia dữ liệu thành các tham số đào tạo. Bạn có thể nói MLImageClassifier cung cấp cho bạn nhiều không gian hơn để thử nghiệm. Nếu bạn đã quen thuộc với Machine Learning, tùy chọn này sẽ khiến bạn quan tâm hơn:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34import CreateML
import Foundation
// Initializing the properly labeled training data from Resources folder.
let trainingDataPath = Bundle.main.path(forResource: "train", ofType: nil, inDirectory: "Data/image")!
let trainingData = MLImageClassifier.DataSource.labeledDirectories(at: URL(fileURLWithPath: trainingDataPath))
// Initializing the classifier with a training data.
let classifier = try! MLImageClassifier(trainingData: trainingData)
// Evaluating training & validation accuracies.
let trainingAccuracy = (1.0 - classifier.trainingMetrics.classificationError) * 100 // Result: 100%
let validationAccuracy = (1.0 - classifier.validationMetrics.classificationError) * 100 // Result: 100%
// Initializing the properly labeled testing data from Resources folder.
let testingDataPath = Bundle.main.path(forResource: "test", ofType: nil, inDirectory: "Data/image")!
let testingData = MLImageClassifier.DataSource.labeledDirectories(at: URL(fileURLWithPath: testingDataPath))
// Counting the testing evaluation.
let evaluationMetrics = classifier.evaluation(on: testingData)
let evaluationAccuracy = (1.0 - evaluationMetrics.classificationError) * 100 // Result: 97.22%
// Confusion matrix in order to see which labels were classified wrongly.
let confusionMatrix = evaluationMetrics.confusion
print("Confusion matrix: \(confusionMatrix)")
// Metadata for saving the model.
let metadata = MLModelMetadata(author: "Author",
shortDescription: "A model trained to classify healthy and fast food lunch",
version: "1.0")
// Saving the model. Remember to update the path.
try classifier.write(to: URL(fileURLWithPath: "Path where you would like to save the model"),
metadata: metadata)
Adding the model to the app
Bây giờ bạn có thể thêm model .mlmodel của mình vào HealthyLuncher.
Kết:
Bạn có thể cải thiện model bằng cách sử dụng các bộ dữ liệu lớn hơn. Hi vọng qua bài viết các bạn có thể tạo ra được các model riêng của mình để phục vụ trong ứng dụng. Cảm ơn các bạn đã theo dõi bài viết.