Sử dụng mô hình TensorFlow Lite tuỳ chỉnh bằng Flutter

Nếu ứng dụng của bạn sử dụng các mô hình tuỳ chỉnh TensorFlow Lite, thì bạn có thể dùng Firebase ML để triển khai các mô hình đó. Bằng cách triển khai mô hình bằng Firebase, bạn có thể giảm kích thước tải xuống ban đầu của ứng dụng và cập nhật các mô hình học máy của ứng dụng mà không cần phát hành phiên bản mới của ứng dụng. Ngoài ra, với tính năng Cấu hình từ xa và Thử nghiệm A/B, bạn có thể phân phát động các mô hình khác nhau cho nhiều nhóm người dùng.

Mô hình TensorFlow Lite

Mô hình TensorFlow Lite là các mô hình học máy được tối ưu hoá để chạy trên thiết bị di động. Cách lấy mô hình TensorFlow Lite:

Xin lưu ý rằng khi không có thư viện TensorFlow Lite được duy trì cho Dart, bạn sẽ cần tích hợp với thư viện TensorFlow Lite gốc cho các nền tảng của mình. Chúng tôi không ghi lại quá trình tích hợp này ở đây.

Trước khi bắt đầu

  1. Cài đặt và khởi chạy SDK Firebase cho Flutter nếu bạn chưa làm.

  2. Từ thư mục gốc của dự án Flutter, hãy chạy lệnh sau để cài đặt trình bổ trợ trình tải mô hình học máy:

    flutter pub add firebase_ml_model_downloader
    
  3. Xây dựng lại dự án:

    flutter run
    

1. Triển khai mô hình

Triển khai các mô hình TensorFlow tuỳ chỉnh bằng bảng điều khiển của Firebase hoặc SDK Firebase Admin Python và Node.js. Xem bài viết Triển khai và quản lý mô hình tuỳ chỉnh.

Sau khi thêm mô hình tuỳ chỉnh vào dự án Firebase, bạn có thể tham chiếu mô hình đó trong ứng dụng bằng tên mà bạn đã chỉ định. Bất cứ lúc nào, bạn cũng có thể triển khai mô hình TensorFlow Lite mới và tải mô hình mới xuống thiết bị của người dùng bằng cách gọi getModel() (xem bên dưới).

2. Tải mô hình xuống thiết bị và khởi chạy trình thông dịch TensorFlow Lite

Để sử dụng mô hình TensorFlow Lite trong ứng dụng, trước tiên, hãy dùng trình tải mô hình để tải phiên bản mới nhất của mô hình xuống thiết bị. Sau đó, hãy tạo thực thể trình thông dịch TensorFlow Lite bằng mô hình.

Để bắt đầu tải mô hình xuống, hãy gọi phương thức getModel() của trình tải mô hình, chỉ định tên mà bạn đã gán cho mô hình khi tải mô hình lên, cho dù bạn có muốn luôn tải mô hình mới nhất xuống hay không và các điều kiện mà bạn muốn cho phép tải xuống.

Bạn có thể chọn trong 3 hành vi tải xuống:

Loại tải xuống Mô tả
localModel Lấy mô hình cục bộ từ thiết bị. Nếu không có mô hình cục bộ, thì hành vi này giống như latestModel. Hãy sử dụng loại tải xuống này nếu bạn không quan tâm đến việc kiểm tra các bản cập nhật mô hình. Ví dụ: bạn đang sử dụng Cấu hình từ xa để truy xuất tên mô hình và bạn luôn tải mô hình lên bằng tên mới (nên dùng).
localModelUpdateInBackground Lấy mô hình cục bộ từ thiết bị và bắt đầu cập nhật mô hình ở chế độ nền. Nếu không có mô hình cục bộ, thì hành vi này giống như latestModel.
latestModel Lấy mô hình mới nhất. Nếu mô hình cục bộ là phiên bản mới nhất, thì sẽ trả về mô hình cục bộ. Nếu không, hãy tải mô hình mới nhất xuống. Hành vi này sẽ chặn cho đến khi phiên bản mới nhất được tải xuống (không nên dùng). Chỉ sử dụng hành vi này trong trường hợp bạn cần phiên bản mới nhất một cách rõ ràng.

Bạn nên tắt chức năng liên quan đến mô hình (ví dụ: làm mờ hoặc ẩn một phần giao diện người dùng) cho đến khi xác nhận mô hình đã được tải xuống.

FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.

      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;

      // ...
    });

Nhiều ứng dụng bắt đầu tác vụ tải xuống trong mã khởi tạo, nhưng bạn có thể thực hiện việc này bất cứ lúc nào trước khi cần sử dụng mô hình.

3. Thực hiện suy luận trên dữ liệu đầu vào

Giờ đây, khi đã có tệp mô hình trên thiết bị, bạn có thể sử dụng tệp đó với trình thông dịch TensorFlow Lite để thực hiện suy luận. Khi không có thư viện TensorFlow Lite được duy trì cho Dart, bạn sẽ cần tích hợp với các thư viện TensorFlow Lite gốc cho iOS và Android.

Phụ lục: Bảo mật mô hình

Bất kể bạn cung cấp mô hình TensorFlow Lite cho Firebase ML như thế nào, Firebase ML đều lưu trữ các mô hình đó ở định dạng protobuf được tuần tự hoá tiêu chuẩn trong bộ nhớ cục bộ.

Về lý thuyết, điều này có nghĩa là bất kỳ ai cũng có thể sao chép mô hình của bạn. Tuy nhiên, trên thực tế, hầu hết các mô hình đều dành riêng cho ứng dụng và bị làm xáo trộn bởi các hoạt động tối ưu hoá. Do đó, rủi ro tương tự như việc đối thủ cạnh tranh tháo rời và sử dụng lại mã của bạn. Tuy nhiên, bạn nên biết về rủi ro này trước khi sử dụng mô hình tuỳ chỉnh trong ứng dụng.