Bối cảnh và vấn đề nghiên cứu

Sự bùng nổ của dữ liệu lớn (Big Data) cùng sự phát triển của các kỹ thuật học máy (Machine Learning) và học sâu (Deep Learning) đã tạo ra bước chuyển biến lớn trong các bài toán thị giác máy tính như nhận diện khuôn mặt, phát hiện đối tượng và phân loại hình ảnh. Trong các hệ thống xác minh và nhận diện khuôn mặt (Face Identification - FI), mạng neural tích chập (CNN) được sử dụng để trích xuất các vector đặc trưng (image embeddings) từ hình ảnh đầu vào. Sau giai đoạn trích xuất, hệ thống cần thực hiện so khớp vector đặc trưng của khuôn mặt cần tìm với tập dữ liệu hàng nghìn khuôn mặt mẫu trong cơ sở dữ liệu nhằm xác định danh tính dựa trên độ tương đồng Cosine (Cosine Similarity).

Tuy nhiên, việc triển khai các thuật toán xử lý luồng dữ liệu lớn đòi hỏi năng lực tính toán cao. Thông thường, các thuật toán học sâu được thực thi trên máy chủ (Server) cấu hình mạnh trang bị nhiều GPU. Khi triển khai tại các thiết bị biên (Edge devices) như camera giám sát thông minh, xe tự hành hay hệ thống nhúng điều khiển robot, các rào cản về năng lượng tiêu thụ, chi phí phần cứng và yêu cầu xử lý thời gian thực (real-time) trở thành thách thức kỹ thuật lớn. Nhằm giải quyết bài toán tính toán tốc độ cao với mức tiêu hao năng lượng và chi phí phần cứng thấp, đồ án tập trung nghiên cứu giải pháp tăng tốc phần cứng cho thuật toán tính độ tương đồng khuôn mặt trên nền tảng vi mạch khả lập trình FPGA (Field-Programmable Gate Array) kết hợp hệ thống trên chip SoC (System-on-Chip).

Mục tiêu và nhiệm vụ nghiên cứu của đề tài được xác định cụ thể như sau:

  1. Xây dựng hệ thống tìm kiếm khuôn mặt có khả năng thực hiện tính toán so khớp trên tập dữ liệu ít nhất 10.000 khuôn mặt dựa trên mô hình kết hợp giữa máy chủ và kit vi điều khiển SoC Zynq-7000.
  2. Thiết kế và hiện thực module phần cứng tính toán độ tương đồng Cosine Similarity trên định dạng số thực dấu chấm động 32-bit bằng ngôn ngữ Verilog HDL trên phần mềm Xilinx Vivado.
  3. Tích hợp module tính toán với lõi IP Xillybus để hiện thực cơ chế truyền nhận dữ liệu tốc độ cao qua DMA giữa phần cứng FPGA và hệ điều hành Linux nhúng (Xillinux) chạy trên lõi ARM của chip SoC.
  4. Xây dựng hệ thống hoàn chỉnh gồm 3 thành phần: Máy chủ trích xuất và lưu trữ dữ liệu đặc trưng hình ảnh (SQL Server), kit SoC Zynq-7000 tính toán so khớp phần cứng, và giao diện Web Interface nhận dữ liệu từ Camera/Internet để hiển thị kết quả.

Đối tượng nghiên cứu là kiến trúc phần cứng tính toán độ tương đồng Cosine và cơ chế giao tiếp DMA trên nền tảng SoC/FPGA. Phạm vi nghiên cứu giới hạn trong việc thiết kế RTL, kiểm tra mô phỏng qua Testbench và nạp thực nghiệm trên chip Xilinx Zynq-7000 (xc7z010clg400-1) tại Trường Đại học Công nghệ Thông tin - Đại học Quốc gia Thành phố Hồ Chí Minh vào năm 2023.


Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng trên các nền tảng lý thuyết và chuẩn kỹ thuật bao gồm:

  • Mạng neural tích chập (CNN) và xác minh khuôn mặt (FI): Sử dụng các tầng tích chập (Convolutional Layers), hàm kích hoạt phi tuyến (ReLU, tanh), các tầng gộp (Pooling) và tầng kết nối đầy đủ (Fully-Connected Layers) để ánh xạ hình ảnh khuôn mặt thành vector đặc trưng (embedding). Các mô hình CNN tiêu biểu được khảo cứu gồm LeNet, AlexNet, VGG-16, GoogleNet (Inception-V1), ResNet-50 và DenseNet.
  • Biểu diễn số dấu chấm động chuẩn IEEE 754: Sử dụng định dạng số thực dấu chấm động độ chính xác đơn (Single Precision 32-bit). Cấu trúc 32-bit gồm 1 bit dấu ($s$), 8 bit số mũ ($e$) đại diện cho độ lệch nguyên dương (bias) và 23 bit định trị ($f$) kết hợp bit ẩn chuẩn hóa ($b_0 = 1$) tạo thành phần phân số 24 bit. Giá trị được xác định theo công thức:

$$\text{Floating point value} = (-1)^s \times 2^E \times b_0.b_1b_2\dots b_{23}$$

  • Độ tương đồng Cosine (Cosine Similarity): Phép đo độ tương tự giữa hai vector đặc trưng khác không $A$ và $B$ trong không gian tích vô hướng theo công thức:

$$\text{similarity} = \cos(\theta) = \frac{A \cdot B}{|A| |B|} = \frac{\sum_{i=0}^{n-1} A_i B_i}{\sqrt{\sum_{i=0}^{n-1} A_i^2} \cdot \sqrt{\sum_{i=0}^{n-1} B_i^2}}$$

Phương pháp nghiên cứu thực nghiệm và thiết kế kỹ thuật được triển khai qua các bước:

  • Phương pháp mô hình hóa phần mềm: Xây dựng mô hình tính toán chuẩn (Golden Model) bằng ngôn ngữ Python để sinh dữ liệu kiểm thử ngẫu nhiên và tính toán trước giá trị độ tương đồng phục vụ đối sánh.
  • Phương pháp thiết kế phần cứng vi mạch: Thiết kế khối đường dữ liệu (Datapath) và khối điều khiển (Controller) bằng ngôn ngữ Verilog HDL; khai thác các lõi IP tính toán dấu chấm động (LogiCORE IP Floating-Point Operator của Xilinx) bao gồm phép cộng, nhân, căn bậc hai và phép chia.
  • Phương pháp xác minh và mô phỏng: Xây dựng môi trường Testbench trên Vivado để kiểm tra dạng sóng, xác minh độ chính xác của kết quả tính toán phần cứng với dữ liệu ngẫu nhiên (Random data) và tập vector trích xuất từ dữ liệu khuôn mặt thực tế (Real data).
  • Phương pháp tích hợp hệ thống nhúng SoC: Cấu hình Xillybus IP Core và trình điều khiển Xillinux để thiết lập các kênh truyền dữ liệu DMA đa luồng qua các khối FIFO bất đồng bộ giữa máy chủ và phần cứng FPGA.

Thiết kế và triển khai hệ thống phần cứng

Hệ thống tính toán Cosine Similarity trên FPGA được thiết kế theo kiến trúc nhân và tích lũy tuần tự (Multiply and Accumulate - MAC) tối ưu cho kiểu dữ liệu dấu chấm động 32-bit.

Cấu trúc và giao tiếp của module Cosine Similarity IP

Module nhận đầu vào là hai vector đặc trưng $A$ và $B$ có kích thước linh hoạt theo tham số size, các phần tử được đưa vào nối tiếp qua hai cổng 32-bit ina và inb.

Tên tín hiệu Hướng I/O Số bit Chức năng mô tả
valid_in Input 1 Tín hiệu báo dữ liệu đầu vào hợp lệ
ina Input 32 Giá trị phần tử vector A (định dạng IEEE 754 32-bit)
inb Input 32 Giá trị phần tử vector B (định dạng IEEE 754 32-bit)
size Input 32 Kích thước số lượng phần tử của hai vector
start Input 1 Xung tích cực 1 chu kỳ clock tại phần tử đầu tiên để bắt đầu tính toán
en Input 1 Tín hiệu cho phép module hoạt động
clk Input 1 Xung clock hệ thống kích hoạt cạnh lên
rst_n Input 1 Tín hiệu reset đồng bộ tích cực mức thấp
cosine_out Output 32 Giá trị độ tương đồng Cosine đầu ra (IEEE 754 32-bit)
cosine_done Output 1 Tín hiệu báo hoàn thành và dữ liệu đầu ra hợp lệ

