1. Giới thiệu
Những tiến bộ gần đây trong lĩnh vực học máy đã giúp máy tính nhận dạng các vật thể trong hình ảnh một cách tương đối dễ dàng. Trong lớp học lập trình này, chúng ta sẽ cùng nhau trải qua toàn bộ quá trình xây dựng một mô hình phân loại hình ảnh có thể nhận dạng nhiều loại đối tượng, sau đó triển khai mô hình này trên ứng dụng Android và iOS. Bộ công cụ học máy và AutoML cho phép bạn xây dựng và triển khai mô hình ở quy mô lớn mà không cần kiến thức chuyên môn về học máy.
Bộ công cụ học máy là gì?
Bộ công cụ học máy là một SDK di động mang chuyên môn về học máy của Google vào các ứng dụng Android và iOS trong một gói mạnh mẽ nhưng dễ sử dụng. Cho dù là người mới bắt đầu hay đã có kinh nghiệm về học máy, bạn đều có thể dễ dàng triển khai chức năng cần thiết chỉ bằng một vài dòng mã. Có một số API có thể nhận dạng văn bản, khuôn mặt, v.v. mà bạn có thể sử dụng ngay. Tuy nhiên, nếu cần nhận dạng các đối tượng không được API hỗ trợ (chẳng hạn như nhận dạng các loại hoa trong một hình ảnh), thì bạn cần huấn luyện mô hình của riêng mình. Đây là lúc AutoML có thể giúp bạn.
AutoML là gì?
Cloud AutoML là một bộ sản phẩm học máy, cho phép các nhà phát triển có kiến thức hạn chế về học máy huấn luyện các mô hình chất lượng cao phù hợp với nhu cầu kinh doanh của họ, bằng cách tận dụng công nghệ học chuyển giao và công nghệ Tìm kiếm kiến trúc nơ-ron tiên tiến của Google.
Trong lớp học lập trình này, chúng ta sẽ sử dụng AutoML Vision Edge trong Bộ công cụ học máy để huấn luyện một mô hình phân loại hoa. Mô hình này được huấn luyện trên đám mây, nhưng sau đó được ứng dụng đóng gói hoặc tải xuống để chạy các suy luận hoàn toàn trên thiết bị.

