Site icon TAPIT

Hướng dẫn nhúng mô hình học sâu nhận diện âm thanh lên vi điều khiển STM32

Trí tuệ nhân tạo đang trở thành một xu hướng phát triển mới nổi bật trong mảng thiết bị nhúng và IoT (máy tính nhúng, vi điều khiển trong hệ thống nhúng, sản phẩm IoT). Điều này được thể hiện rõ ràng qua các thiết bị, sản phẩm như camera an ninh, hệ thống xử lý các cảm biến trên ôtô, máy bay không người lái, cảm biến thông minh… Và để nhúng được các mô hình học sâu, trí tuệ nhân tạo vốn chỉ có thể chạy trên các hệ thống máy tính đồ sộ hoặc ít nhất là trên các máy tính cá nhân lên thiết bị vi điều khiển thì một thuật ngữ là “Edge AI” ra đời. Edge AI đơn giản là chỉ các mô hình AI được tối ưu hoá để có thể chạy trực tiếp trên các thiết bị đầu cuối (vòng đeo tay, điện thoại thông minh, máy tính nhúng,…). Từ Edge ở đây là chỉ các thiết bị gần với người dùng hơn có khả năng xử lý mô hình AI trực tiếp trên bộ xử lý của thiết bị thay vì phải gửi dữ liệu về một máy chủ để xử lý rồi trả kết quả về. Điều này cho phép xử lý được mô hình AI trong thời gian thực.

Đối với hãng STMicroelectronics, một công ty thiết kế và sản xuất dòng chip vi điều khiển STM32 nổi tiếng. STM32 có những đặc tính phù hợp để chạy Edge AI như hiệu năng cao (so với các dòng vi điều khiển nhúng khác), năng lượng tiêu thụ thấp, số lượng ngoại vi phong phú cho phép giao tiếp đọc nhiều loại cảm biến,… Và hãng STMicroelectronics trong những năm gần đây đã liên tục cho ra các phiên bản X-CUBE-AI mới. Đây là một gói phần mềm giúp việc triển khai mô hình học sâu trên vi điều khiển một cách vô cùng dễ dàng.

Trong bài viết này, mình sẽ chỉ thực hiện hướng dẫn các bước để nhúng một mô hình học sâu (thường có đuôi .h5, .tflite) xuống các kit phát triển STM32 để nhận diện âm thanh. Các bước hướng dẫn, giới thiệu về các quy trình tiền xử lý âm thanh để huấn luyện hay các bước để huấn luyện mô hình học sâu, mời mọi người tham khảo phần tham khảo mục [3][4].

Tham khảo

Chuẩn bị

Hướng dẫn
Trước khi thực hiện các bước dưới, hãy đọc các phần tham khảo bên trên để nắm các bước cơ bản trong tạo project, đọc ngoại vi, …

1. Khởi tạo Project với gói phần mềm X-CUBE-AI

Hình 1: Giao diện cấu hình để sinh code

Hình 2: Kích hoạt Serial Wire để debug thông qua ST-Link

Hình 3: Chọn và tải gói phần mềm X-CUBE-AI

Hình 4: Giao diện tạo một mạng nơron mới

Hình 5: Chọn mô hình và các tham số hiệu chỉnh cho mô hình

Hình 6: Thư mục X-CUBE-AI chứa các tham số và phép tính

2. Chỉnh sửa cấu hình clock và ngoại vi ADC cho việc thu âm thanh

Điện áp làm việc (V) 3.3
Dòng tiêu thụ (uA) 250
Băng thông -3dB (đối với tín hiệu âm thanh, không phải đối với tần số lấy mẫu) 100Hz đến 15KHz


Hình 7: Cấu hình tần số hoạt động

Hình 8: cấu hình kênh và DMA cho ngoại vi ADC

Hình 9: Cấu hình chia tần số và chế độ hoạt động cho ngoại vi ADC

3. Cài đặt các thư viện

Hình 10: Cấu trúc cây thư mục Project sau khi thêm tất cả các thư viện

Hình 11: Thiết lập trong thẻ Includes

Hình 12: Thiết lập trong thẻ Symbol

Hình 13: Thiết lập trong thẻ Libraries

Hình 14: Thiết lập trong thẻ Library Paths

Hình 15: Kiểm tra đường dẫn thư viện trong mục C/C++ Build/Setting

Hình 16: Thiết lập bộ FPU trong mục MCU Settings

4. Nhúng mô hình AI

Hình 17: Cấu hình các hàm được sinh ra khi bấm sinh code

Hình 18: Kết quả đầu ra sau một lần khi nhận diện

5. Kết luận

Với sự hỗ trợ của gói phần mềm X-CUBE-AI đến từ hãng STMicroelectronics thì việc triển khai một mạng nơron trên các dòng VĐK STM32 rõ ràng không phải điều quá khó. Điều quan trọng ở việc nhúng mô hình học sâu vào các dòng vi điều khiển với hiệu năng và bộ nhớ hạn chế là việc tối ưu, cân bằng giữa hiệu năng, bộ nhớ và độ chính xác.

Và thậm chí nếu dựa vào một số tham số khi chuyển đổi các mô hình học sâu sang c-model thì ta còn thấy được tiềm năng xử lý các mô hình học sâu ở thời gian thực. Ví dụ khi ta nhìn ở giao diện CubeMX, ta có thể thấy được một tham số là “Complexity: <…> MACC” thì đây chính là tham số chỉ độ phức tạp của mô hình (dựa trên số lớp và số tham số cũng như số phép tính phải làm ở các lớp của mô hình học sâu). Dựa trên tài liệu tham khảo [10] mục 4.5.1, ta thấy 1 MACC cần khoảng 6 chu kì máy đối với dòng Cortex-M7 và khoảng 9 chu kì máy đối với dòng Cortex-M4/M33. Từ đây ta tính được tốc độ khi thực thi mô hình như sau:

Tần số CPU (MHz) 184.5
Độ phức tạp (MACC) 6276960
Số chu kì máy/MACC 6
Thời gian thực thi (s) 0.2

Chưa kể, cả chương trình trên chỉ chiếm 48.07% RAM (trên tổng 320KB) và 26.38% FLASH (trên tổng 1024KB) của kit STM32F746-DISCOVERY, điều này cho phép chúng ta mở rộng firmware cho nhiều tác vụ khác và cả việc update mô hình/firmware mới từ xa.
Chúc các bạn thành công và đón chờ các bài viết khác liên quan đến Edge AI trên STM32! 


Nhóm nghiên cứu EdgeAI
Ng.Q.Phuong, T.T.M.Duyen, H.V.Thach