7.6. Giải phẫu của predict¶
Model.predict(inputs, *, callback=None) là nơi đối tượng mô hình (ML) đã tải thực sự thực hiện công việc. Giữa lúc đầu vào được đưa vào và kết quả được trả ra, ba giai đoạn chạy tuần tự: tiền xử lý, điều phối engine, hậu xử lý. Hai trong ba giai đoạn nhận các tham số mà tập lệnh kiểm soát trực tiếp; engine ở giữa được quyết định bởi camera.
Ba giai đoạn của predict(). Tiền xử lý và hậu xử lý nhận các tham số mà tập lệnh kiểm soát; engine ở giữa được cố định bởi camera.¶
7.6.1. Tiền xử lý¶
Giai đoạn tiền xử lý chuyển từng đầu vào thành tensor dày đặc mà mạng nơ-ron mong đợi. Đầu vào phổ biến nhất là image.Image, được chụp ở định dạng RGB565. Giai đoạn này cắt xén và thay đổi kích thước ảnh theo input_shape của mạng nơ-ron, chuyển đổi từ RGB565 sang định dạng kênh mà mạng nơ-ron được huấn luyện (RGB888 cho hầu hết các mạng thị giác), áp dụng tỷ lệ và độ lệch theo từng kênh, và -- khi mạng nơ-ron mong đợi đầu vào số nguyên -- lượng tử hóa sang input_dtype của mô hình (ML) trong cùng một bước. Các mạng nơ-ron được huấn luyện cho đầu vào float bỏ qua bước lượng tử hóa và nhận trực tiếp kết quả tỷ lệ và độ lệch.
Mặc định ml.preprocessing.Normalization đọc dtype đầu vào của mô hình (ML) và tự động chạy phép biến đổi phù hợp. Một Normalization được tinh chỉnh thủ công sẽ ghi đè các giá trị tỷ lệ, trung bình và độ lệch chuẩn cho các mô hình (ML) được huấn luyện trên thống kê kênh tùy chỉnh (các giá trị trung bình và độ lệch chuẩn từ ImageNet là trường hợp phổ biến). Một callable thông thường sẽ ghi đè toàn bộ giai đoạn -- hữu ích khi đầu vào hoàn toàn không phải là ảnh hoặc khi ứng dụng đã tạo ra tensor dày đặc sẵn.
7.6.2. Điều phối engine¶
Giai đoạn engine chạy mạng nơ-ron. Engine nào được điều phối đến là cố định bởi camera: H7 và RT1062 chạy TFLM (trình thông dịch TensorFlow Lite for Microcontrollers, điều phối các kernel CMSIS-NN được tối ưu hóa cho ARM khi có); AE3 chạy cùng trình thông dịch TFLM với Cortex-M55 fallback và NPU Ethos-U xử lý các toán tử mà trình biên dịch Vela ngoại tuyến đã gán cho bộ tăng tốc; N6 chạy STAI, runtime của ST cho NPU chuyên dụng của N6.
Tập lệnh không chọn engine. Engine đi kèm với camera chạy mọi mô hình (ML) mà camera tải.
7.6.3. Hậu xử lý¶
Giai đoạn hậu xử lý chuyển các tensor đầu ra thô của mạng nơ-ron trở lại thành kết quả có thể sử dụng. Hành vi mặc định là giải lượng tử hóa từng tensor đầu ra sang dạng số thực dấu phẩy động (hoặc truyền qua không thay đổi đối với các mạng nơ-ron có đầu ra float) và trả về chúng dưới dạng danh sách các đối tượng ndarray. Hầu hết các ứng dụng đăng ký một bộ xử lý hậu kỳ -- một callable biết bố cục đầu ra của mạng nơ-ron -- để giải mã các tensor thành dạng kết quả mà ứng dụng xử lý: danh sách hộp giới hạn, danh sách điểm đặc trưng, danh sách lớp.
Tập lệnh kiểm soát giai đoạn này theo hai cách. Từ khóa postprocess= trên hàm khởi tạo đăng ký bộ xử lý hậu kỳ chạy trên mỗi lần gọi. Từ khóa callback= trên predict() ghi đè bộ xử lý hậu kỳ đã đăng ký chỉ cho một lần gọi -- hữu ích để chuyển đổi giữa nhiều bộ giải mã mà không cần tải lại mô hình (ML). Cả hai dạng đều nhận (model, inputs, outputs) và trả về bất kỳ giá trị nào ứng dụng mong đợi.
7.6.4. Những gì tập lệnh kiểm soát¶
Tiền xử lý và hậu xử lý là hai điểm kiểm soát của tập lệnh. Bộ tiền xử lý mặc định xử lý hầu hết các mô hình (ML) thị giác; bộ xử lý hậu kỳ phù hợp cho một họ mạng nơ-ron cụ thể được chọn từ danh mục trong ml.postprocessing. Engine ở giữa được quyết định bởi bản dựng và chạy theo cùng một cách bất kể tập lệnh yêu cầu gì.