Bối cảnh và vấn đề nghiên cứu
Sự phát triển của trí tuệ nhân tạo (AI) và các giải pháp học sâu (Deep Learning), đặc biệt là mô hình mạng nơ-ron tích chập (Convolutional Neural Network - CNN), đã thúc đẩy nhu cầu mạnh mẽ về việc phát triển các nền tảng phần cứng chuyên dụng. Việc vận hành các mô hình CNN phức tạp trên phần cứng máy tính thông thường hoặc phụ thuộc vào máy chủ (server) thường gặp trở ngại về độ trễ và khả năng kiểm soát tài nguyên. Do đó, việc nghiên cứu thiết kế và triển khai mạng CNN trực tiếp trên phần cứng tái cấu hình FPGA (Field Programmable Gate Array) mở ra khả năng tối ưu hóa thời gian tính toán, xử lý thời gian thực và quản lý tài nguyên linh hoạt.
Về bối cảnh thực tiễn, sau các đợt bùng phát của dịch bệnh truyền nhiễm qua đường hô hấp như COVID-19 cùng với thực trạng ô nhiễm không khí tại nhiều đô thị, thói quen và yêu cầu đeo khẩu trang ở nơi công cộng trở nên thiết yếu. Để giảm thiểu sự tác động và giám sát thủ công của con người, đề tài hướng đến việc tự động hóa quá trình nhận diện khuôn mặt người có đeo hoặc không đeo khẩu trang thông qua mạng CNN trên phần cứng FPGA.
Mục tiêu nghiên cứu của đề tài được xác định theo năm nhiệm vụ cụ thể:
- Nghiên cứu, tìm hiểu và phân tích các thành phần cấu tạo trong mô hình mạng nơ-ron tích chập CNN.
- Nghiên cứu, tìm hiểu và thiết kế lõi IP (Intellectual Property core) có khả năng hiện thực mô hình mạng nơ-ron tích chập bằng ngôn ngữ mô tả phần cứng Verilog.
- Hiện thực thiết kế phần cứng cho mạng có khả năng phân loại và nhận diện hai nhóm đối tượng riêng biệt.
- Mô phỏng, kiểm tra và so sánh kết quả xử lý giữa mô hình phần cứng bằng Verilog và mô hình phần mềm viết bằng Python.
- Tìm giải pháp cải thiện tài nguyên, tốc độ tính toán và hướng tới mục tiêu hiện thực lõi IP trên kit FPGA Xilinx Virtex-7 VC707.
Đối tượng nghiên cứu của khóa luận là thuật toán CNN sử dụng kiến trúc Xception để phân loại hai trạng thái:
- Đối tượng có đeo khẩu trang: Kết quả đầu ra trả về giá trị "0".
- Đối tượng không đeo khẩu trang: Kết quả đầu ra trả về giá trị "1". Các đối tượng khác ngoài phạm vi nhận diện cũng được phân loại trả về giá trị "0".
Phạm vi nghiên cứu tập trung vào việc nghiên cứu cấu trúc mạng CNN và mô hình Xception; xử lý dữ liệu dấu chấm động độ chính xác đơn 32-bit theo chuẩn IEEE-754; huấn luyện mô hình và trích xuất trọng số bằng Python kết hợp thư viện Keras, TensorFlow; thiết kế các khối phần cứng số bằng Verilog HDL và mô phỏng, tổng hợp trên phần mềm Vivado Design Suite hướng đến dòng vi mạch FPGA Xilinx Virtex-7 VC707.
Cơ sở lý thuyết và phương pháp
Mô hình mạng nơ-ron tích chập (CNN) được cấu thành từ các lớp ẩn cơ bản: lớp tích chập (Convolutional), lớp tổng hợp (Pooling), lớp kết nối đầy đủ (Fully-Connected) và các hàm kích hoạt phi tuyến tính (ReLU, Sigmoid). Kiến trúc Xception (Extreme Inception) gồm ba phân đoạn chính: Entry flow, Middle flow và Exit flow. Nền tảng cốt lõi của Xception là kỹ thuật tích chập tách biệt theo chiều sâu (Depthwise Separable Convolution), gồm hai bước độc lập: Depthwise Convolution (tích chập không gian trên từng kênh riêng biệt) và Pointwise Convolution (tích chập 1x1 trên toàn bộ các kênh để tổng hợp và mở rộng số kênh đặc trưng).
Hệ thống sử dụng định dạng dấu chấm động độ chính xác đơn (Single-precision Floating Point) 32-bit theo chuẩn IEEE-754. Cấu trúc 32-bit này bao gồm 1 bit dấu (sign bit ở vị trí MSB), 8 bit phần mũ (exponent) và 23 bit phần định trị (fraction/mantissa). Định dạng này cho phép biểu diễn dải giá trị rất rộng cho các trọng số và giá trị kích hoạt trong mạng, tuy nhiên đòi hỏi các khối tính toán phần cứng phức tạp hơn so với số nguyên dấu cố định.
| Kiểu dấu chấm động |
Bit dấu |
Phần mũ |
Phần định trị |
Tổng số bit |
| Nửa chính xác (Half) |
1 |
5 |
10 |
16 |
| Độ chính xác đơn (Single) |
1 |
8 |
23 |
32 |
| Độ chính xác kép (Double) |
1 |
11 |
52 |
64 |
| Bậc bốn (Quadruple) |
1 |
15 |
112 |
128 |
Phương pháp nghiên cứu thực tế được thực hiện qua các bước:
- Phương pháp phân tích và tinh giản thuật toán: Tác giả phân tích kiến trúc Xception nguyên bản, đánh giá tương quan giữa khối lượng tính toán và khả năng đáp ứng của phần cứng, từ đó giảm số lần lặp ở khối Middle flow và rút gọn kích thước dữ liệu đầu vào.
- Phương pháp thiết kế phần cứng số: Thiết kế vi kiến trúc xử lý tuần tự (sequential processing) sử dụng ngôn ngữ Verilog HDL, kết hợp kỹ thuật hàng đợi đệm dòng (Line Buffer) bằng chuỗi D Flip-flop để trích xuất cửa sổ trượt ma trận ảnh, tích hợp các bộ nhân - cộng số thực dấu chấm động 32-bit chuyên dụng.
- Phương pháp thực nghiệm và kiểm chứng đối sánh: Huấn luyện mạng trên môi trường phần mềm bằng Python, Keras và TensorFlow; trích xuất ma trận trọng số và các vector kiểm thử; nạp dữ liệu vào công cụ mô phỏng Vivado Design Suite để chạy mô phỏng dạng sóng RTL và so sánh trực tiếp kết quả đầu ra giữa Verilog và Python.
Nguồn dữ liệu của đề tài bao gồm tập dữ liệu ảnh khuôn mặt người có đeo khẩu trang và không đeo khẩu trang được tiền xử lý thành ảnh mức xám (1 channel), chuẩn hóa về các giá trị số thực dấu chấm động 32-bit để cung cấp cho quá trình huấn luyện và kiểm thử phần cứng.
Thiết kế và triển khai
Hệ thống vi mạch lõi IP Xception được thiết kế theo hướng xử lý tuần tự nhằm mục tiêu tiết kiệm tối đa tài nguyên trên chip FPGA Virtex-7 VC707. Thay vì sử dụng hàng ngàn bộ tích chập hoạt động đồng thời như kiến trúc xử lý song song (gây cạn kiệt tài nguyên khối DSP và logic cells), kiến trúc tuần tự tái sử dụng một số lượng cố định các bộ Convolution Core. Dữ liệu trung gian giữa các tầng được lưu trữ tạm thời trong bộ nhớ Block RAM (BRAM) và được bộ điều khiển (Controller) nạp xoay vòng cho các bước tính toán tiếp theo.
Để phù hợp với tài nguyên board FPGA, tác giả đã tiến hành tinh giản mô hình Xception qua các giai đoạn:
| Thông số cấu hình |
Kiến trúc Xception gốc |
Phương án rút gọn 127x127 |
Phương án tối ưu 47x47 |
| Kích thước ảnh đầu vào |
299x299x3 (RGB) |
127x127x1 (Xám) |
47x47x1 (Xám) |
| Số điểm ảnh đầu vào (Float 32-bit) |
268.203 |
16.129 |
2.209 |
| Số lớp (Layers) |
> 100 |
70 |
62 |
| Số lượng tham số (Parameters) |
~ 22.961.706 |
~ 7.512.416 |
~ 6.570.336 |
| Số lần lặp Middle flow |
8 lần |
2 lần |
2 lần |
| Kênh tầng Pooling cuối |
2048 |
1024 |
1024 |
Thiết kế vi kiến trúc của các module thành phần được mô tả chi tiết:
- Giao diện tín hiệu chuẩn của các khối: Sử dụng xung nhịp hệ thống
clk (kích cạnh lên), tín hiệu reset bất đồng bộ rst (tích cực mức thấp), tín hiệu báo hợp lệ dữ liệu vào/ra (Valid_In, Valid_Out), đường truyền dữ liệu Data_In (32 bit), Data_Out (32 bit) và đường nạp trọng số Kernel từ phần mềm.
- Khối Line Buffer: Đóng vai trò bộ đệm hàng trong kỹ thuật đường ống (pipeline), được cấu tạo từ FIFO hoặc các thanh ghi D Flip-flop 32-bit nối tiếp nhau, giúp trích xuất các cửa sổ dữ liệu lân cận (3x3 hoặc 1x1) từ luồng dữ liệu tuần tự.
- Khối Convolution Core 3x3: Chứa 9 bộ nhân số dấu chấm động 32-bit và 1 bộ cộng 9 đầu vào 32-bit FP. Khối này thực hiện 9 phép nhân song song giữa ma trận điểm ảnh và trọng số kernel, sau đó cộng dồn để đưa ra 1 kết quả duy nhất. Bộ lõi này kết hợp với các bộ điều khiển quét kernel để tạo ra các module: Convolution 3x3 stride 2 padding 0, Convolution 3x3 stride 1 padding 0, và Convolution 3x3 stride 1 padding 1 (Depthwise).
- Khối Convolution Core 1x1: Bản chất là một bộ nhân 2 số thực dấu chấm động 32-bit, phục vụ cho phép Pointwise Convolution (kết hợp với bộ đệm chèn viền 0) và khối Convolution 1x1 stride 2 padding 0 nhằm giảm kích thước đặc trưng đi một nửa.
- Khối Convolution tổng quát: Tích hợp 4 chức năng tích chập nhỏ bên trong, cho phép chuyển đổi chế độ hoạt động linh hoạt thông qua ngõ vào chọn kênh (chân select của Multiplexer).
- Khối ReLU Activation: Được hiện thực như một mạch tổ hợp dùng Multiplexer 2-1 dựa trên tính chất của chuẩn IEEE-754. Mạch kiểm tra bit dấu (bit thứ 31): nếu bit dấu bằng 1 (số âm), khối xuất giá trị hằng số
32'b0; nếu bit dấu bằng 0 (số không âm), khối truyền nguyên vẹn giá trị 32-bit đầu vào.
- Khối Max Pooling 3x3: Kết hợp khối trích xuất ma trận (stride 2 padding 1) với module tìm cực đại gồm chuỗi các bộ trừ dấu chấm động so sánh liên tiếp để trích xuất giá trị lớn nhất trong 9 giá trị.
- Các module khác: Bao gồm khối Global Average Pooling, khối kết nối đầy đủ (Dense), khối hàm kích hoạt Sigmoid (chuyển đổi giá trị sang xác suất 0 hoặc 1) và khối chuẩn hóa theo mẻ (Batch Normalization).
Quá trình kiểm thử được thực hiện thông qua mô phỏng chức năng trên phần mềm Vivado Design Suite. Hệ thống đường dữ liệu (Datapath) và khối điều khiển (Controller) được ghép nối hoàn chỉnh, tiếp nhận dữ liệu ảnh kiểm thử và đối chiếu dạng sóng trực tiếp với kết quả chạy từ mô hình mạng trên Python.
Nội dung chính theo từng chương
Chương 1. Lời mở đầu
Chương này trình bày lý do chọn đề tài xuất phát từ sự bùng nổ của công nghệ AI, học sâu (Deep Learning) và yêu cầu thiết kế phần cứng chuyên biệt trên FPGA để tăng tốc xử lý và kiểm soát tài nguyên. Tác giả liên hệ với thực tiễn dịch bệnh hô hấp (COVID-19) và tình trạng ô nhiễm không khí để xác lập tính cần thiết của bài toán nhận diện người đeo khẩu trang. Chương xác định rõ 5 mục tiêu nghiên cứu, 2 nhóm đối tượng nhận diện, phạm vi sử dụng số thực IEEE-754 và công cụ phần cứng hướng đến là kit Xilinx Virtex-7 VC707.
Chương 2. Tổng quan đề tài
Nội dung chương khái quát kiến trúc mạng nơ-ron tích chập CNN kinh điển gồm các lớp tích chập, pooling, kết nối đầy đủ và hàm kích hoạt. Tác giả quy định logic nhận diện khuôn mặt: kết quả bằng "1" đại diện cho người không đeo khẩu trang, kết quả bằng "0" đại diện cho người có đeo khẩu trang hoặc trường hợp đối tượng khác. Phần trọng tâm của chương phân tích chi tiết chuẩn dấu chấm động IEEE-754, so sánh các định dạng 16-bit, 32-bit, 64-bit, 128-bit, và phân tích sâu cấu trúc 32-bit độ chính xác đơn (1 bit dấu, 8 bit mũ, 23 bit định trị) cùng ưu nhược điểm về dải giá trị và sự phức tạp phần cứng.
Chương 3. Lý thuyết về kiến trúc Xception
Chương 3 trình bày chi tiết kiến trúc Xception nguyên bản với 3 luồng: Entry flow, Middle flow và Exit flow (đầu vào 299x299x3, hơn 100 lớp, ~22,96 triệu tham số). Tác giả so sánh hai hướng xây dựng phần cứng: xử lý song song và xử lý tuần tự, luận giải lý do chọn xử lý tuần tự để giảm thiểu tài nguyên vi mạch. Tác giả chứng minh ưu điểm của phép tích chập tách biệt Separable Convolution (Depthwise kết hợp Pointwise): trong ví dụ tích chập ảnh 12x12x3 qua 256 kernel 5x5, phép tích chập thông thường tốn 1.228.800 phép nhân, trong khi Separable Convolution chỉ tốn 53.952 phép nhân (giảm hơn 22 lần). Cuối chương trình bày nguyên lý của các lớp Pooling, Fully-Connected, bước nhảy Stride và các hàm kích hoạt ReLU, Sigmoid.
Chương 4. Chi tiết về thiết kế các module Xception
Chương 4 cung cấp sơ đồ khối và nguyên lý hoạt động của toàn bộ các khối phần cứng được thiết kế bằng Verilog. Tác giả định nghĩa bảng tín hiệu giao tiếp chung, thiết kế bộ đệm Line Buffer bằng chuỗi D Flip-flop để trích ma trận điểm ảnh. Chi tiết hóa khối Convolution Core 3x3 (gồm 9 bộ nhân và 1 bộ cộng 9 đầu vào FP 32-bit), các bộ trích ma trận kernel với bước nhảy stride và padding tương ứng (stride 2 padding 0; stride 1 padding 0; stride 1 padding 1 Depthwise). Thiết kế khối Convolution Core 1x1 và tích hợp thành khối Convolution tổng quát. Khối ReLU được thiết kế tối ưu bằng Multiplexer 2-1 kiểm tra bit dấu MSB. Khối Max Pooling 3x3 kết hợp kernel và mạch trừ tìm cực đại trong 9 giá trị. Cuối cùng là thiết kế các khối Global Average Pooling, Dense, Sigmoid và Batch Normalization.
Chương 5. Lấy giá trị trọng số
Chương này tập trung vào quy trình làm việc với phần mềm để chuẩn bị tham số cho phần cứng. Tác giả mô tả quá trình huấn luyện mạng nhận diện khuôn mặt đeo khẩu trang bằng Python với Keras và TensorFlow. Hướng dẫn chi tiết cách thức trích xuất các trọng số từ mô hình đã huấn luyện đối với từng loại tầng: trọng số lớp Convolution thông thường, trọng số lớp Separable Convolution, các tham số của tầng Batch Normalization và các tham số của tầng kết nối đầy đủ (Dense) để phục vụ nạp vào lõi IP phần cứng.
Chương 6. Hiện thực thiết kế
Chương 6 trình bày việc ghép nối toàn diện hệ thống gồm khối điều khiển Controller và đường dữ liệu Datapath. Tác giả đưa ra kết quả mô phỏng dạng sóng RTL trên phần mềm Vivado cho từng module riêng rẽ: Convolution 3x3 stride 2 padding 0, Separable Convolution, ReLU, Max Pooling, Dense, Sigmoid. Chương cũng trình bày kết quả mô phỏng nhân ma trận tích chập và hiển thị kết quả so sánh đối chiếu giữa dạng sóng mô phỏng Verilog với kết quả tính toán mô hình Python cho hai trường hợp khuôn mặt có đeo và không đeo khẩu trang.
Chương 7. Tổng hợp tài nguyên và kết quả
Chương cuối cùng tổng kết các kết quả đạt được sau khi tổng hợp lõi IP Xception trên phần mềm Vivado của Xilinx. Đánh giá tính chính xác của thuật toán qua việc thử nghiệm 20 ảnh với mô hình tối ưu 47x47x1 (ghi nhận 17 ảnh đúng, 3 ảnh sai). Trình bày bảng so sánh tài nguyên giữa các kích thước ảnh (47x47 so với 127x127) và giữa hai kiến trúc xử lý tuần tự và song song. Tác giả tổng kết các đóng góp, chỉ ra các hạn chế và đề xuất giải pháp phát triển tiếp theo cho hệ thống trên bo mạch Virtex-7 VC707.
Kết quả và đóng góp
Khóa luận đã hoàn thành các kết quả cụ thể kèm các số liệu được ghi nhận trong văn bản:
- Rút gọn thành công mô hình mạng Xception từ kiến trúc gốc (kích thước ảnh 299x299x3, hơn 100 lớp, 22.961.706 tham số) xuống kiến trúc ảnh xám 127x127x1 (70 lớp, khoảng 7.512.416 tham số) và kiến trúc tối ưu 47x47x1 (62 lớp, khoảng 6.570.336 tham số), giúp giảm tải đáng kể khối lượng tính toán cho phần cứng.
- Chứng minh và hiện thực hiệu quả giảm tải tính toán của phép tích chập tách biệt Separable Convolution, giúp cắt giảm số lượng phép nhân từ 1.228.800 phép tính xuống còn 53.952 phép tính trong bài toán mẫu.
- Thiết kế hoàn chỉnh bằng Verilog HDL và đóng gói thành công lõi IP Xception trên số dấu chấm động 32-bit IEEE-754 bao gồm đầy đủ các tầng chức năng: Line Buffer, Convolution Core 3x3, Convolution Core 1x1, Convolution tổng quát, ReLU, Max Pooling 3x3, Global Average Pooling, Dense, Sigmoid, Batch Normalization cùng hệ thống Datapath và Controller.
- Kết quả mô phỏng chức năng logic trên Vivado cho thấy dạng sóng tính toán của Verilog hoàn toàn tương thích và khớp với kết quả suy luận từ phần mềm Python đối với các trường hợp có và không đeo khẩu trang.
- Thử nghiệm phân loại thực tế trên tập kiểm thử gồm 20 ảnh đầu vào (kích thước 47x47x1) đạt kết quả nhận diện chính xác 17 ảnh và trả về kết quả sai 3 ảnh.
Về mặt đóng góp so với các nghiên cứu trước, nhóm tác giả đã hiện thực hóa thành công một kiến trúc học sâu tương đối phức tạp là Xception lên phần cứng vi mạch với định dạng dấu chấm động 32-bit; đề xuất và triển khai giải pháp vi kiến trúc xử lý tuần tự kết hợp bộ nhớ BRAM giúp giải quyết bài toán nút thắt tài nguyên, mở ra khả năng triển khai mô hình học sâu kích thước lớn trên một board FPGA đơn như Virtex-7 VC707 mà không đòi hỏi hệ thống đa chip tốn kém.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận ghi nhận các hạn chế chính:
- Việc giảm kích thước ảnh đầu vào xuống 47x47x1 và lược bớt khối Convolution 1x1 nhằm phù hợp tài nguyên phần cứng làm mất mát một số thông tin đặc trưng không gian, dẫn đến sai số nhận diện (vẫn còn 3/20 ảnh thử nghiệm bị phân loại sai).
- Bài toán phân loại mới chỉ dừng lại ở phân loại nhị phân cơ bản (có đeo khẩu trang hoặc không đeo/khác); các đối tượng ngoại lai ngoài khuôn mặt chưa được phân tách thành các lớp độc lập mà bị gộp chung vào nhãn "0".
- Toàn bộ kết quả mới dừng ở mức mô phỏng RTL, kiểm chứng tương đương logic trên phần mềm Vivado và đánh giá tài nguyên tổng hợp lý thuyết, chưa thực hiện nạp trực tiếp bitstream xuống bo mạch phần cứng vật lý Virtex-7 VC707 để kiểm thử thời gian thực với dữ liệu camera trực tiếp.
Hướng nghiên cứu tiếp theo được nhóm tác giả xác định:
- Tiếp tục tối ưu hóa sâu hơn về tài nguyên logic và tần số hoạt động của các khối xử lý dấu chấm động nhằm gia tăng tốc độ suy luận của lõi IP.
- Nghiên cứu giải pháp cân bằng giữa độ phân giải ảnh và độ phức tạp kiến trúc để nâng cao độ chính xác phân loại.
- Hoàn thiện luồng giao tiếp ngoại vi và hiện thực việc nạp hoàn chỉnh lõi IP lên kit FPGA Virtex-7 VC707 để đo lường hiệu năng và mức tiêu thụ công suất thực tế.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo kỹ thuật hữu ích đối với sinh viên, học viên và kỹ sư thuộc các chuyên ngành Kỹ thuật Máy tính, Điện tử - Viễn thông, Công nghệ Thông tin, đặc biệt là những người định hướng nghiên cứu thiết kế vi mạch (IC Design) và phát triển các bộ tăng tốc phần cứng cho trí tuệ nhân tạo (AI Accelerators trên FPGA/ASIC).
Các nội dung có giá trị tham khảo nổi bật trong tài liệu gồm:
- Thiết kế chi tiết các khối tính toán số thực dấu chấm động 32-bit IEEE-754 bằng Verilog (Chương 4), đặc biệt là kỹ thuật trích xuất ma trận điểm ảnh bằng hàng đợi đệm dòng (Line Buffer) và giải pháp tối ưu khối kích hoạt ReLU thông qua cổng Multiplexer 2-1 kiểm tra bit dấu MSB.
- Phương pháp phân tích, chuyển đổi và tinh giản một mô hình mạng học sâu từ môi trường phần mềm (Keras/TensorFlow) sang vi kiến trúc phần cứng tuần tự, cũng như quy trình trích xuất tham số trọng số để đưa vào hệ thống phần cứng số.
Câu hỏi thường gặp
Tại sao nhóm tác giả lại lựa chọn kiến trúc xử lý tuần tự thay vì xử lý song song?
Kiến trúc xử lý song song yêu cầu sử dụng đồng thời một lượng rất lớn các bộ Convolution Core (kết quả của tầng trước nối trực tiếp sang tầng sau), dẫn đến nhu cầu tài nguyên phần cứng tăng theo cấp số nhân và vượt quá dung lượng tài nguyên của một board FPGA. Kiến trúc xử lý tuần tự chỉ sử dụng một số lượng cố định các bộ tính toán, lưu trữ các tầng dữ liệu trung gian vào bộ nhớ BRAM và lặp lại việc sử dụng các bộ tính toán này cho các tầng tiếp theo, giúp tiết kiệm diện tích vi mạch để đáp ứng vừa vặn cho board Virtex-7 VC707.
Phép tích chập tách biệt Separable Convolution mang lại ưu thế gì về mặt tính toán?
Separable Convolution chia phép tích chập truyền thống thành hai bước: Depthwise Convolution (lọc không gian độc lập trên từng kênh) và Pointwise Convolution (tích chập 1x1 trên toàn bộ các kênh). Trong ví dụ tính toán của khóa luận với đầu vào 12x12x3 và 256 kernel 5x5, tích chập thông thường tiêu tốn 1.228.800 phép nhân, trong khi Separable Convolution chỉ tốn 53.952 phép nhân (Depthwise tốn 4.800 phép nhân và Pointwise tốn 49.152 phép nhân), giúp giảm hơn 22 lần khối lượng tính toán.
Khối hàm kích hoạt ReLU được thiết kế phần cứng như thế nào để tối ưu?
Hàm ReLU trả về 0 nếu đầu vào âm và giữ nguyên giá trị nếu đầu vào dương. Nhờ vào chuẩn số thực dấu chấm động IEEE-754 biểu diễn bit dấu (sign bit) ở vị trí bit thứ 31 (MSB), khối ReLU được hiện thực đơn giản bằng một mạch tổ hợp Multiplexer 2-1 có chân chọn là chính bit dấu này. Nếu bit dấu bằng 1 (số âm), mạch xuất giá trị 32'b0; nếu bit dấu bằng 0 (số không âm), mạch truyền thẳng giá trị 32-bit của dữ liệu đầu vào mà không cần mạch so sánh số phức tạp.
Mô hình Xception tối ưu phần cứng trong khóa luận sử dụng cấu hình ảnh đầu vào và số tham số là bao nhiêu?
Để đáp ứng tài nguyên phần cứng, mô hình tối ưu cuối cùng sử dụng ảnh mức xám kích thước 47x47x1 (tương đương 2.209 điểm dữ liệu dấu chấm động 32-bit), số lượng tầng được rút xuống còn 62 tầng và tổng số tham số sử dụng là khoảng 6.570.336 tham số, đồng thời loại bỏ khối Convolution 1x1 ở luồng chính và giảm số lần lặp ở khối Middle flow xuống 2 lần.
Kết quả đầu ra của hệ thống được quy định phân loại như thế nào?
Ngõ ra của hệ thống sau khối hàm Sigmoid trả về giá trị số nhị phân: giá trị "1" biểu thị nhận diện đối tượng không đeo khẩu trang, và giá trị "0" biểu thị nhận diện đối tượng có đeo khẩu trang. Trường hợp dữ liệu đầu vào là các đối tượng khác ngoài phạm vi nhận diện khuôn mặt, hệ thống cũng được cấu hình mặc định trả về giá trị "0".
Kết luận
Khóa luận của Bùi Nguyễn Tuấn Kiệt và Nguyễn Minh Nhân đã nghiên cứu, thiết kế và mô phỏng thành công lõi IP mạng nơ-ron tích chập CNN kiến trúc Xception rút gọn (62 tầng, đầu vào ảnh 47x47x1) trên phần cứng FPGA bằng ngôn ngữ Verilog HDL. Bằng việc kết hợp kiến trúc xử lý tuần tự, tích chập tách biệt Separable Convolution và chuẩn số thực dấu chấm động 32-bit IEEE-754, nhóm tác giả đã tối ưu đáng kể số lượng phép tính và tài nguyên vi mạch hướng tới mục tiêu triển khai trên board Xilinx Virtex-7 VC707. Toàn bộ các khối vi kiến trúc đã được kiểm chứng tính đúng đắn logic trên công cụ Vivado thông qua việc đối chiếu trực tiếp với kết quả mô hình phần mềm trên Python, đóng góp một giải pháp tham khảo rõ ràng cho hướng nghiên cứu thiết kế phần cứng tăng tốc học sâu.