Huấn luyện và triển khai mô hình phân loại hình ảnh trên thiết bị bằng AutoML Vision trong Bộ công cụ học máy

1. Giới thiệu

Những tiến bộ gần đây của công nghệ học máy giúp máy tính nhận ra các đối tượng trong hình ảnh tương đối dễ dàng. Trong lớp học lập trình này, chúng ta sẽ hướng dẫn toàn bộ quy trình xây dựng một mô hình phân loại hình ảnh có khả năng nhận dạng nhiều loại đối tượng, sau đó triển khai mô hình đó trên ứng dụng Android và iOS. Với Bộ công cụ học máy và AutoML, bạn có thể xây dựng và triển khai mô hình trên quy mô lớn mà không cần kiến thức chuyên môn về máy học.

Bộ công cụ học máy là gì?

Bộ công cụ học máy là một SDK dành cho thiết bị di động mang kiến thức 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ẽ và dễ sử dụng. Cho dù là người mới hay có kinh nghiệm về công nghệ học máy, bạn đều có thể dễ dàng triển khai chức năng mình cần chỉ bằng 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 lập tức. Tuy nhiên, nếu bạn cần nhận ra các đối tượng không được API hỗ trợ, chẳng hạn như nhận dạng nhiều loại hoa từ 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 giúp các nhà phát triển có ít kiến thức chuyên môn về máy học có thể huấn luyện các mô hình chất lượng cao dành riêng cho nhu cầu kinh doanh của họ, bằng cách tận dụng công nghệ học chuyển giao tiên tiến của Google và công nghệ Tìm kiếm kiến trúc nơron.

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, sau đó được ứng dụng đóng gói hoặc tải xuống để chạy các phép suy luận hoàn toàn trên thiết bị.

93f21fd287496e4e.pngS

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 quy trình đó trong một ứng dụng Android hoặc iOS mẫu bằng cách dùng SDK Bộ công cụ học máy.

Bạn cần có

Đối với ứng dụng Android

Đối với ứng dụng iOS

  • Phiên bản XCode (v10.2 trở lên) gần đây
  • Trình mô phỏng iOS hoặc thiết bị iOS thực (v9.0 trở lên)
  • CocoaPods
  • Kiến thức cơ bản về phát triển iOS trong Swift

2. Thiết lập

Tải mã nguồn và tập dữ liệu huấn luyện xuống

Tải 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. Giải nén 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

  1. Truy cập vào bảng điều khiển của Firebase.
  2. Chọn Create New Project (Tạo dự án mới) rồi đặt tên cho dự án là "Lớp học lập trình về bộ công cụ học máy".

Thiết lập ứng dụng Android

  1. 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
  2. Tải tệp cấu hình google-services.json xuống rồi đặt vào ứng dụng Android tại android/mlkit-automl/app/google-services.json.

Thiết lập ứng dụng iOS

  1. Thêm ứng dụng iOS của chúng tôi vào dự án Firebase. ID gói iOS: com.google.firebase.codelab.mlkit.automl
  2. Tải tệp cấu hình GoogleService-Info.plist xuống rồi làm theo hướng dẫn để đặt tệp đó vào ứng dụng iOS tại ios/mlkit-automl/GoogleService-Info.plist.

3. Chuẩn bị tập dữ liệu huấn luyện

Để huấn luyện một mô hình nhận dạng nhiều 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 đối tượng. Chúng tôi đã tạo một tệp lưu trữ ảnh hoa được cấp phép theo 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 này được đóng gói là một tệp zip có tên 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 giải nén tệp flower_photos.zip, bạn sẽ thấy tập dữ liệu chứa hình ảnh của 5 loại hoa: bồ công anh, hoa cúc, hoa tulip, hoa hướng dương và hoa hồng được sắp xếp thành các thư mục được đặt tên theo những loại hoa. Đây là cách thuận tiện để tạo tập dữ liệu huấn luyện để 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 có 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 thường sẽ tạo ra các mô hình tốt hơn.

e5772b6527a6048d.png 6c4443d31cd5653e.png.

4. Huấn luyện người mẫu

Tải tập dữ liệu huấn luyện lên

  1. Trong bảng điều khiển của Firebase, hãy mở dự án bạn vừa tạo.
  2. Chọn Bộ công cụ học máy > AutoML.
  3. Bạn có thể thấy một số màn hình chào mừng. Chọn Bắt đầu nếu thích hợp.
  1. 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à "Hoa".
  2. Trong phần Mục tiêu 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.
  3. Chọn Tạo.
  4. Tải tệp flower_photos.zip mà bạn đã tải xuống ở bước trước lên để nhập tập dữ liệu huấn luyện hoa.
  5. Đợi một vài phút để tác vụ nhập hoàn tất.
  6. Bây giờ, bạn có thể xác nhận rằng tập dữ liệu đã được nhập chính xác.
  7. 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ếp tục huấn luyện một mô hình.

cdb18b61f890934f.png

Huấn luyện mô hình phân loại hình ảnh

Vì mô hình này sẽ chạy trên một thiết bị di động có công suất tính toán và bộ nhớ hạn chế, nên chúng ta không chỉ phải 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ự cân bằng giữa độ chính xác, độ trễ (tức là thời gian cần để phân loại một hình ảnh) và kích thước mô hình. Nhìn chung, mô hình có độ chính xác cao hơn cũng lớn hơn và sẽ mất nhiều thời gian hơn để phân loại 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á để đảm bảo độ chính xá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. Bạn cũng có thể chọn khoảng thời gian huấn luyện mô hình. Các tập dữ liệu lớn hơn cần được huấn luyện lâu hơn.