Kiến thức bạn sẽ học được
- Cách huấn luyện mô hình phân loại hình ảnh bằng AutoML Vision Edge trong Bộ công cụ học máy.
- Cách chạy tính năng này trong một ứng dụng mẫu dành cho Android hoặc iOS bằng Bộ công cụ học máy ML Kit SDK.
Bạn cần có
Đối với ứng dụng Android
- Một phiên bản Android Studio gần đây (từ phiên bản 3.4 trở lên)
- Trình mô phỏng Android Studio có Cửa hàng Play hoặc thiết bị Android thực (phiên bản 5.0 trở lên)
- Có kiến thức cơ bản về phát triển Android bằng Kotlin
Đối với ứng dụng iOS
- Một phiên bản XCode gần đây (v10.2 trở lên)
- Trình mô phỏng iOS hoặc thiết bị iOS thực (phiên bản 9.0 trở lên)
- CocoaPods
- Kiến thức cơ bản về việc phát triển iOS bằng Swift
2. Thiết lập
Tải mã và tập dữ liệu huấn luyện xuống
Tải một tệp lưu trữ zip chứa mã nguồn cho lớp học lập trình này và một tập dữ liệu huấn luyện. Trích xuất tệp lưu trữ trong máy cục bộ.
Tạo dự án trên bảng điều khiển của Firebase
- Truy cập vào bảng điều khiển của Firebase.
- Chọn Create New Project (Tạo dự án mới) rồi đặt tên cho dự án là "Bộ công cụ học máy Codelab".
Thiết lập ứng dụng Android
- Thêm ứng dụng Android của chúng tôi vào dự án Firebase. Tên gói Android:
com.google.firebase.codelab.mlkit.automl - Tải tệp cấu hình
google-services.jsonxuống rồi đặt tệp đó vào ứng dụng Android tạiandroid/mlkit-automl/app/google-services.json.
Thiết lập ứng dụng iOS
- Thêm ứng dụng iOS vào dự án Firebase. Mã nhận dạng gói iOS:
com.google.firebase.codelab.mlkit.automl - Tải tệp cấu hình
GoogleService-Info.plistxuống rồi làm theo hướng dẫn để đặt tệp đó vào ứng dụng iOS tạiios/mlkit-automl/GoogleService-Info.plist.
3. Chuẩn bị tập dữ liệu huấn luyện
Để huấn luyện mô hình nhận dạng các loại đối tượng, bạn phải chuẩn bị một bộ hình ảnh và gắn nhãn cho từng hình ảnh. Chúng tôi đã tạo một kho lưu trữ ảnh hoa có giấy phép Creative Commons để bạn sử dụng trong lớp học lập trình này.
Tập dữ liệu được đóng gói trong một tệp zip có tên là flower_photos.zip. Tệp này có trong tệp lưu trữ zip mà bạn đã tải xuống ở bước trước.
Khám phá tập dữ liệu
Nếu trích xuất tệp flower_photos.zip, bạn sẽ thấy rằng tập dữ liệu chứa hình ảnh của 5 loại hoa: hoa bồ công anh, hoa cúc, hoa tulip, hoa hướng dương và hoa hồng được sắp xếp vào các thư mục có tên theo tên của các loài hoa. Đây là một cách hữu ích để tạo tập dữ liệu huấn luyện nhằm cung cấp cho AutoML và huấn luyện một mô hình phân loại hình ảnh.
Có 200 hình ảnh cho mỗi loại hoa trong tập dữ liệu huấn luyện này. Bạn chỉ cần tối thiểu 10 hình ảnh cho mỗi lớp để huấn luyện một mô hình. Tuy nhiên, nhiều hình ảnh huấn luyện hơn thường sẽ tạo ra các mô hình tốt hơn.

4. Huấn luyện mô hình
Tải tập dữ liệu huấn luyện lên
- Trong bảng điều khiển của Firebase, hãy mở dự án mà bạn vừa tạo.
- Chọn Bộ công cụ học máy > AutoML.
- Bạn có thể thấy một số màn hình chào mừng. Chọn Bắt đầu (nếu có).
- Sau khi quá trình thiết lập hoàn tất, hãy chọn Thêm tập dữ liệu rồi đặt tên là "Flowers" (Hoa).
- Trong phần Mục tiêu của mô hình, hãy chọn Phân loại một nhãn vì dữ liệu huấn luyện chỉ chứa một nhãn cho mỗi hình ảnh.
- Chọn Tạo.
- Tải tệp
flower_photos.zipmà bạn đã tải xuống ở bước trước lên để nhập tập dữ liệu huấn luyện về hoa. - Chờ vài phút để tác vụ nhập hoàn tất.
- Giờ đây, bạn có thể xác nhận rằng tập dữ liệu đã được nhập đúng cách.
- Vì tất cả hình ảnh trong tập dữ liệu huấn luyện đều đã được gắn nhãn, nên bạn có thể tiến hành huấn luyện mô hình.

Huấn luyện mô hình phân loại hình ảnh
Vì mô hình của chúng ta sẽ chạy trên một thiết bị di động có sức mạnh tính toán và bộ nhớ hạn chế, nên chúng ta phải lưu ý không chỉ đến độ chính xác của mô hình mà còn cả kích thước và tốc độ của mô hình. Luôn có sự đánh đổi giữa độ chính xác của mô hình, độ trễ (tức là thời gian cần thiết để phân loại một hình ảnh) và kích thước mô hình. Nhìn chung, một mô hình có độ chính xác cao hơn cũng sẽ lớn hơn và mất nhiều thời gian hơn để phân loại một hình ảnh.
AutoML cung cấp cho bạn một số lựa chọn: bạn có thể chọn tối ưu hoá cho độ chính xác, hoặc tối ưu hoá cho độ trễ và kích thước mô hình, hoặc cân bằng giữa các lựa chọn này. Bạn cũng có thể chọn khoảng thời gian cho phép mô hình huấn luyện. Các tập dữ liệu lớn hơn cần được huấn luyện lâu hơn.

