Tạo một mô hình tuỳ chỉnh cho thuật toán phân loại hình ảnh

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 dành cho Android và iOS có sử dụng mô hình gắn nhãn hình ảnh cơ bản giúp nhận dạng hàng trăm lớp hình ảnh. Nó nhận ra hình ảnh của một bông hoa rất chung chung: nhìn thấy cánh hoa, hoa, cây cối và bầu trời.

Ví dụ: để cập nhật ứng dụng để nhận dạng các loại hoa, hoa cúc hoặc hoa hồng cụ thể, 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ề mỗi loại hoa mà bạn muốn nhận ra.

Đ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.

Sản phẩm bạn sẽ xây dựng và học hỏi

  • Cách huấn luyện mô hình tuỳ chỉnh của 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ì có thể hoàn tất mọi thứ bằng cách sử dụng Google Colab trong trình duyệt.

2. Bắt đầu

Tất cả mã cần thực hiện đã được chuẩn bị cho bạn và bạn 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ữ đó rồi sử dụng sổ tay có tên là CustomImageClassifierModel.ipynb trong thư mục ImageClassificationMobile->colab.

Nếu có nhiều ví dụ về các 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 ra chúng.

Cách dễ nhất để thực hiện việc này là tạo một tệp .zip hoặc .tgz chứa hình ảnh, được sắp xếp thành thư mục. Ví dụ: nếu bạn sử dụng hình ảnh của hoa cúc, 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:

4ee12554e75b103f.png.

Hãy nén và lưu trữ tệp đó trên máy chủ, bạn sẽ có thể huấn luyện các mô hình bằng mã này. Bạn sẽ sử dụng mã mà chúng tôi đã chuẩn bị cho trong phần còn lại của phòng thí nghiệm này.

Phòng thí nghiệm này sẽ 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, ít nhất là TensorFlow.

3. Cài đặt và nhập phần phụ thuộc

  1. Cài đặt Trình tạo mô hình TensorFlow Lite. Bạn có thể thực hiện việc này bằng cách cài đặt pip. Phần &> /dev/null at the end just suppresses the output. Trình tạo mô hình cho ra nhiều nội dung không liên quan ngay lập tức. Tính năng này đã bị chặn nên bạn có thể tập trung vào nhiệm vụ đang thực hiện.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. Tiếp theo, bạn cần nhập các thư viện cần 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ắt đầu tạo mô hình của bạn!

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 thư mục và các thư mục đó được nén, thì nếu bạn tải tệp zip xuống và giải nén tệp đó, 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 chúng. 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 đó, đường dẫn dữ liệu này có thể được tải vào mô hình mạng nơron để huấn luyện bằng lớp ImageClassifierDataLoader của Trình tạo mô hình TensorFlow Lite. Chỉ cần trỏ điện thoại vào thư mục là xong.

Một yếu tố quan trọng trong các mô hình huấn luyện 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 cho hoạt động huấn luyện. Hãy chờ một chút để thử nghiệm mô hình bằng dữ liệu chưa từng thấy trước đây. Việc này rất dễ thực hiện bằng phương thức phân tách tập dữ liệu lấy từ ImageClassifierDataLoader. Bằng cách chuyển 0, 9 vào đó, bạn sẽ nhận được 90% dữ liệu làm dữ liệu huấn luyện và 10% là dữ liệu kiểm tra của mình:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

Bây giờ, dữ liệu của bạn đã được chuẩn bị, bạn có thể tạo mô hình bằng dữ liệu đó.

5. Tạo mô hình phân loại hình ảnh

Model Maker tóm tắt rất nhiều chi tiết cụ thể về việc thiết kế mạng nơron, vì vậy, bạn không phải xử lý thiết kế mạng và những thứ như tích chập, dày đặc, relu, làm phẳng, hàm mấ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ã duy nhất để tạo mô hình bằng cách huấn luyện một mạng nơron với dữ liệu được cung cấp:

model = image_classifier.create(train_data)

Khi chạy tác vụ 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 là minh hoạ cấu trúc mô hình. Những gì Model Maker đang làm sẽ được gọi là Học chuyển, sử dụng mô hình luyện sẵn hiện có làm điểm khởi đầu và 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 mã này trong dòng đầu tiên có nội dung:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

Khoá là từ "Hub", cho chúng ta biết rằng mô hình này đến từ TensorFlow Hub. Theo mặc định, Trình tạo mô hình TensorFlow Lite sử dụng một mô hình có tên là "MobileNet" được thiết kế để nhận dạng 1000 loại hình ảnh. Logic ở đây là phương pháp mà nó sử dụng, bằng cách tìm hiểu các "tính năng" để phân biệt giữa 1000 lớp, có thể được sử dụng lại. Cùng một ‘tính năng’ có thể được liên kết với 5 lớp hoa của chúng tôi, nên bạn không cần phải học từ đầu.

Mô hình này đã trải qua 5 khoảng thời gian bắt đầu của hệ thống – trong đó một khoảng thời gian bắt đầu là một chu kỳ huấn luyện đầy đủ, trong đó mạng nơron cố gắng khớp các hình ảnh với nhãn của chúng. Khi nó trải qua 5 thời gian bắt đầu, trong khoảng 1 phút, nó chính xác 93,85% về dữ liệu huấn luyện. Vì có 5 lớp, nên một phỏng đoán ngẫu nhiên sẽ chính xác 20%, vì vậy đó là tiến trình! (Ứng dụng này cũng báo cáo số liệu "mất" nhưng tạm thời bạn sẽ bỏ qua số đó một cách an toàn.)

Trước đó, bạn đã chia dữ liệu thành dữ liệu huấn luyện và kiểm thử, để bạn có thể có được thước đo hiệu suất của mạng trên dữ liệu chưa từng thấy trước đây – một chỉ báo rõ hơn về hiệu suất của mạng trong thực tế bằng cách sử dụng model.evaluate trên dữ liệu kiểm thử:

loss, accuracy = model.evaluate(test_data)

Kết quả sẽ có dạng như sau:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

Vui lòng lưu ý độ chính xác tại đây. Đó là 88,01%, vì vậy, việc sử dụng mô hình mặc định trong thế giới thực sẽ mong đợi mức độ chính xác đó. Như vậy là 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 là bạn có thể điều chỉnh rất nhiều để cải thiện mô hình này và đó cũng là một kiến thức khoa học!

6. Xuất Mô hình

Giờ đây, 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 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 dữ liệu sang.

Đây là mã:

model.export(export_dir='/mm_flowers')

Nếu đang chạy công cụ này trong Google Colab, thì bạn có thể xem mô hình này bằng cách nhấp vào biểu tượng thư mục ở bên trái màn hình:

cc5b9988775633b4.png

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

51e6ac47c992142a.png.

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

57bad87f294fd189.pngS

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

aee14ad10c4a8a1a.png

Sau vài phút, mô hình của bạn sẽ được tải xuống thư mục tệp đã tải xuống.

7. Xin chúc mừng

Bây giờ, bạn đã sẵn sàng tích hợp hệ thống này vào ứng dụng di động! Bạn sẽ làm việc đó trong phòng thí nghiệm tiếp theo.