1. Trước khi bắt đầu
Trong lớp học lập trình trước, bạn đã tạo một ứng dụng cho Android và iOS bằng cách sử dụng một mô hình gắn nhãn hình ảnh cơ bản có thể nhận dạng hàng trăm lớp hình ảnh. Công cụ này nhận dạng một bức ảnh hoa theo cách rất chung chung – nhìn thấy cánh hoa, bông hoa, cây và bầu trời.
Để cập nhật ứng dụng nhằm nhận dạng các loài hoa cụ thể, chẳng hạn như hoa cúc hoặc hoa hồng, bạn sẽ cần một mô hình tuỳ chỉnh được huấn luyện dựa trên nhiều ví dụ về từng loại hoa mà bạn muốn nhận dạng.
Điều kiện tiên quyết
- Lớp học lập trình trước trong lộ trình học tập này.
Những gì bạn sẽ tạo và học được
- Cách huấn luyện mô hình tuỳ chỉnh Trình phân loại hình ảnh bằng Trình tạo mô hình TensorFlow Lite.
Bạn cần có
- Bạn không cần phần cứng cụ thể nào, vì mọi việc đều có thể hoàn tất bằng Google Colab trong trình duyệt.
2. Bắt đầu
Tất cả mã để làm theo đều đã được chuẩn bị sẵn cho bạn và có thể thực thi bằng Google Colab tại đây. Nếu không có quyền truy cập vào Google Colab, bạn có thể sao chép kho lưu trữ và sử dụng sổ tay có tên CustomImageClassifierModel.ipynb trong thư mục ImageClassificationMobile->colab.
Nếu có nhiều ví dụ về một số loài hoa cụ thể, bạn có thể dễ dàng huấn luyện một mô hình bằng Trình tạo mô hình TensorFlow Lite để nhận dạng các loài hoa đó.
Cách dễ nhất để làm việc này là tạo một tệp .zip hoặc .tgz chứa các hình ảnh được sắp xếp vào các thư mục. Ví dụ: nếu sử dụng hình ảnh hoa cúc, hoa bồ công anh, hoa hồng, hoa hướng dương và hoa tulip, bạn có thể sắp xếp chúng vào các thư mục như sau:

Hãy nén tệp đó và lưu trữ trên một máy chủ, sau đó bạn có thể dùng tệp đó để huấn luyện các mô hình. Bạn sẽ sử dụng một tệp đã được chuẩn bị sẵn cho bạn trong phần còn lại của lớp học này.
Phòng thí nghiệm này giả định rằng bạn đang sử dụng Google Colab để huấn luyện mô hình. Bạn có thể tìm thấy Colab tại colab.research.google.com. Nếu đang sử dụng một môi trường khác, bạn có thể phải cài đặt nhiều phần phụ thuộc, trong đó có TensorFlow.
3. Cài đặt và nhập các phần phụ thuộc
- Cài đặt TensorFlow Lite Model Maker. Bạn có thể thực hiện việc này bằng lệnh pip install. &> /dev/null ở cuối chỉ chặn đầu ra. Model Maker tạo ra nhiều nội dung không liên quan ngay lập tức. Thông báo này đã bị tắt để bạn có thể tập trung vào việc đang cần làm.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- Tiếp theo, bạn cần nhập các thư viện mà bạn cần sử dụng và đảm bảo rằng bạn đang sử dụng TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
Bây giờ môi trường đã sẵn sàng, đã đến lúc bạn bắt đầu tạo mô hình!
4. Tải xuống và chuẩn bị dữ liệu
Nếu hình ảnh của bạn được sắp xếp thành các thư mục và những thư mục đó được nén, thì khi tải tệp nén xuống và giải nén, bạn sẽ tự động nhận được hình ảnh được gắn nhãn dựa trên thư mục chứa hình ảnh đó. Thư mục này sẽ được tham chiếu là data_path.
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
Sau đó, bạn có thể tải đường dẫn dữ liệu này vào một mô hình mạng nơ-ron để huấn luyện bằng lớp ImageClassifierDataLoader của TensorFlow Lite Model Maker. Bạn chỉ cần hướng camera vào thư mục đó là xong.
Một yếu tố quan trọng trong việc huấn luyện mô hình bằng công nghệ học máy là không sử dụng tất cả dữ liệu của bạn để huấn luyện. Giữ lại một chút để kiểm thử mô hình bằng dữ liệu mà mô hình chưa từng thấy trước đây. Bạn có thể dễ dàng thực hiện việc này bằng phương thức phân chia của tập dữ liệu được trả về từ ImageClassifierDataLoader. Bằng cách truyền 0, 9 vào hàm này, bạn sẽ nhận được 90% dữ liệu làm dữ liệu huấn luyện và 10% làm dữ liệu kiểm thử:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Bây giờ, sau khi chuẩn bị dữ liệu, bạn có thể tạo một mô hình bằng dữ liệu đó.
5. Tạo Mô hình phân loại hình ảnh
Model Maker trừu tượng hoá nhiều thông tin cụ thể về việc thiết kế mạng nơ-ron để bạn không phải xử lý thiết kế mạng, cũng như những thứ như tích chập, dày đặc, relu, làm phẳng, hàm tổn thất và trình tối ưu hoá. Đối với mô hình mặc định, bạn chỉ cần sử dụng một dòng mã để tạo mô hình bằng cách huấn luyện mạng nơ-ron với dữ liệu được cung cấp:
model = image_classifier.create(train_data)
Khi chạy lệnh này, bạn sẽ thấy kết quả có dạng như sau:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
Phần đầu tiên cho thấy cấu trúc mô hình của bạn. Những gì Model Maker đang làm ở chế độ nền được gọi là Học chuyển giao. Quá trình này sử dụng một mô hình được huấn luyện tiền kỳ làm điểm xuất phát, chỉ lấy những điều mà mô hình đó đã học được về cách tạo hình ảnh và áp dụng chúng để hiểu 5 loài hoa này. Bạn có thể thấy thông tin này ở dòng đầu tiên có nội dung:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
Điểm mấu chốt là từ "Hub", cho chúng ta biết rằng mô hình này đến từ TensorFlow Hub. Theo mặc định, TensorFlow Lite Model Maker sử dụng một mô hình có tên là "MobileNet", được thiết kế để nhận dạng 1.000 loại hình ảnh. Logic ở đây là phương pháp mà mô hình sử dụng (bằng cách học "các đặc điểm" để phân biệt giữa 1.000 lớp) có thể được dùng lại. Bạn có thể liên kết các "đặc điểm" tương tự với 5 loại hoa của chúng ta, vì vậy, bạn không cần phải học từ đầu.
Mô hình này đã trải qua 5 giai đoạn (một giai đoạn là một chu kỳ đào tạo đầy đủ, trong đó mạng nơ-ron cố gắng so khớp hình ảnh với nhãn của chúng). Sau 5 giai đoạn (khoảng 1 phút), độ chính xác của mô hình trên dữ liệu huấn luyện là 93, 85%. Vì có 5 lớp, nên một dự đoán ngẫu nhiên sẽ có độ chính xác là 20%, vậy là có tiến bộ! (Thao tác này cũng báo cáo số "thua", nhưng hiện tại bạn có thể bỏ qua số đó.)
Trước đó, bạn đã chia dữ liệu thành dữ liệu huấn luyện và dữ liệu kiểm thử, vì vậy, bạn có thể đánh giá hiệu suất của mạng trên dữ liệu mà mạng chưa từng thấy trước đây – một chỉ báo chính xác hơn về hiệu suất của mạng trong thế giới thực bằng cách sử dụng model.evaluate trên dữ liệu kiểm thử:
loss, accuracy = model.evaluate(test_data)
Thao tác này sẽ xuất ra nội dung như sau:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Lưu ý độ chính xác tại đây. Độ chính xác là 88,01%, vì vậy, khi sử dụng mô hình mặc định trong thực tế, bạn có thể kỳ vọng độ chính xác ở mức này. Đó là một kết quả không tệ đối với mô hình mặc định mà bạn đã huấn luyện trong khoảng một phút. Tất nhiên, bạn có thể điều chỉnh nhiều để cải thiện mô hình và đó là một khoa học riêng!
6. Xuất mô hình
Giờ đây, khi mô hình đã được huấn luyện, bước tiếp theo là xuất mô hình ở định dạng .tflite mà ứng dụng di động có thể sử dụng. Trình tạo mô hình cung cấp một phương thức xuất dễ dàng mà bạn có thể sử dụng – chỉ cần chỉ định thư mục để xuất.
Đây là mã:
model.export(export_dir='/mm_flowers')
Nếu đang chạy chương trình này trong Google Colab, bạn có thể xem mô hình bằng cách nhấp vào biểu tượng thư mục ở bên trái màn hình:

Tại đây, bạn sẽ thấy danh sách thư mục hiện tại. Sử dụng nút được chỉ định để di chuyển "lên" một thư mục:

Trong mã của bạn, bạn đã chỉ định xuất sang thư mục mm_flowers. Mở thư mục đó, bạn sẽ thấy một tệp có tên là "model.tflite". Đây là mô hình đã được huấn luyện của bạn.

Chọn tệp và bạn sẽ thấy 3 dấu chấm xuất hiện ở bên phải. Nhấp vào các biểu tượng này để mở trình đơn theo bối cảnh, sau đó bạn có thể tải mô hình xuống từ đó.

Sau vài phút, mô hình của bạn sẽ được tải xuống thư mục tải xuống.
7. Xin chúc mừng
Giờ đây, bạn đã sẵn sàng tích hợp tính năng này vào ứng dụng di động của mình! Bạn sẽ thực hiện việc đó trong phòng thí nghiệm tiếp theo.