Sau đây là các bước nếu bạn muốn tự huấn luyện mô hình.
- Chọn Huấn luyện mô hình.
- Chọn lựa chọn Mục đích chung và thời gian huấn luyện là 1 giờ tính toán.
- Đợi một khoảng thời gian (có thể là vài giờ) để tác vụ huấn luyện hoàn tất.
- Sau khi tác vụ huấn luyện hoàn tất, bạn sẽ thấy các chỉ số đánh giá về hiệu suất của mô hình đã huấn luyện.

5. Sử dụng mô hình trong ứng dụng di động
Chuẩn bị
- Lớp học lập trình này chứa cả ứng dụng mẫu Android và iOS minh hoạ cách sử dụng mô hình phân loại hình ảnh mà chúng ta đã huấn luyện trước đó trong một ứng dụng di động. Hai ứng dụng này có các tính năng tương tự nhau. Bạn có thể chọn nền tảng mà mình quen thuộc hơn.
- Trước khi tiếp tục, vui lòng đảm bảo rằng bạn đã tải các ứng dụng mẫu xuống và định cấu hình chúng ở bước 2.
- Ngoài ra, hãy đảm bảo rằng bạn đã thiết lập môi trường cục bộ để có thể tạo ứng dụng cho nền tảng mà bạn đã chọn (Android/iOS).
Tải mô hình phân loại hình ảnh xuống
- Nếu bạn đã huấn luyện một mô hình ở bước trước, hãy chọn Tải xuống để tải mô hình đó.
- Nếu chưa huấn luyện mô hình hoặc tác vụ huấn luyện chưa hoàn tất, bạn có thể sử dụng mô hình có trong các ứng dụng mẫu.
Thêm mô hình vào(các) ứng dụng mẫu
Bạn chỉ cần thêm mô hình vào các ứng dụng mẫu và chúng sẽ hoạt động ngay. Để xem hướng dẫn đầy đủ về cách tích hợp Bộ công cụ học máy AutoML vào ứng dụng của bạn, vui lòng xem tài liệu của chúng tôi ( Android, iOS). Mã tương tác với SDK Bộ công cụ học máy nằm trong tệp ImageClassifier.kt và ImageClassifier.swift tương ứng, vì vậy, bạn có thể bắt đầu từ đó để khám phá cách các ứng dụng hoạt động.
Có hai lựa chọn để triển khai mô hình: cục bộ và từ xa.
- Mô hình cục bộ chủ yếu được dùng để liên kết mô hình phân loại hình ảnh trong tệp nhị phân của ứng dụng, mặc dù bạn cũng có thể cung cấp một mô hình được lưu trong bộ nhớ cục bộ. Với tính năng kết hợp, người dùng có thể sử dụng mô hình ngay sau khi tải ứng dụng của bạn xuống từ App Store / Cửa hàng Play và mô hình này sẽ hoạt động mà không cần kết nối Internet.
- Mô hình từ xa có nghĩa là mô hình được lưu trữ trên Firebase và sẽ chỉ được tải xuống thiết bị của người dùng khi cần thiết lần đầu tiên. Sau đó, mô hình này cũng sẽ hoạt động khi không có mạng.

Ứng dụng Android
- Mở Android Studio
- Nhập ứng dụng Android trong
android/mlkit-automl/ - (Không bắt buộc) Trích xuất mô hình bạn đã tải xuống và sao chép nội dung của mô hình đó vào mô hình có trong ứng dụng mẫu.

- Bây giờ, hãy nhấp vào Chạy (
) trong thanh công cụ của Android Studio và xác minh rằng ứng dụng có thể nhận dạng các loại hoa!