Bên trong module Cosine IP bao gồm các khối chức năng chính:

  • Khối MAC (Multiply and Accumulate): Kết hợp khối nhân (MUL) và khối cộng tích lũy (ADD) dấu chấm động để tính tích vô hướng $\sum A_i B_i$.
  • Khối tính độ dài vector: Gồm các bộ nhân và cộng dồn để tính tổng bình phương $\sum A_i^2$ và $\sum B_i^2$, sau đó kết nối đến khối căn bậc hai (SQRT) để tính chuẩn $|A|$ và $|B|$.
  • Khối nhân mẫu số và chia kết quả: Khối MUL nhân hai độ dài $|A| \times |B|$, tiếp theo khối DIV thực hiện phép chia giữa tử số và mẫu số để xuất ra giá trị Cosine Similarity.
  • Khối trễ DFF (D Flip-Flop) & Khối Counter: Khối Counter hoạt động như một Controller giám sát chu kỳ xung clock dựa trên tham số size, kết hợp các tầng DFF cân bằng độ trễ (latency) của từng toán tử IP Core để kích hoạt tín hiệu cosine_done chính xác.

Cơ chế truyền dữ liệu DMA qua Xillybus IP Core

Giao tiếp giữa máy chủ và kit FPGA Zynq-7000 được hiện thực thông qua Xillybus IP Core dựa trên các tệp thiết bị dạng /dev/xillybus_* trên hệ điều hành Linux:

  • Luồng dữ liệu từ máy chủ xuống FPGA (Downstream): Ứng dụng phần mềm mở tệp thiết bị ghi (write_32), ghi dữ liệu vào các bộ đệm DMA buffer trên RAM máy chủ thông qua hàm write(). Khi DMA buffer đầy hoặc sau khoảng thời gian tự động xả 10 ms (autoflush), Xillybus IP Core tự động chuyển dữ liệu trực tiếp vào FIFO trên FPGA qua bus AXI mà không cần can thiệp của CPU.
  • Khối Frame Reader và đồng bộ miền xung clock: Do khối Cosine IP hoạt động ở tần số thấp hơn miền xung clock của Xillybus IP Core (100 MHz), khối Clock Generator được cấu hình để cấp xung riêng cho khối tính toán. Khối Frame Reader đóng vai trò giao tiếp giữa FIFO nhận dữ liệu và Cosine IP qua hai miền clock.
  • Luồng dữ liệu từ FPGA lên máy chủ (Upstream): Kết quả tính toán từ Cosine IP được đẩy vào FIFO bất đồng bộ. Xillybus IP Core quét tín hiệu rỗng (empty), thực hiện truyền DMA dữ liệu từ FIFO lên DMA buffer của máy chủ để ứng dụng phần mềm đọc kết quả qua lệnh hệ thống read().

Nội dung chính theo từng chương

Chương 1: Giới thiệu tổng quan đề tài

Chương 1 trình bày bối cảnh ứng dụng trí tuệ nhân tạo trong xử lý ảnh và thị giác máy tính. Tác giả phân tích nhu cầu triển khai các giải thuật máy học tại thiết bị biên với mức tiêu thụ năng lượng thấp và tốc độ xử lý cao. Đề tài xác định mục tiêu xây dựng hệ thống tìm kiếm khuôn mặt trên tập dữ liệu tối thiểu 10.000 khuôn mặt bằng cách phối hợp giữa máy chủ và chip SoC Zynq-7000, đồng thời vạch rõ quy trình 6 bước thực hiện từ mô hình hóa thuật toán đến tổng hợp phần cứng và thử nghiệm thực tế.

Chương 2: Cơ sở lý thuyết

Nội dung chương 2 tập trung vào 3 khối kiến thức nền tảng:

  1. Nguyên lý trích xuất đặc trưng của mạng CNN và mô hình nhận diện khuôn mặt (Face Identification).
  2. Chuẩn biểu diễn số thực dấu chấm động IEEE 754, cấu trúc các trường bit dấu ($s$), số mũ ($e$), định trị ($f$) ở định dạng độ chính xác đơn (32-bit) và độ chính xác kép (64-bit).
  3. Bản chất toán học của độ tương đồng Cosine Similarity trong không gian tích vô hướng, biểu diễn hình học của góc giữa hai vector và tương quan độ tương đồng từ 0% đến 100%.

Chương 3: Thiết kế phần cứng