dd6b7eaa2dd5a9de.png

Sau đây là các bước nếu bạn muốn tự huấn luyện mô hình.

  1. Chọn Mô hình tàu.
  2. Chọn mục Mục đích chung và thời gian huấn luyện là 1 giờ tính toán.
  3. Đợi một thời gian (có thể là vài giờ) để hoàn tất hoạt động huấn luyện.
  4. Sau khi hoàn tất nhiệm vụ huấn luyện, 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.

73f98fbed5ae5ee5.pngS

5. Sử dụng mô hình trong ứng dụng dành cho thiết bị di động

Chuẩn bị

  • Lớp học lập trình này có cả ứng dụng mẫu dành cho Android và iOS minh hoạ cách sử dụng mô hình phân loại hình ảnh mà chúng tôi đã huấn luyện trước đó trong một ứng dụng dành cho thiết bị 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 quen thuộc hơn.
  • Trước khi tiếp tục, hãy đảm bảo rằng bạn đã tải ứng dụng mẫu xuống và định cấu hình chúng ở bước 2.
  • Vui lòng đảm bảo rằng môi trường cục bộ của bạn đã được thiết lập để 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 nhiệm vụ huấn luyện của bạn chưa kết thúc, thì 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 bình thường. Để 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 lần lượt nằm trong tệp ImageClassifier.ktImageClassifier.swift, nên bạn có thể bắt đầu từ đó để khám phá cách hoạt động của các ứng dụng.

Có 2 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 để nhóm mô hình phân loại hình ảnh trong tệp nhị phân của ứng dụng, mặc dù một mô hình cũng có thể cung cấp mô hình được lưu trong bộ nhớ cục bộ. Với tính năng gói, mô hình sẽ hiển thị ngay cho người dùng sau khi họ tải ứng dụng của bạn xuống từ App Store / Cửa hàng Play. 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 trong lần đầu cần dùng. Sau đó, mô hình cũng sẽ hoạt động khi không có mạng.

2e71ed2c7cb8757c.pngS

Ứng dụng Android

  1. Mở Android Studio
  2. Nhập ứng dụng Android trong android/mlkit-automl/
  3. (Không bắt buộc) Trích xuất mô hình mà bạn đã tải xuống rồi sao chép nội dung của mô hình đó sang mô hình có trong ứng dụng mẫu. 10cf6b1e0f34de29.png.
  4. Bây giờ, hãy nhấp vào Run ( c8b8a080b7ead886.png) trên thanh công cụ Android Studio và xác minh rằng có thể nhận ra nhiều loại hoa!

2e71ed2c7cb8757c.pngS

Ứng dụng iOS

  1. Mở cửa sổ dòng lệnh rồi chuyển đến thư mục ios/mlkit-automl/
  2. Chạy pod install để tải các phần phụ thuộc xuống thông qua Cocoapods
  3. Chạy open MLVisionExample.xcworkspace/ để mở không gian làm việc của dự án trong Xcode.
  4. (Không bắt buộc) Trích xuất mô hình mà bạn đã tải xuống rồi sao chép nội dung của mô hình đó sang mô hình có trong ứng dụng mẫu trong ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png
  5. Bây giờ, hãy nhấp vào Run ( 16629f86bbeb4208.pngS) trên thanh công cụ Xcode và xác minh rằng có thể nhận ra các loại hoa khác nhau!

65172c3f35336d4e.png.

6. (Không bắt buộc) Sử dụng mô hình từ xa

Với mô hình từ xa của Bộ công cụ học máy, bạn không cần đưa các mô hình Tensorflow Lite vào tệp nhị phân của ứng dụng, mà có thể tải các mô hình này xuống theo yêu cầu từ Firebase khi cần. Mô hình từ xa có một số lợi ích so với 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 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

Ở 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 đã huấn luyện xong mô hình trong bước 4 của lớp học lập trình này.

Xuất bản mô hình

  1. Truy cập vào bảng điều khiển của Firebase.
  2. Chọn "Lớp học lập trình về bộ công cụ học máy tự động" dự án mà bạn đã tạo trước đó.
  3. Chọn Bộ công cụ học máy > AutoML.
  4. Chọn "Hoa" mà bạn đã tạo trước đó.
  5. Xác nhận rằng nhiệm vụ huấn luyện đã hoàn tất, sau đó chọn mô hình.
  6. Chọn Xuất bản rồi đặt tên là "mlkit_flowers". b63a58b83e814acd.png

Nhận ra 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 ứ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 "Nguồn" ở chân trang của màn hình ứng dụng. Xem phần "Khắc phục sự cố" phần dưới đây nếu tính năng này không hoạt động.

7c8292293fd858ad.pngS de359886ccecef2.png

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

  1. Chuyển đến ImageClassifier.kt rồi tìm khối này.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. 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 Bảng điều khiển của Firebase.
  2. Bây giờ, hãy nhấp vào Run (Chạy) (c8b8a080b7ead886.png) trên thanh công cụ Android Studio để chạy lại ứng dụng.

Ứng dụng iOS

  1. Hãy truy cập vào ImageClassifier.swift rồi tìm khối này,
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. 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 Bảng điều khiển của Firebase
  2. Bây giờ, hãy nhấp vào Chạy ( 16629f86bbeb4208.pngS) 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 hành trình toàn diện để huấn luyện 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 bằng AutoML, sau đó sử dụng mô hình này trong ứ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 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 của chúng tôi để xem các tính năng khác của Bộ công cụ học máy Firebase.

Mẫu Android

Mẫu iOS