7.1. Mạng nơ-ron là gì¶
Một mạng nơ-ron là một thuật toán có hành vi được học từ các ví dụ thay vì được lập trình thủ công. Cùng một kiến trúc mạng, khi nhận một triệu ảnh khuôn mặt, sẽ học cách phát hiện khuôn mặt. Cùng kiến trúc đó, khi nhận một triệu ảnh bàn tay, sẽ học cách phát hiện bàn tay. Cùng kiến trúc đó, khi nhận một tập dữ liệu có nhãn bao gồm nhiều danh mục đối tượng, sẽ học cách phát hiện tất cả chúng cùng một lúc. Chỉ có các trọng số thay đổi giữa các mục tiêu, và các trọng số được tạo ra bởi một quá trình huấn luyện ngoại vi theo dõi các dự đoán của mạng so với các ví dụ có nhãn và điều chỉnh các trọng số cho đến khi chúng khớp nhau.
7.1.1. Cơ chế hoạt động¶
Một mạng nơ-ron là một chồng các lớp. Mỗi lớp nhân đầu ra của lớp trước với một ma trận trọng số, cộng thêm một vector độ lệch, và áp dụng một hàm phi tuyến lên kết quả. Đầu ra của một lớp là đầu vào cho lớp tiếp theo. Một ảnh chụp đi vào đỉnh của chồng lớp, chảy xuống qua hàng chục hoặc hàng trăm lớp, và xuất hiện ở đáy dưới dạng một tensor có các phần tử mô tả nội dung của ảnh.
Điều mà các trọng số của mỗi lớp thực hiện phụ thuộc vào dữ liệu mà mạng được huấn luyện. Ma trận trọng số ở lớp đầu trong một mạng thị giác có thể phản ứng với một cạnh ngang ngắn; một lớp sâu hơn một chút có thể phản ứng với một góc; một lớp sâu hơn nữa có thể phản ứng với hình dạng mắt tròn; các lớp sâu nhất có thể phản ứng với toàn bộ cấu trúc khuôn mặt. Không có gì trong số này được viết thủ công. Quá trình huấn luyện lặp qua hàng triệu ví dụ có nhãn, điều chỉnh các trọng số theo chiều giảm của hàm mất mát, và hệ thống phân cấp từ cạnh đến góc đến mắt đến khuôn mặt đã xuất hiện từ dữ liệu.
Một mạng phân loại nhỏ dưới dạng chồng các lớp. Tensor đầu vào đi vào từ trên cùng với hình dạng của ảnh chụp và chảy xuống qua các lớp, mỗi lớp biến đổi kích thước của tensor. Tensor đầu ra ở dưới cùng có một phần tử cho mỗi lớp. Các mạng phát hiện và điểm đặc trưng có cùng dạng chồng lớp; chỉ có cách giải thích tensor đầu ra thay đổi.¶
Kiến trúc của mạng -- cách các lớp được sắp xếp, các phép toán nào kết nối chúng -- là những gì mạng có thể thực hiện. Các trọng số là những gì mạng đã học được. Phần của camera trong quá trình này là tải tệp trọng số được tạo ra bởi quá trình huấn luyện và thực hiện các phép tính toán học mà bộ huấn luyện đã thực hiện, nhưng trên khung hình được chụp thay vì tập dữ liệu huấn luyện.
7.1.2. Dữ liệu đầu vào và đầu ra¶
Cả hai đầu của mạng đều là các tensor -- mảng nhiều chiều của các con số, cùng loại đối tượng mà chương numpy vừa giới thiệu. Tensor đầu vào cho một mạng thị giác là ảnh chụp được sắp xếp lại thành bố cục mà mạng mong đợi: thường là hình dạng 4-tuple (B, H, W, C) trong đó B là chiều batch (luôn là 1 trên camera, vì một khung hình được xử lý mỗi lần), H và W là chiều cao và chiều rộng điểm ảnh mà mạng mong đợi, và C là số lượng kênh (3 cho mạng RGB, 1 cho thang xám).
Tensor đầu ra phụ thuộc vào mục đích của mạng:
Một mạng phân loại tạo ra một tensor 1-D gồm các điểm số tin cậy, một điểm cho mỗi lớp. Chỉ số của điểm số lớn nhất là lớp được dự đoán. Bộ phát hiện người dựa trên MobileNet được tích hợp sẵn trên hầu hết các camera có dạng này: hai điểm số, một cho "person", một cho "not person".
Một mạng phát hiện tạo ra một tensor 2-D có các phần tử mô tả danh sách các hộp giới hạn cộng với xác suất lớp. YOLOv8 có dạng này: một tensor
(84, N)trong đó 4 trong số 84 hàng là các giá trị hồi quy hộp và 80 hàng còn lại là xác suất theo từng lớp, lặp lại trênNvị trí neo.Một mạng điểm đặc trưng tạo ra một tensor có các phần tử là vị trí điểm ảnh của các mốc được đặt tên. Mô hình face-landmarks của MediaPipe có dạng này: 468 điểm đặc trưng cho mỗi khuôn mặt được phát hiện.
Một mạng phân vùng tạo ra một tensor 2-D có các phần tử là nhãn lớp theo từng điểm ảnh -- cùng kích thước với đầu vào, với chỉ số danh mục ở mỗi vị trí.
Một mạng hồi quy tạo ra một số đơn lẻ hoặc một vector số ngắn -- ước tính độ sâu, một góc, một nhiệt độ.
Mỗi dạng có bộ xử lý hậu kỳ riêng trên camera để chuyển đổi tensor đầu ra thô trở lại thành dạng kết quả mà phần còn lại của ứng dụng sử dụng -- hộp giới hạn, danh sách điểm đặc trưng, nhãn lớp, ước tính số. Bộ xử lý hậu kỳ là mã phía ứng dụng biết bố cục đầu ra của mạng; bản thân mạng chỉ là các phép tính toán học tạo ra tensor.
7.1.3. Tại sao hoạt động được trên camera¶
Hai kỹ thuật toán học làm cho điều này thực tế cho các thiết bị cấp vi điều khiển. Đầu tiên là lượng tử hóa. Quá trình huấn luyện diễn ra bằng số học dấu phẩy động 32-bit; suy luận có thể chạy bằng số học số nguyên 8-bit với gần như không có mất mát độ chính xác đối với hầu hết các mạng. Trọng số 8-bit chiếm một phần tư dung lượng lưu trữ và chạy nhanh hơn vài lần so với số dấu phẩy động 32-bit. Mỗi mô hình đi kèm với camera đã được lượng tử hóa ngoại vi.
Kỹ thuật thứ hai là tăng tốc phần cứng. Các phép tính toán học mà CPU của vi điều khiển xử lý từng lệnh một, một bộ tăng tốc mạng nơ-ron chạy hàng trăm phép toán cùng lúc. Các camera mới hơn (AE3 và N6) tích hợp bộ xử lý nơ-ron (NPU) chuyên dụng -- một bộ tăng tốc tensor trên SoC -- biến một mô hình mà trước đây mất một giây để chạy trên CPU thành một mô hình chạy trong vài chục mili giây. Chương về các engine suy luận đề cập đến cách camera xử lý điều này.
7.1.4. Nội dung của chương¶
Huấn luyện không phải là công việc của camera. Một mô hình đã được huấn luyện đến camera dưới dạng tệp .tflite; camera tải nó, chạy mỗi khung hình được chụp qua nó, và giải mã tensor kết quả thành một kết quả mà ứng dụng có thể xử lý. Tất cả những gì tiếp theo là về từng bước trong số những bước đó:
tải và kiểm tra một mô hình;
phân vùng flash nơi lưu trữ các tệp mô hình;
bốn giai đoạn của một lệnh gọi suy luận;
các engine thực sự thực hiện các phép tính toán học;
và các bộ xử lý hậu kỳ chuyển đổi tensor đầu ra trở lại thành danh sách các hộp, điểm đặc trưng, hoặc các lớp.
Các bộ phát hiện trong chương ảnh mỗi cái được giới hạn cho một mục tiêu cụ thể. Những cái mà phần còn lại của chương này đề cập được huấn luyện từ dữ liệu, với cùng engine chạy bất kỳ mô hình nào mà tập lệnh tải. Sự thay đổi quy trình đi kèm với chúng -- một thuật toán dành riêng cho mục tiêu được thay thế bằng một tệp trọng số dành riêng cho mục tiêu -- là điều tiếp theo cần nêu bật.