Chương 3 mô tả chi tiết quá trình thiết kế phần cứng:

  • Thiết kế module tính toán Cosine Similarity sử dụng các IP Core dấu chấm động của Xilinx (Floating-Point Add, Mul, Sqrt, Div) đáp ứng độ chính xác 1 ULP (Unit in the Last Place).
  • Thiết kế khối MAC, bộ đếm Counter và xác định giao diện tín hiệu I/O của từng khối.
  • Xây dựng cấu trúc gói tin (packet) kiểm thử trong môi trường Testbench Vivado, tiến hành đối sánh với dữ liệu chuẩn từ Python. Kết quả mô phỏng trên tập dữ liệu ngẫu nhiên 5.000 packet đạt tỷ lệ chính xác 99,76% (Correct ratio: 99.76%).
  • Thiết kế kiến trúc truyền dữ liệu tốc độ cao giữa FPGA và máy chủ thông qua Xillybus IP Core, cấu hình các luồng DMA Upstream/Downstream, xử lý đồng bộ 2 miền xung clock qua module Frame Reader.

Chương 4: Kết quả khi triển khai trên FPGA

Chương 4 công bố các thông số thực nghiệm sau khi tổng hợp và nạp thiết kế lên board Zynq-7000 SoC (xc7z010clg400-1):

  • Thống kê tài nguyên phần cứng tiêu thụ của module Cosine IP trên chip.
  • Tần số hoạt động cực đại và thời gian thực thi đối với các kích thước vector khác nhau (128, 256, 512 phần tử).
  • Đánh giá năng lượng tiêu thụ trên chip và xác thực độ chính xác của kết quả tính toán giữa hai vector giống nhau và khác nhau.

Chương 5: Kết luận và hướng phát triển của đề tài

Chương cuối đúc kết các kết quả đạt được trong việc thiết kế module Cosine phần cứng và xây dựng đường truyền dữ liệu DMA hoàn chỉnh. Tác giả nêu rõ các khó khăn kỹ thuật liên quan đến việc xử lý trễ chu kỳ xung clock của các phép toán dấu chấm động và vấn đề chuyển miền xung clock, từ đó đề xuất các hướng mở rộng nhằm cải tiến hiệu năng hệ thống.


Kết quả và đóng góp

Kết quả định lượng và hiệu năng phần cứng

Quá trình tổng hợp và thực thi thiết kế trên dòng chip Xilinx Zynq-7000 (xc7z010clg400-1) ghi nhận các số liệu kỹ thuật cụ thể:

Thành phần tài nguyên / Thông số Tài nguyên sử dụng Tài nguyên khả dụng Tỷ lệ sử dụng (%)
Look-up Table (LUT) 654 17.600 3,55%
Flip-Flop (FF) 747 35.200 2,12%
Input/Output (IO) 69 100 69,00%

Thông số thực thi của module Cosine IP trên chip:

  • Tần số hoạt động cực đại ($F_{MAX}$): 0,514 MHz.
  • Số chu kỳ xử lý (Vector size 512): 515 chu kỳ xung clock.
  • Thời gian xử lý một cặp vector 512 phần tử: 38,1086 $\mu$s.
  • Tốc độ tính toán: Đạt 26.240 phép tính vector/giây (Number Operator per second).
  • Độ chính xác xác minh mô phỏng: Đạt 99,76% trên tập 5.000 packet kiểm thử.