Ứng dụng iOS
- Mở Terminal rồi chuyển đến thư mục
ios/mlkit-automl/ - Chạy
pod installđể tải các phần phụ thuộc xuống thông qua Cocoapods - Chạy
open MLVisionExample.xcworkspace/để mở không gian làm việc của dự án trong Xcode. - (Không bắt buộc) Trích xuất mô hình bạn đã tải xuống và sao chép nội dung của mô hình đó vào mô hình có trong ứng dụng mẫu trong
ios/ml-automl/Resources/automl/
- Giờ đây, hãy nhấp vào Run (Chạy) (
) trong thanh công cụ Xcode và xác minh rằng ứng dụng có thể nhận dạng các loại hoa!

6. (Không bắt buộc) Sử dụng mô hình từ xa
Mô hình từ xa của ML Kit cho phép bạn không đưa các mô hình Tensorflow Lite vào tệp nhị phân của ứng dụng mà tải xuống theo yêu cầu từ Firebase khi cần. Các mô hình từ xa có một số lợi ích so với các mô hình cục bộ:
- Tệp nhị phân của ứng dụng nhỏ hơn
- Có thể cập nhật các mô hình mà không cần cập nhật ứng dụng
- Thử nghiệm A/B với nhiều phiên bản của một mô hình
Trong bước này, chúng ta sẽ xuất bản một mô hình từ xa và sử dụng mô hình đó trong các ứng dụng mẫu. Hãy đảm bảo rằng bạn đã hoàn tất việc huấn luyện mô hình ở bước 4 của lớp học lập trình này.
Xuất bản mô hình
- Truy cập vào bảng điều khiển của Firebase.
- Chọn dự án "Lớp học lập trình AutoML của Bộ công cụ học máy" mà bạn đã tạo trước đó.
- Chọn Bộ công cụ học máy > AutoML.
- Chọn tập dữ liệu "Flowers" (Hoa) mà bạn đã tạo trước đó.
- Xác nhận rằng nhiệm vụ huấn luyện đã hoàn tất, sau đó chọn mô hình.
- Chọn Xuất bản và đặt tên là "mlkit_flowers".

Nhận diện hoa bằng mô hình từ xa
Các ứng dụng mẫu được định cấu hình để sử dụng mô hình từ xa nếu có. Sau khi xuất bản mô hình từ xa, bạn chỉ cần chạy lại các ứng dụng để kích hoạt quá trình tải mô hình xuống. Bạn có thể xác minh rằng ứng dụng đang sử dụng mô hình từ xa bằng cách xem giá trị "Nguồn" trong chân trang của màn hình ứng dụng. Nếu cách này không hiệu quả, hãy xem phần "Khắc phục sự cố" bên dưới.

Khắc phục sự cố
Nếu ứng dụng mẫu vẫn đang sử dụng mô hình cục bộ, vui lòng xác minh rằng tên mô hình từ xa được đặt chính xác trong mã.
Ứng dụng Android
- Chuyển đến
ImageClassifier.ktvà tìm khối này.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- Xác minh rằng tên mô hình được đặt trong mã khớp với tên mô hình mà bạn đã xuất bản trước đó thông qua Firebase Console.
- Bây giờ, hãy nhấp vào Chạy (
) trong thanh công cụ của Android Studio để chạy lại ứng dụng.
Ứng dụng iOS
- Chuyển đến
ImageClassifier.swiftrồi tìm khối này,
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- Xác minh rằng tên mô hình được đặt trong mã khớp với tên mô hình mà bạn đã xuất bản trước đó thông qua Firebase Console
- Giờ đây, hãy nhấp vào Run (Chạy) (
) trên thanh công cụ Xcode để chạy lại ứng dụng.
7. Xin chúc mừng!
Bạn đã trải qua toàn bộ quy trình huấn luyện một mô hình phân loại hình ảnh bằng dữ liệu huấn luyện của riêng mình thông qua AutoML, sau đó sử dụng mô hình đó trong một ứng dụng di động bằng Bộ công cụ học máy.
Vui lòng xem tài liệu của chúng tôi để tìm hiểu cách tích hợp AutoML Vision Edge trong Bộ công cụ học máy vào ứng dụng của riêng bạn.
Bạn cũng có thể dùng thử các ứng dụng mẫu của Bộ công cụ học máy để xem các tính năng khác của Bộ công cụ học máy Firebase.
Mẫu Android
Các mẫu iOS