Trong hướng dẫn này, bạn sẽ học cách train custom dog-breed classification Core ML model dùng trong app iOS và macOS. Core ML model của bạn sẽ phân biệt được 5 giống chó khác nhau cuối hướng dẫn!
Có thể nhớ Apple mua startup ML/AI Turi vài năm trước với giá $200M; cung cấp công cụ mạnh tạo advanced ML model trong thời gian ngắn.
Hướng dẫn này học cài Turi Create trên Mac, tạo Python script, dùng script train Core ML model kéo thả trực tiếp vào project Xcode và nhanh chóng implement vào app.
Bắt Đầu
Trước khi vào phần ML thực sự, cài Turi và Python trước — và chắc chắn hardware/software đáp ứng yêu cầu Turi.
Yêu Cầu
Giống software khác, Turi Create có yêu cầu cụ thể, xem trên GitHub chính thức.
Turi Create hỗ trợ:
- macOS 10.12+
- Linux (glibc 2.12+)
- Windows 10 (qua WSL)
Turi Create yêu cầu:
- Python 2.7, 3.5, 3.6
- Kiến trúc x86_64
- Ít nhất 4 GB RAM
Tóm lại, miễn Mac khá mới nên chạy được Turi Create. Nếu muốn, follow OS khác nhưng có thể sửa bước cho phù hợp.
Cài Đặt
Cài Turi Create đơn giản, nhất là quen command line. Dùng Python 2.7 trong hướng dẫn.
MacOS Mojave có sẵn Python 2.7, chỉ check version. Trên Mac, mở Applications > Utilities > Terminal hoặc search shortcut Command-Space.
Check version Python:
$ python - versionKết quả console như sau:

Nếu version không phải 2.7 hoặc chưa cài, cài tại link này. Nếu output giống tôi, sẵn sàng tiếp tục.
Lưu ý: Một số người thích dùng virtual machine cài Turi Create vì Apple khuyến khích. Nhưng để đơn giản, cài trực tiếp.
Cài Turi Create, nhập Terminal:
$ pip install turicreateXong! Turi Create cài thành công trên Mac, sẵn sàng dùng. Bây giờ build classification, detection, regression, và model khác.
Dataset
Mọi ML model cần dataset. Hướng dẫn này train dog-breed classification model đơn giản, yêu cầu image classification. Data từ Stanford University's Dogs Dataset.
Để Turi nhận diện ảnh pre-classified, cần organize dựa trên nội dung. Ví dụ, ảnh golden retriever trong một folder, labradoodle folder khác.
Cho đơn giản, chỉ dùng 5 giống trong trăm giống dataset Stanford, nhưng bạn dùng bao nhiêu tùy ý. Tôi đã organize và tạo repository. Muốn thêm giống, thêm folder đặt tên tùy ý.
Cấu Trúc Thư Mục
Bây giờ có thể thấy cách sắp xếp dataset quan trọng để train model đúng — không cách nào khác Turi biết gì ở đâu. Tổ chức một chút.

Sơ đồ hierarchy giải thích mọi thứ, cần folder đúng thứ tự trước khi tiếp tục. Muốn đổi tên/sắp xếp khác, ghi nhớ thay đổi.
Train Classifier
Sau setup, sẵn sàng phần chính — train classifier. Làm việc chủ yếu Python, nhưng chưa bao giờ dùng Python cũng ok. Giải thích từng bước, hỏi comment dưới nếu thắc mắc.
File Python
Cần nơi ghi suy nghĩ (tất nhiên là Python). Nếu đã có editor support Python như Atom hoặc IDE như PyCharm, dùng tạo file trống dog_breeds.py.
Nếu thích cách developer-y như tôi, dùng Terminal làm tương tự. Tạo file trong folder ml_classifier, cạnh folder images để hierarchy như sau:

