Bối cảnh và vấn đề nghiên cứu
Hệ thống hỗ trợ tài xế nâng cao (Advanced Driver Assistance Systems - ADAS) đóng vai trò thiết yếu trong việc giảm thiểu rủi ro và tai nạn giao thông. Trong các chức năng của ADAS, nhận diện và phân loại làn đường là một trong những tác vụ nền tảng. Tuy nhiên, bài toán này gặp nhiều trở ngại lớn do môi trường đường bộ thực tế rất phức tạp: điều kiện chiếu sáng thay đổi, ánh sáng yếu vào ban đêm, hoặc vạch kẻ đường bị mờ, đứt đoạn và xuống cấp theo thời gian.
Sự phát triển của học sâu (Deep Learning) và mạng nơ-ron tích chập (Convolutional Neural Networks - CNNs) đã cải thiện đáng kể độ chính xác trong nhận diện làn đường so với các phương pháp xử lý ảnh truyền thống dùng trích xuất đặc trưng thủ công (như Hough Transform hay bộ lọc màu). Dẫu vậy, các mô hình phân vùng ảnh (semantic segmentation hoặc instance segmentation) như U-Net, ENet hay LaneNet thường xuất ra ma trận điểm ảnh dày đặc có cùng kích thước với ảnh đầu vào. Cách tiếp cận này bộc lộ sự thiếu tối ưu do vạch kẻ đường có tính chất hình học mỏng, cong và dài; việc biểu diễn bằng mặt nạ điểm ảnh đòi hỏi khối lượng xử lý hậu kỳ (post-processing) rất lớn để trích xuất các thông số thực tế như tọa độ trung điểm hay góc nghiêng.
Mặt khác, các mô hình CNN tiên tiến thường đòi hỏi khối lượng tính toán khổng lồ, tạo ra độ trễ cao trên các bộ xử lý thông thường. Dù bộ xử lý đồ họa (GPU) mang lại năng lực tính toán song song mạnh mẽ đáp ứng thời gian thực, mức tiêu thụ điện năng quá lớn của GPU khiến chúng không phù hợp cho các thiết bị nhúng di động hoạt động bằng nguồn pin trên xe tự hành. Trước thực trạng đó, vi mạch mảng phần tử logic lập trình được (FPGA) nổi lên như một giải pháp thay thế khả thi nhờ khả năng tái cấu trúc phần cứng, cho phép tùy biến các đường ống xử lý song song chuyên dụng nhằm đạt thông lượng cao với mức năng lượng tiêu thụ thấp.
Khóa luận xác định 3 nhiệm vụ và mục tiêu nghiên cứu cụ thể:
- Thiết kế một mô hình CNN có kích thước nhẹ, thực hiện huấn luyện và đánh giá trên tập dữ liệu chuẩn TuSimple; mô hình được đánh giá qua các thang đo độ chính xác (Accuracy), tỉ lệ dương tính giả (False Positive - FP) và tỉ lệ âm tính giả (False Negative - FN), hướng đến mục tiêu độ chính xác đạt trên 95%.
- Thiết kế một kiến trúc phần cứng chuyên dụng cho mô hình CNN đề xuất, áp dụng các kỹ thuật tối ưu hóa đường ống (pipeline) và lượng tử hóa dữ liệu (data quantization) nhằm đạt được sự cân bằng tối ưu giữa thông lượng tính toán, tài nguyên phần cứng và công suất tiêu thụ.
- Hiện thực hóa kiến trúc phần cứng trên bo mạch thử nghiệm FPGA Xilinx Virtex-7 VC707 dưới vai trò một bộ gia tốc phần cứng, kết nối với máy chủ (Host PC) thông qua giao tiếp Peripheral Component Interconnect Express (PCIe); mục tiêu hiệu năng ban đầu đặt ra cho bộ gia tốc là đạt tốc độ xử lý trên 150 khung hình/giây (FPS) với công suất tiêu thụ dưới 10 W.
Đối tượng nghiên cứu của đề tài là kiến trúc mạng nơ-ron tích chập nhận diện làn đường và cấu trúc phần cứng mạch tích hợp số trên FPGA. Phạm vi nghiên cứu thực nghiệm tập trung vào tập dữ liệu giao thông thực tế TuSimple, nền tảng phần cứng Xilinx Virtex-7 VC707 Evaluation Kit và hệ điều hành Linux trên máy tính chủ phục vụ việc truyền nhận dữ liệu qua chuẩn PCIe.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng nền tảng dựa trên các khái niệm và kỹ thuật xử lý chuyên sâu:
- Mạng nơ-ron tích chập (CNN): Vận dụng tính lân cận không gian của ảnh để rút trích đặc trưng thông qua các phép tích chập 2D/3D giữa ma trận đầu vào và các bộ lọc (kernels), kết hợp với các tầng chuẩn hóa theo lô (Batch Normalization), kỹ thuật Dropout (giảm hiện tượng học vẹt/overfitting) và các hàm kích hoạt phi tuyến.
- Hàm kích hoạt: Khảo sát hàm ReLU để duy trì tính phi tuyến ở các tầng ẩn mà không gây triệt tiêu đạo hàm (vanishing gradient) và hàm Sigmoid ở tầng đầu ra định vị làn đường để nén giá trị về khoảng xác suất $[0, 1]$.
- Lượng tử hóa dữ liệu (Data Quantization): Chuyển đổi miền giá trị số thực dấu chấm động 32-bit (FP32) sang số nguyên 8-bit (INT8) để giảm thiểu tài nguyên phần cứng và tăng tốc độ xử lý. Khóa luận phân tích 3 phương pháp lượng tử hóa chính trong PyTorch (Dynamic Quantization, Static Quantization và Quantization-aware Training), trong đó kỹ thuật lượng tử hóa tĩnh (Static Quantization) được lựa chọn áp dụng nhờ khả năng chuyển đổi toàn bộ trọng số và activation sang số nguyên. Các bước trung gian khi chuyển đổi hệ số tỉ lệ (scaling factor) giữa các tầng sử dụng định dạng số thực dấu chấm cố định 16-bit (Fixed-point 16-bit bù 2, gồm 8-bit phần thập phân).
- Phần cứng FPGA và tối ưu toán học: Tận dụng khối DSP48E2 trên vi mạch FPGA của Xilinx. Tác giả áp dụng kỹ thuật từ Xilinx White Paper WP486 để thực hiện song song 2 phép nhân 8-bit trên một khối nhân 27x18 của DSP48E2.
Phương pháp nghiên cứu kết hợp giữa thiết kế thuật toán, mô phỏng phần mềm và hiện thực phần cứng:
- Phương pháp thiết kế mô hình: Đề xuất quy tắc biểu diễn làn đường dạng hàng (row-wise formulation) kết hợp phân loại và xác định dải tung độ, lấy cảm hứng từ các nghiên cứu UFAST, CondLaneNet và PINet.
- Phương pháp huấn luyện: Xây dựng mô hình bằng ngôn ngữ Python với thư viện PyTorch, sử dụng thuật toán tối ưu Adam (learning rate 1e-3), huấn luyện trong 150 epoch với kích thước lô (batch size) bằng 16.
- Phương pháp thiết kế phần cứng: Phân tích không gian thiết kế (design space exploration), hiện thực hóa mô tả phần cứng bằng ngôn ngữ Verilog HDL chuẩn, tổng hợp và phân tích tài nguyên, định thời trên phần mềm Xilinx Vivado.
- Nguồn dữ liệu: Tập dữ liệu ảnh chuẩn TuSimple gồm 3.626 ảnh huấn luyện và 2.782 ảnh kiểm thử với kích thước gốc 720x1280 điểm ảnh định dạng RGB.
Thiết kế và triển khai
Quy tắc biểu diễn làn đường và kiến trúc mô hình CNN
Nhằm loại bỏ các gánh nặng xử lý hậu kỳ của các mô hình segmentation truyền thống, tác giả thiết kế quy tắc biểu diễn làn đường theo từng dòng quét ngang (row-wise):
- Ảnh đầu vào RGB được chuẩn hóa kích thước về $256 \times 512$ điểm ảnh.
- Đầu ra của mô hình được cấu thành từ hai ma trận cho mỗi làn đường (mô hình hỗ trợ tối đa 4 làn): ma trận phân loại theo hàng
row-wise classification kích thước $32 \times 64$ và ma trận dải tung độ vertical range kích thước $32 \times 1$.
- Điểm đánh dấu có vạch kẻ đi qua được xác định khi ô tương ứng trong
vertical range có giá trị lớn hơn 0.5, từ đó vị trí hoành độ cụ thể được chọn tại điểm có giá trị lớn nhất trên hàng tương ứng trong ma trận classification.
- Tổng kích thước đầu ra chỉ còn 8.320 bytes so với 393.216 bytes của ảnh đầu vào, giúp giảm kích thước dữ liệu hơn 47 lần mà vẫn bảo toàn đầy đủ thông tin hình học của làn đường.
Kiến trúc mạng gồm 17 tầng tích chập, chia làm 2 giai đoạn:
- Phần trích xuất đặc trưng (Encoder stages): Gồm 3 tầng encoder liên tiếp nhằm giảm kích thước không gian và tăng số kênh đặc trưng lên 64 kênh kích thước $32 \times 64$. Mỗi tầng encoder chứa 3 khối "conv+bn+relu" kết hợp kỹ thuật dropout ($p = 0.2$).
- Hai nhánh đầu ra song song:
- Nhánh Classification: Gồm 3 khối "conv+bn+relu" và 1 tầng tích chập cuối cùng không sử dụng hàm kích hoạt để giữ nguyên độ biến thiên giá trị phục vụ tìm cực đại (argmax).
- Nhánh Vertical: Gồm 3 khối "conv+bn+relu" và 1 tầng "conv+sigmoid" ở cuối để nén giá trị về dải $[0, 1]$.
Mô hình được tối ưu bằng hàm mất mát tổng hợp: $L_{total} = L_{cls} + L_{vert}$, trong đó $L_{cls}$ và $L_{vert}$ là tổng các hàm mất mát cross-entropy tính riêng cho từng nhánh trên từng làn đường.
Kiến trúc phần cứng bộ gia tốc trên FPGA
Toàn bộ hệ thống phần cứng được thiết kế theo cấu trúc đường ống sâu, bao gồm các thành phần cốt lõi:
- Cơ chế lưu trữ và truyền dữ liệu: Dữ liệu ma trận 3D ($C \times H \times W$) được tổ chức thành cấu trúc ảnh 2D ($H \times W$) với độ rộng mỗi pixel bằng $C \times 8$ bit. Mỗi tầng xử lý bao gồm một khối đệm dòng (Line Buffer) tạo cửa sổ trượt (sliding window) và khối phần tử xử lý (Processing Element - PE). Dữ liệu giữa các tầng được truyền nối tiếp và đồng bộ thông qua các hàng đợi FIFO trung gian. Toàn bộ trọng số được nạp cố định trên các khối RAM nội vi (Block RAM - BRAM), giúp triệt tiêu hoàn toàn độ trễ truy xuất bộ nhớ DRAM ngoài trong quá trình suy luận (inference).
- Kỹ thuật nhân đôi trên khối DSP48E2: Tận dụng bộ nhân $27 \times 18$ bit để tính đồng thời hai phép nhân 8-bit $[a \times c]$ và $[b \times c]$ bằng cách đưa $[(a \ll 18) + b]$ vào cổng 27-bit và $c$ vào cổng 18-bit, sau đó tách 2 tích 16-bit từ kết quả 34-bit. Do cổng D trên FPGA Virtex-7 VC707 chỉ có độ rộng 25-bit (không đủ 27-bit để đưa trực tiếp vào bộ Pre-adder), tác giả đã hiện thực phép cộng dịch bit bằng các phần tử logic thông thường trước khi đưa vào bộ nhân DSP.
- Hiện thực hóa hàm Sigmoid: Sử dụng thuật toán xấp xỉ bậc hai từng đoạn (Piecewise Second-order Approximation) bằng các hàm đa thức tối ưu cho phần cứng trên số thực Fixed-point 16-bit:
$$f(x) \approx \begin{cases} 0, & x < -4 \ 0.5 \times (1 + 0.25x)^2, & -4 \le x < 0 \ 1 - 0.5 \times (1 - 0.25x)^2, & 0 \le x \le 4 \ 1, & x > 4 \end{cases}$$
- Song song hóa phép tích chập: Đề xuất 2 kỹ thuật mở vòng lặp (loop unrolling):
- Phương pháp Incha: Mở vòng lặp theo kênh đầu vào ($C_{in}$) và kích thước kernel ($K$), xử lý $C_{in} \times K$ phép nhân song song mỗi chu kỳ. Được hiện thực qua 3 biến thể: Incha-single, Incha-double (dùng bộ nhân đôi DSP), và Incha-quad (ghép 2 khối Incha-double).
- Phương pháp Outcha: Mở vòng lặp theo kênh đầu ra ($C_{out}$), xử lý $C_{out} \times K$ phép nhân song song mỗi chu kỳ; thiết kế Outcha-single phù hợp cho các tầng có $C_{in} > C_{out}$.
Qua khảo sát 6 cấu hình phần cứng (Config1 đến Config6), tác giả chọn Config6 làm thiết kế hoàn thiện: sử dụng Incha-quad cho 3 tầng đầu, Incha-double cho tầng 4-6, Incha-single cho các tầng encoder còn lại (tận dụng khoảng trống chu kỳ do stride = 2 tạo ra mà không gây nghẽn cổ chai), và Outcha-single cho toàn bộ các tầng ở 2 nhánh đầu ra.
Triển khai hệ thống và môi trường kiểm thử
Thiết kế phần cứng được đóng gói thành một IP core chuẩn AXI4, tích hợp cùng IP XDMA (PCIe DMA Subsystem) của Xilinx và nạp lên FPGA Virtex-7 VC707 hoạt động ở tần số xung nhịp 200 MHz. Trên máy tính chủ chạy hệ điều hành Linux, hệ thống sử dụng trình điều khiển (driver) XDMA trong nhân Linux (kernel) và chương trình kiểm thử viết bằng Python để truyền ảnh thử nghiệm từ bộ nhớ máy chủ qua khe cắm PCIe Gen2/Gen3 đến FPGA và nhận ma trận kết quả phân loại về máy chủ để đối chiếu.
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 phân tích bối cảnh phát triển của hệ thống ADAS và vai trò của bài toán phân loại làn đường. Tác giả tổng hợp các hạn chế của phương pháp trích xuất đặc trưng truyền thống (dễ lỗi khi ánh sáng yếu, vạch mờ như ví dụ từ giải thuật AR-LHT) và các phương pháp học sâu dựa trên semantic segmentation (không phân biệt được các làn riêng biệt) hoặc instance segmentation (LaneNet - đòi hỏi xử lý hậu kỳ phức tạp). Từ đó, chương phân tích các giải pháp miêu tả làn đường nhỏ gọn (Line-CNN, UFAST, CondLaneNet, PINet) và các nghiên cứu bộ gia tốc phần cứng trước đó (ChipNet trên UltraScale XCKU115 đạt 79 FPS, RoadNet-RT trên ZCU102 đạt 327.9 FPS). Chương kết thúc bằng việc xác định 3 mục tiêu cốt lõi của khóa luận và phác thảo bố cục tài liệu.
Chương 2: Cơ sở lý thuyết
Chương 2 trình bày chi tiết nền tảng lý thuyết mạng nơ-ron từ mô hình sinh học đến mạng nơ-ron nhân tạo và mạng nơ-ron tích chập (CNN). Tác giả giải thích toán học của phép tích chập 2D, tích chập 3D đa kênh, các tầng chức năng (Pooling, Upsampling, Batch Normalization, Dropout) và các hàm kích hoạt (Sigmoid, ReLU). Trọng tâm lý thuyết của chương đi sâu vào kỹ thuật lượng tử hóa dữ liệu (Data Quantization), phân tích nguyên lý ánh xạ miền giá trị qua hệ số tỉ lệ $S$ và điểm không $Z$, đồng thời so sánh chi tiết cơ chế hoạt động của 3 phương pháp lượng tử hóa trên PyTorch: Dynamic Quantization, Static Quantization và Quantization-aware Training. Cuối chương giới thiệu cấu trúc phần cứng FPGA (so sánh với vi xử lý thông dụng và vi mạch chuyên dụng ASIC) cùng bo mạch Xilinx Virtex-7 VC707.
Chương 3: Kiến trúc CNN đề xuất
Chương 3 chi tiết hóa quy tắc miêu tả làn đường dạng hàng (row-wise) lấy cảm hứng từ UFAST và CondLaneNet, giúp nén kích thước đầu ra nhỏ hơn 47 lần so với ảnh đầu vào. Tác giả mô tả chi tiết kiến trúc mạng gồm 3 tầng encoder và 2 nhánh đầu ra (classification và vertical) với 17 tầng tích chập. Cấu trúc hàm mất mát tổng hợp $L_{total} = L_{cls} + L_{vert}$ trên nền tảng cross-entropy được định nghĩa rõ ràng. Chương cũng trình bày định dạng tập dữ liệu TuSimple (3.626 ảnh train, 2.782 ảnh test), quy trình tiền xử lý chuyển đổi nhãn từ tối đa 55 điểm xuống còn 32 điểm tung độ định sẵn, và thiết lập huấn luyện trên PyTorch với bộ tối ưu Adam trong 150 epoch.
Chương 4: Kiến trúc phần cứng đề xuất
Chương 4 tập trung vào các giải pháp thiết kế kiến trúc phần cứng chuyên dụng. Tác giả đánh giá kết quả lượng tử hóa Static Quantization 8-bit trên mô hình phần mềm. Tiếp theo, chương phân tích chi tiết toán học của 2 thuật toán mở vòng lặp tích chập (Incha và Outcha), nguyên lý ghép 2 phép nhân 8-bit trên một khối nhân DSP48E2 theo Xilinx WP486 và phương án điều chỉnh khi cổng D bị giới hạn 25-bit trên Virtex-7. Tác giả trình bày 4 biến thể PE cho tích chập (Incha-single, Incha-double, Incha-quad, Outcha-single), cấu trúc đường ống sâu kết hợp Line Buffer, BRAM và FIFO trung gian. Thuật toán xấp xỉ bậc hai từng đoạn của hàm Sigmoid được mô phỏng với độ lỗi MSE chỉ $1.37 \times 10^{-4}$ trên số thực và $3.38 \times 10^{-6}$ khi chuyển sang Fixed-point 16-bit. Chương kết thúc bằng việc phân tích 6 cấu hình (Config1 đến Config6) trên xung nhịp 200 MHz để chọn ra Config6 tối ưu nhất về tài nguyên và thông lượng.
Chương 5: Hiện thực trên FPGA
Chương 5 trình bày phương pháp tích hợp hệ thống phần cứng hoàn chỉnh trên phần mềm Vivado. Thiết kế CNN được đóng gói thành IP AXI4, liên kết với IP XDMA PCIe Subsystem để giao tiếp với máy tính chủ. Chương mô tả kiến trúc bộ đệm dòng (Line Buffer), các thanh ghi dịch, máy trạng thái điều khiển việc đọc/ghi FIFO và nạp trọng số từ BRAM. Về phía máy tính chủ, chương mô tả việc cài đặt trình điều khiển XDMA trên Linux kernel và xây dựng ứng dụng kiểm tra bằng Python để gửi ảnh qua bus PCIe, kích hoạt suy luận phần cứng và nhận ma trận kết quả phục vụ đánh giá tính đúng đắn.
Chương 6: Kết quả
Chương 6 công bố toàn bộ số liệu thực nghiệm của hệ thống trên cả phần mềm lẫn phần cứng. Mô hình PyTorch đạt độ chính xác 93.03% (FP32) và 92.87% (INT8) trên tập kiểm thử TuSimple, đạt tốc độ 348 FPS trên GPU NVIDIA Tesla T4. Trên phần cứng FPGA Virtex-7 VC707 hoạt động ở tần số xung nhịp 200 MHz, hệ thống đạt tốc độ xử lý thực tế 549 FPS, mức tiêu thụ công suất 8.129 W, thông lượng tính toán đạt 296.26 GOPS với hiệu suất năng lượng 36.44 GOPS/W. Chương cung cấp bảng phân bổ tài nguyên logic (LUT, Flip-Flop, BRAM, DSP) trên FPGA và hình ảnh thực tế của hệ thống ghép nối giữa bo mạch VC707 và máy tính chủ.
Chương 7: Tổng kết
Chương 7 tổng kết toàn bộ các kết quả đạt được của khóa luận so với mục tiêu ban đầu. Tác giả thẳng thắn trình bày các khó khăn gặp phải trong quá trình thiết kế phần cứng (như giới hạn 25-bit của cổng D trên DSP48E2 của dòng Virtex-7) và đề xuất các hướng phát triển tiếp theo của đề tài nhằm nâng cao độ chính xác cũng như mở rộng khả năng nhận diện các đối tượng giao thông khác.
Kết quả và đóng góp
Bảng tổng hợp số liệu thực nghiệm
| Hạng mục đánh giá |
Mô hình phần mềm (FP32) |
Mô hình phần mềm (INT8) |
Bộ gia tốc FPGA (Config6) |
| Nền tảng thực thi |
GPU NVIDIA Tesla T4 |
GPU NVIDIA Tesla T4 |
FPGA Virtex-7 VC707 |
| Tần số hoạt động |
Mặc định GPU |
Mặc định GPU |
200 MHz |
| Độ chính xác (Accuracy) |
93.03% |
92.87% |
92.87% |
| Dương tính giả (FP) |
0.0577 |
0.0594 |
0.0594 |
| Âm tính giả (FN) |
0.0763 |
0.0781 |
0.0781 |
| Tốc độ xử lý (FPS) |
348 FPS |
- |
549 FPS |
| Công suất tiêu thụ |
- |
- |
8.129 W |
| Thông lượng (Throughput) |
- |
- |
296.26 GOPS |
| Hiệu suất năng lượng |
- |
- |
36.44 GOPS/W |
| So sánh độ lỗi xấp xỉ hàm Sigmoid |
Sai số toàn phương trung bình (MSE) |
| Sigmoid thực (Float) vs. Sigmoid xấp xỉ (Float) |
$1.36934323 \times 10^{-4}$ |
| Sigmoid xấp xỉ (Float) vs. Sigmoid xấp xỉ (Hardware Fixed-point) |
$3.38057400 \times 10^{-6}$ |
Đóng góp chính của đề tài
- Đề xuất quy tắc biểu diễn làn đường tinh gọn: Xây dựng phương pháp biểu diễn theo dòng quét kết hợp phân loại và dải tung độ, giúp giảm kích thước dữ liệu đầu ra 47 lần so với ảnh gốc, loại bỏ hoàn toàn các thuật toán hậu xử lý phức tạp trên CPU.
- Kiến trúc phần cứng đường ống hoàn toàn không phụ thuộc DRAM: Tích hợp toàn bộ trọng số 8-bit trên BRAM nội vi và tổ chức luân chuyển dữ liệu qua Line Buffer cùng FIFO trung gian, cho phép các tầng xử lý đồng thời mà không bị nghẽn băng thông bộ nhớ ngoài.
- Tối ưu hóa tài nguyên tính toán DSP: Ứng dụng thành công kỹ thuật thực hiện 2 phép nhân 8-bit trên một khối nhân DSP kết hợp bộ cộng ngoài thích ứng với dòng vi mạch Virtex-7; đề xuất thuật toán xấp xỉ Sigmoid bậc hai từng đoạn đạt độ chính xác cao với chi phí phần cứng rất thấp.
- Phân tích không gian thiết kế toàn diện: Xây dựng và đánh giá 6 cấu hình phần cứng kết hợp linh hoạt giữa hai kỹ thuật unrolling (Incha và Outcha), tận dụng chu kỳ trễ của các tầng tích chập stride = 2 để giảm thiểu tài nguyên logic mà vẫn bảo toàn thông lượng tối đa.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận ghi nhận một số hạn chế kỹ thuật cụ thể:
- Khối DSP48E2 trên vi mạch FPGA Xilinx Virtex-7 VC707 chỉ hỗ trợ cổng D 25-bit thay vì 27-bit như trên các dòng UltraScale mới, buộc thiết kế phải sử dụng thêm tài nguyên logic thông thường để thực hiện phép cộng dịch bit trước khi nhân.
- Độ chính xác của mô hình đạt 92.87% (thấp hơn một chút so với mục tiêu kỳ vọng ban đầu là >95%), và cấu trúc đầu ra hiện đang cố định tối đa 4 làn đường theo phân bố của tập dữ liệu TuSimple.
Hướng mở rộng được tác giả định hướng:
- Nghiên cứu cải tiến cấu trúc mạng CNN để tiếp tục nâng cao độ chính xác phân loại mà không làm tăng đáng kể số lượng tham số.
- Chuyển đổi và hiện thực hóa thiết kế lên các họ vi mạch FPGA thế hệ mới hơn (như Xilinx UltraScale hoặc UltraScale+ MPSoC) nhằm tận dụng trọn vẹn khối DSP đầy đủ chức năng và tích hợp hệ thống xử lý trên chip (SoC).
- Mở rộng kiến trúc phần cứng để xử lý đồng thời các tác vụ thị giác máy tính khác trong ADAS như phát hiện biển báo giao thông hoặc nhận diện chướng ngại vật.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo có giá trị cao đối với:
- Sinh viên và học viên chuyên ngành: Kỹ thuật Máy tính, Điện tử - Viễn thông, Hệ thống Nhúng và Khoa học Máy tính đang thực hiện đồ án, khóa luận hoặc nghiên cứu về gia tốc phần cứng cho trí tuệ nhân tạo (Edge AI / Hardware Acceleration).
- Kỹ sư thiết kế vi mạch và FPGA: Tham khảo phương pháp unrolling vòng lặp tích chập (Incha/Outcha), kỹ thuật khai thác bộ nhân đôi trên DSP48E2, kiến trúc Line Buffer xử lý ảnh thời gian thực và phương pháp hiện thực hàm phi tuyến Sigmoid bằng phép xấp xỉ đa thức fixed-point.
- Nhà phát triển hệ thống ADAS: Cung cấp phương pháp luận hoàn chỉnh từ việc thiết kế mô hình AI tinh gọn, lượng tử hóa INT8 trên PyTorch đến việc xây dựng hệ thống nhúng giao tiếp PCIe tốc độ cao với máy tính chủ.
Câu hỏi thường gặp
1. Tại sao tác giả không sử dụng các mô hình phân vùng ảnh (segmentation) truyền thống cho bài toán nhận diện làn đường?
Các mô hình segmentation truyền thống (như U-Net, ENet, LaneNet) tạo ra ma trận đầu ra dày đặc có cùng kích thước với ảnh đầu vào. Do vạch kẻ đường có đặc tính hình học dài và mỏng, việc biểu diễn bằng từng nhóm điểm ảnh dày đặc không chứa trực tiếp các thông số hình học (như độ dốc, góc nghiêng) và đòi hỏi các thuật toán hậu xử lý rất phức tạp trên CPU để gom cụm và trích xuất thông tin, gây tắc nghẽn thời gian thực.
2. Kỹ thuật lượng tử hóa nào được áp dụng và tác động thế nào đến độ chính xác của mô hình?
Tác giả áp dụng kỹ thuật lượng tử hóa tĩnh (Static Quantization) sang số nguyên 8-bit (INT8) thông qua PyTorch. Kết quả thực nghiệm cho thấy độ chính xác của mô hình trên tập TuSimple chỉ giảm nhẹ từ 93.03% (ở định dạng FP32) xuống 92.87% (ở định dạng INT8), chứng minh mô hình giữ được độ chính xác ổn định mà không cần áp dụng kỹ thuật phức tạp hơn là Quantization-aware Training.
3. Vì sao hệ thống phần cứng không cần sử dụng bộ nhớ DRAM ngoài trong quá trình vận hành?
Do mô hình CNN được thiết kế tinh gọn và toàn bộ trọng số đã được lượng tử hóa xuống 8-bit, tổng dung lượng bộ nhớ của mô hình đủ nhỏ để lưu trữ hoàn toàn trên các khối Block RAM (BRAM) nội vi của FPGA. Kết hợp với kiến trúc Line Buffer và FIFO truyền dữ liệu trực tiếp giữa các tầng, hệ thống triệt tiêu hoàn toàn nhu cầu đọc/ghi dữ liệu trung gian vào DRAM ngoài, từ đó loại bỏ độ trễ giao tiếp bộ nhớ và tăng tốc độ xử lý.
4. Tại sao cấu hình Config6 lại đạt hiệu quả tối ưu nhất trong 6 cấu hình phần cứng được khảo sát?
Config6 giải quyết được bài toán cân bằng tài nguyên và thông lượng: cấu hình này dùng Incha-quad cho 3 tầng đầu để đáp ứng lượng tính toán lớn, sử dụng Incha-double và Incha-single cho các tầng encoder tiếp theo để tận dụng khoảng trống thời gian do các tầng có bước nhảy (stride = 2) tạo ra mà không gây nghẽn đường ống, đồng thời sử dụng Outcha-single cho các tầng đầu ra có số kênh đầu vào lớn hơn kênh đầu ra ($C_{in} > C_{out}$).
5. Hiệu năng thực tế của bộ gia tốc phần cứng trên FPGA VC707 vượt trội hơn GPU NVIDIA Tesla T4 ở điểm nào?
Bộ gia tốc trên FPGA Virtex-7 VC707 đạt tốc độ xử lý thực tế 549 FPS (nhanh hơn mức 348 FPS của GPU Tesla T4 khoảng 1.58 lần), trong khi chỉ tiêu thụ mức công suất rất thấp là 8.129 W (tương đương thông lượng 296.26 GOPS và hiệu suất năng lượng 36.44 GOPS/W), đáp ứng vượt mức mục tiêu ban đầu đề ra (>150 FPS, <10 W).
Kết luận
Khóa luận tốt nghiệp của tác giả Dư Cẩm Vinh đã giải quyết trọn vẹn bài toán nhận diện làn đường thời gian thực phục vụ hệ thống ADAS thông qua việc kết hợp giữa mô hình CNN tinh gọn và bộ gia tốc phần cứng trên FPGA. Bằng việc đề xuất quy tắc biểu diễn dạng hàng (row-wise), kỹ thuật lượng tử hóa tĩnh 8-bit và kiến trúc đường ống sâu không phụ thuộc DRAM ngoài, hệ thống đạt tốc độ xử lý 549 FPS với công suất chỉ 8.129 W trên FPGA Xilinx Virtex-7 VC707. Công trình là một đóng góp kỹ thuật hoàn chỉnh và có giá trị thực tiễn cao trong lĩnh vực thiết kế phần cứng nhúng tối ưu cho các thuật toán trí tuệ nhân tạo.