Đóng góp kỹ thuật của đề tài

  • Hiện thực thành công đơn vị tính toán độ tương đồng Cosine Similarity chuyên dụng trên FPGA hoạt động trực tiếp với dữ liệu số thực dấu chấm động 32-bit chuẩn IEEE 754, tối ưu hóa tài nguyên logic (chỉ chiếm dưới 4% LUT và FF của dòng chip Zynq xc7z010).
  • Xây dựng hoàn chỉnh kiến trúc kết nối SoC kết hợp giữa phần cứng xử lý song song trên FPGA và hệ điều hành Xillinux trên ARM qua cơ chế truyền DMA của Xillybus IP Core, giải quyết nút thắt cổ chai về băng thông truyền nhận dữ liệu giữa máy chủ và phần cứng tăng tốc.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận chỉ ra các hạn chế kỹ thuật và đề xuất các hướng mở rộng:

  • Hạn chế: Tần số làm việc của module Cosine IP còn thấp (đạt 0,514 MHz), dẫn đến việc phải sử dụng bộ chia xung clock riêng biệt với bus hệ thống 100 MHz của Xillybus. Hệ thống hiện tại mới chỉ triển khai một đơn vị tính toán tuần tự cho từng cặp phần tử vector.
  • Hướng phát triển tiếp:
    • Tối ưu hóa kiến trúc đường ống (Pipeline) để nâng cao tần số xung nhịp làm việc của khối tính toán Cosine.
    • Song song hóa phần cứng bằng cách nhân bản nhiều khối Cosine IP cùng xử lý đồng thời nhiều cặp vector để tăng thông lượng tính toán tổng thể.
    • Nghiên cứu tích hợp trực tiếp mô hình mạng CNN trích xuất vector đặc trưng lên phần cứng FPGA thay vì thực hiện khâu tiền xử lý trên Server.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo chuyên môn cho:

  • Sinh viên và kỹ sư ngành Kỹ thuật Máy tính, Điện tử - Viễn thông, Công nghệ Thông tin: Nguồn tài liệu thực tế về phương pháp thiết kế vi mạch số bằng Verilog HDL sử dụng các lõi IP số thực dấu chấm động Xilinx LogiCORE.
  • Người nghiên cứu hệ thống nhúng và tăng tốc phần cứng cho AI (Hardware Acceleration): Tham khảo kiến trúc ghép nối hệ thống trên chip SoC Zynq-7000, phương pháp cấu hình Xillybus IP Core để truyền dữ liệu DMA tốc độ cao giữa Linux nhúng và logic FPGA, cùng kỹ thuật xử lý dữ liệu qua hai miền xung clock (Clock Domain Crossing).

Câu hỏi thường gặp

1. Module Cosine IP trong khóa luận thực hiện phép tính trên định dạng dữ liệu nào?
Module thực hiện tính toán trên định dạng số thực dấu chấm động 32-bit độ chính xác đơn (Single Precision) tuân thủ nghiêm ngặt chuẩn IEEE 754, bao gồm 1 bit dấu, 8 bit số mũ và 23 bit định trị.

2. Tài nguyên phần cứng tiêu thụ của module Cosine trên kit Zynq-7000 xc7z010clg400-1 là bao nhiêu?
Module tiêu thụ 654 LUT (chiếm 3,55% tài nguyên chip), 747 Flip-Flop (chiếm 2,12%) và 69 chân I/O (chiếm 69%).

3. Hiệu năng tính toán của module Cosine đối với vector đặc trưng kích thước 512 phần tử đạt mức nào?
Module hoàn thành việc tính toán một cặp vector kích thước 512 trong 515 chu kỳ xung clock, tương đương thời gian xử lý 38,11 $\mu$s ở tần số 0,514 MHz, đạt thông lượng 26.240 phép so sánh vector mỗi giây.

4. Cơ chế truyền dữ liệu giữa máy chủ và phần cứng FPGA được thực hiện qua công nghệ nào?
Hệ thống sử dụng Xillybus IP Core để thiết lập kênh truyền dữ liệu DMA đa luồng qua các tệp thiết bị ký tự /dev/xillybus_* trên hệ điều hành Xillinux (Linux nhúng trên ARM), kết nối trung gian qua các khối FIFO tiêu chuẩn và module Frame Reader để đồng bộ hai miền xung clock.

5. Tỷ lệ chính xác khi xác minh module Cosine phần cứng so với mô hình chuẩn Python là bao nhiêu?
Trong môi trường mô phỏng Testbench với 5.000 gói tin (packet) kiểm thử ngẫu nhiên, module phần cứng đạt tỷ lệ chính xác 99,76% so với kết quả tính toán đối sánh từ mã nguồn Python.


Kết luận

Khóa luận tốt nghiệp của Lưu Quyết Thắng và Mai Anh Phong đã thiết kế và triển khai thành công hệ thống tìm kiếm khuôn mặt ứng dụng tăng tốc phần cứng trên nền tảng Zynq-7000 SoC. Bằng việc xây dựng module Cosine Similarity trên định dạng số thực dấu chấm động 32-bit IEEE 754 kết hợp cơ chế truyền nhận DMA qua Xillybus IP Core, hệ thống đạt hiệu quả sử dụng tài nguyên logic tối ưu và độ chính xác tính toán đạt 99,76%. Công trình là tài liệu tham khảo có giá trị cao về mặt kỹ thuật cho các ứng dụng tăng tốc phần cứng biên và thiết kế hệ thống nhúng SoC.