Tạo file mới, vào target directory:
$ cd ml_classifierTạo file dog_breeds.py.
$ touch dog_breeds.pyXong! Folder, file, ảnh ở đúng chỗ, sẵn sàng bước tiếp. Dùng Xcode mở file, đảm bảo cài và update.
Load Ảnh Dataset
Cuối cùng bắt đầu bảo Turi làm gì qua file Python vừa tạo. Double-click file, mở mặc định Xcode nếu cài. Không thì dùng editor khác hoặc Python IDE.
1. Import Framework
import turicreateĐầu file import Turi Create framework. Muốn đặt tên tham chiếu, thêm as <your name>. Ví dụ gọi tc trong code, viết:
import turicreate as tcCho phép gọi tc thay vì viết turicreate. Hướng dẫn này dùng full version turicreate giảm ambiguity.
Cũng cần xử lý tên folder và task OS-related classify ảnh. Cần thư viện Python os. Import:
import os2. Load Ảnh
data = turicreate.image_analysis.load_images("images/")Lưu tất cả ảnh dataset vào biến data. Vì dog_breeds.py cùng directory với folder images, đặt path "images/".
3. Định Nghĩa Label
Giờ Turi Create có tất cả ảnh, cần link tên folder đến label name. Label name là gì trả về trong Core ML model khi dùng trong app iOS/macOS.
data["label"] = data["path"].apply(lambda path: os.path.basename(os.path.dirname(path)))Cho phép map tất cả tên folder thành "label" name, báo Turi Create ảnh trong folder "cocker_spaniel" thực sự là Cocker Spaniel, ví dụ.
4. Lưu Dạng SFrame
Nếu không quen SFrame, đơn giản là dictionary của tất cả data (ảnh) và label (giống chó). Lưu SFrame:
data.save("dog_classifier.sframe")Cho lưu labeled images cho bước sau. Kiểu data khá chuẩn trong ML industry.
Train Và Test
Sau khi Turi Create có labeled images, vào giai đoạn cuối train model. Cần split data 80% train, 20% test model sau train — không test manual.
1. Load SFrame
Load SFrame vừa tạo bước trước. Dùng split testing/training data sau.
data = turicreate.SFrame("dog_classifier.sframe")Gán biến data, kiểu SFrame cho SFrame lưu bước trước. Giờ split data testing/training. Như nói, split 80:20 testing:training.
2. Split Data
Split data. Sau code SFrame, thêm:
testing, training = data.random_split(0.8)Code random split data 80-20 gán cho biến testing và training tương ứng. Giờ Turi tự test model không cần manual supply test images và tạo app — nếu cần adjust, không cần implement đầy đủ trước, adjust ngay trong file Python.
3. Train, Test, Và Export
Sự chăm chỉ cuối cùng được trả! Dòng Python này bảo Turi Create train model, chỉ định architecture muốn dùng.
classifier = turicreate.image_classifier.create(testing, target="label", model="resnet-50")Báo Turi dùng data testing (chỉ định trước), dự đoán labels (dựa trên folder structure trước), dùng resnet-50, một trong architecture ML model chính xác nhất.
Dùng training data đảm bảo model chính xác, thêm:
testing = classifier.evaluate(training)
print testing["accuracy"]Dùng data training chỉ định lưu kết quả test vào biến testing. Thông tin, in accuracy, có thể in thứ khác với đủ thời gian trên Turi Create APIs.
Cuối cùng, lưu model vào file system one-liner sau đặt tên hữu ích:
classifier.save("dog_classifier.model")
classifier.export_coreml("dog_classifier.mlmodel")Tất nhiên lưu model format khác cũng được, nhưng ví dụ lưu Core ML model.
Chạy Và Output
Cho các iOS developer — không, không phải project Xcode tự compile và than vãn lỗi. Để code chạy, làm qua terminal.
Chạy File Python
Chạy file Python dễ! Đảm bảo đúng directory, terminal nhập:
python dog_breeds.pyOutput
Sau vài phút train, folder images và file dog_breeds.py đi kèm SFrame, folder model, và file .mlmodel, là Core ML model!

Cho info về training và training accuracy, số ảnh processed, info hữu ích khác, dùng analyze model mà không cần dùng.
Kết Luận
Hy vọng bạn thích hướng dẫn này như tôi thích làm nó! Đây là bước tiếp theo. Muốn học dùng Core ML model trong app iOS, xem hướng dẫn khác của tôi:
Get Started With Image Recognition in Core ML
Với tiến bộ công nghệ, chúng ta ở điểm thiết bị dùng camera built-in nhận diện chính xác…code.
tutsplus.com
Hướng dẫn này show cách lấy dog_classifier.mlmodel kết quả implement vào app iOS thực tế. Cũng dạy parse live video feed và lấy frame riêng cho image classification.
Nếu có câu hỏi hoặc comment về hướng dẫn, đừng ngần ngại comment dưới! Luôn sẵn sàng nghe feedback, câu hỏi, hoặc bạn áp dụng knowledge từ hướng dẫn này.
Dễ Dàng Hỗ Trợ Công Việc Của Tôi!
Đừng quên bấm nút "clap" nhiều lần, share hướng dẫn lên mạng xã hội, và follow Twitter.
Vardhan Agrawal (@vhanagwal) | Twitter
The latest Tweets from Vardhan Agrawal (@vhanagwal). Completely self-taught #ios developer, #instructor, and human…