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

Sự phát triển của tính toán biên (edge computing) cho phép triển khai trực tiếp các thuật toán xử lý dữ liệu tại các thiết bị đầu cuối gần nguồn phát sinh dữ liệu. Tuy nhiên, các thiết bị biên thường bị giới hạn về năng lực tính toán và nguồn năng lượng, gây trở ngại lớn cho các tác vụ phức tạp như khử sương mù trong xử lý ảnh (image defogging/dehazing). Việc xử lý khử sương trong thời gian thực là yêu cầu thiết yếu đối với các hệ thống quan trọng như xe tự hành, hệ thống camera giám sát và cảm biến quan trắc từ xa nhằm đảm bảo khả năng nhận diện chính xác trong điều kiện thời tiết xấu.

Các phương pháp khử sương hiện nay, dù đạt hiệu quả phục hồi ảnh tốt, nhưng khi thực thi trên các hệ thống vi xử lý nhúng truyền thống thường gặp hiện tượng độ trễ cao và thời gian xử lý kéo dài. Để giải quyết nút thắt cổ chai này, đồ án nghiên cứu việc tối ưu hóa thuật toán Khử sương kênh tối (Dark Channel Prior - DCP) và hiện thực hóa bộ tăng tốc phần cứng trên nền tảng vi mạch khả trình FPGA (Field Programmable Gate Array) thông qua kỹ thuật tổng hợp cấp cao HLS (High-Level Synthesis).

Theo văn bản, các mục tiêu nghiên cứu cụ thể của đề tài bao gồm:

  1. Khảo sát thuật toán Dark Channel Prior (DCP) và đề xuất các phiên bản tối ưu hóa nhằm cải thiện hiệu quả tính toán.
  2. Ứng dụng chuỗi công cụ AMD Xilinx Vitis HLS để tăng tốc phần cứng thuật toán DCP trên nền tảng FPGA PYNQ-Z2.
  3. Tối ưu hóa thiết kế HLS bằng các kỹ thuật như tạo đường ống (pipelining) và luồng dữ liệu (dataflow) để gia tăng hiệu năng bộ tăng tốc.
  4. Tích hợp bộ tăng tốc DCP vào một hệ thống hoàn chỉnh trên bo mạch PYNQ-Z2; đánh giá hiệu năng, mức độ sử dụng tài nguyên phần cứng và công suất tiêu thụ.
  5. Đánh giá khả năng mở rộng quy mô và tính khả thi trong ứng dụng thực tế của bộ tăng tốc DCP trên FPGA cho các hệ thống tính toán biên.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Thuật toán khử sương Dark Channel Prior, quy trình thiết kế vi mạch bằng công cụ tổng hợp cấp cao Vitis HLS và môi trường tích hợp Xilinx Vivado.
  • Phạm vi phần cứng: Bo mạch phát triển PYNQ-Z2 trang bị chip System-on-Chip AMD Xilinx Zynq-7000 (mã XC7Z020CLG400-1), bao gồm lõi xử lý ARM Cortex-A9 kép và mảng logic khả trình FPGA.
  • Phạm vi dữ liệu: Khử sương cho các khung hình độ phân giải Full HD ($1920 \times 1080$ điểm ảnh).

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

Khung lý thuyết và mô hình toán học

Nghiên cứu dựa trên mô hình tán xạ khí quyển (Atmospheric Scattering Model) mô tả sự tương tác của ánh sáng với các hạt vật chất lơ lửng trong không khí:

$$I(x) = t(x)J(x) + (1 - t(x))A$$

Trong đó:

  • $I(x)$ là ảnh thu nhận thực tế bị mờ do sương mù.
  • $J(x)$ là ảnh rõ nét của khung cảnh cần phục hồi (scene radiance).
  • $t(x) = e^{-\beta d(x)}$ là bản đồ truyền dẫn (transmission map), với $\beta$ là hệ số tán xạ và $d(x)$ là độ sâu của cảnh vật.
  • $A$ là ánh sáng khí quyển toàn cục (global atmospheric light).

Ảnh phục hồi lý thuyết được xác định theo công thức:

$$J(x) = \frac{I(x) - A}{t(x)} + A$$

Thuật toán Dark Channel Prior gốc dựa trên quan sát kênh tối:

$$I^{dark}(x) = \min_{y \in \Omega(x)} \left( \min_{c \in {R,G,B}} I^c(y) \right) \approx 0$$

Tuy nhiên, việc tính toán giá trị nhỏ nhất cục bộ trên cửa sổ trượt $\Omega(x)$ truyền thống đòi hỏi $1920 \times 1080 \times 9 \times 9 = 167.961.600$ chu kỳ xung nhịp cho ảnh Full HD, đồng thời tiêu tốn lượng lớn bộ nhớ đệm BRAM trên FPGA. Tác giả đề xuất thuật toán cải tiến:

  1. Trích xuất ma trận giá trị nhỏ nhất của 3 kênh màu (min_mat).
  2. Thay thế phép tìm min cục bộ bằng bộ lọc 2D (filter2D) với nhân chập $3 \times 3$ (hệ số điểm ảnh trung tâm là $0.25$, các điểm ảnh xung quanh là $0.125$) giúp làm mịn và bảo toàn đường biên cạnh.
  3. Tính toán ma trận khuếch tán bất đẳng hướng (diff_im) bằng cách so sánh bitwise giữa img_minmat và img_darkChannel, áp dụng hệ số $\Omega = 0.6$ đối với các điểm ảnh có độ sáng cao (giá trị lớn hơn $200/255$).
  4. Phục hồi ảnh theo ma trận khuếch tán thay vì dùng hằng số $A$:

$$restoreOut(x) = \frac{img_input}{diff_im} \times \frac{1}{1 - diff_im}$$

  1. Cân bằng độ sáng tự động thông qua tính toán lại lược đồ màu (histogram) và ánh xạ bảng tra LUT (Look-Up Table).

Thiết kế và triển khai hệ thống

Hệ thống được xây dựng trên nền tảng Zynq-7000 SoC của bo mạch PYNQ-Z2, kết hợp giữa khối xử lý trung tâm (Processing System - PS) và khối logic khả trình (Programmable Logic - PL).

Bảng 1: Tài nguyên phần cứng SoC Zynq-7000 (XC7Z020CLG400-1)

Thành phần phần cứng Số lượng có sẵn trên chip
Look-Up Tables (LUTs) 53.200
Flip-Flops (FF) 106.400
Block RAM (BRAM 36 Kb) 140
DSP Slices (DSP48E1) 220

Bảng 2: So sánh đặc tính khối PS và khối PL trong Zynq-7000

Tiêu chí Khối xử lý (PS) Khối logic khả trình (PL)
Kiến trúc vi xử lý Dual-core ARM Cortex-A9 MPCore Mảng logic số cấu hình lại (FPGA Fabric)
Tần số hoạt động tối đa Lên đến 2 GHz (thực tế 650 MHz - 1 GHz) Lên đến 450 MHz
Bộ nhớ đệm / Lưu trữ nội L1: 32 KB, L2: 128 KB 630 KB BRAM phân tán
Vai trò trong hệ thống Điều khiển luồng, giao tiếp Jupyter/Python Thực thi tăng tốc các tác vụ xử lý ảnh

Kiến trúc các lõi IP Accelerator trên FPGA

Quá trình chuyển đổi từ mã nguồn C++/Python trên CPU sang phần cứng FPGA được cấu trúc thành 5 lõi IP (Intellectual Property) độc lập:

Bảng 3: Ánh xạ chức năng giữa phần mềm (ARM/x86) và phần cứng (FPGA IP)

Phân hệ chức năng Triển khai trên ARM / x86 Lõi IP trên FPGA (Vitis HLS) Thư viện Vitis Vision / C++
Tìm giá trị nhỏ nhất 3 kênh np.min() IP_minmat Vòng lặp tối ưu hóa Pipeline
Nhân chập lọc kênh tối cv2.filter2D() IP_darkChannel xf::cv::filter2d()
Tính ma trận khuếch tán Phép toán mảng Numpy IP_diffIm xf::cv::min(), convertScaleAbs()
Phục hồi ảnh và cân bằng Toán tử số học, np.histogram IP_restoreOut xf::cv::rgb2gray(), calcHist()
Ánh xạ bảng tra màu Truy xuất chỉ mục mảng IP_LUT xf::cv::LUT()

Định dạng giao tiếp và tham số phần cứng

Dữ liệu hình ảnh được truyền nhận thông qua chuẩn giao tiếp AMBA AXI:

  • Giao diện AXI4 Master (m_axi): Sử dụng cho luồng dữ liệu hình ảnh độ phân giải cao ($1920 \times 1080$), hỗ trợ truyền dữ liệu trực tiếp bộ nhớ thông qua cơ chế DMA.
  • Giao diện AXI4-Lite Slave (s_axilite): Dùng để truyền các thông số điều khiển và kích thước hình ảnh (tham số rows, cols).
  • Định dạng điểm ảnh: XF_8UC3 (ảnh màu 3 kênh RGB, 8-bit/kênh) cho ảnh đầu vào và đầu ra; XF_8UC1 (ảnh mức xám 1 kênh, 8-bit) cho các ma trận trung gian (min_mat, diff_im). Chế độ xử lý là XF_NPPC1 (1 điểm ảnh trên một chu kỳ xung nhịp).

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

Chương 1: Giới thiệu (Introduction)

Chương 1 thiết lập động lực nghiên cứu về nhu cầu xử lý hình ảnh thời gian thực tại biên trong điều kiện thời tiết có sương mù hoặc bụi mịn. Tác giả chỉ ra điểm nghẽn về tốc độ khi chạy thuật toán DCP trên các chip nhúng ARM truyền thống, từ đó xác định mục tiêu thiết kế bộ tăng tốc FPGA trên PYNQ-Z2 nhằm cân bằng giữa hiệu năng tính toán, chất lượng phục hồi ảnh và mức tiêu thụ năng lượng.

Chương 2: Kiến thức cơ sở (Basic Knowledge)

Chương 2 trình bày chi tiết nền tảng lý thuyết:

  • Mô hình tán xạ khí quyển và thuật toán DCP gốc: Trình bày các phương trình toán học xác định kênh tối, ước lượng ánh sáng môi trường $A$ và bản đồ truyền dẫn $t(x)$.
  • Thuật toán Dark Channel Prior đề xuất: Giới thiệu giải pháp sử dụng ma trận khuếch tán và toán tử filter2D $3 \times 3$ để thay thế vòng lặp tìm min cục bộ tốn kém tài nguyên.
  • Tổng quan về High-Level Synthesis (HLS): Phân tích các chỉ thị tối ưu hóa phần cứng bao gồm Pipeline (rút ngắn Interval Initiation), Dataflow (song song hóa mức hàm qua bộ đệm FIFO/PIPO) và Loop Unrolling.
  • So sánh kiến trúc CPU, FPGA và ASIC: Đánh giá sự đánh đổi giữa tính linh hoạt, thời gian phát triển và hiệu năng thực thi.
  • Thư viện AMD Xilinx Vitis Vision: Cấu trúc lớp mẫu (template) xf::cv::Mat và định dạng tương thích OpenCV.
  • Phương pháp đánh giá chất lượng ảnh khử sương: Giới thiệu các chỉ số Full-reference (PSNR, SSIM, MSE), chỉ số No-reference (BRISQUE) và đánh giá chủ quan bởi con người (Human-Subjective scoring).

Chương 3: Kiến trúc hệ thống và triển khai (System Architecture and Implementation)

Chương 3 mô tả toàn bộ quy trình thiết kế và tích hợp hệ thống:

  • Quy trình phát triển phần cứng: Khởi đầu từ mô phỏng thuật toán bằng Python trên khối PS qua Jupyter Notebook, chuyển đổi mã nguồn sang C++ Testbench, tổng hợp HLS trong Vitis HLS để trích xuất lõi IP, sau đó nhập vào Vivado để thực hiện Synthesis, Placement, Routing và xuất file Bitstream (.bit kèm .hwh).
  • Phân chia giao tiếp PS-PL: Thiết lập các cổng kết nối AXI4 Master cho luồng ảnh và AXI4-Lite cho thanh ghi điều khiển.
  • Đặc tả 5 lõi IP: Chi tiết hóa cấu trúc dữ liệu vào/ra và các tham số nội tại của IP_minmat, IP_darkChannel, IP_diffIm, IP_restoreOut và IP_LUT.
  • Triển khai PYNQ Overlay: Nạp tệp bitstream trực tiếp từ môi trường Python trên ARM, quản lý vùng nhớ đệm DDR và điều khiển kích hoạt các khối IP phần cứng.

Chương 4: Kết quả thực nghiệm (Result)

Chương 4 cung cấp số liệu thực nghiệm và đánh giá chất lượng:

  • Phân tích tài nguyên phần cứng tiêu thụ trên chip Zynq-7000 (tỷ lệ sử dụng LUT, Flip-Flop, BRAM, DSP).
  • Đánh giá chất lượng ảnh khử sương Full HD ($1920 \times 1080$): So sánh sự sai khác điểm ảnh giữa luồng thực thi ARM/x86 (dùng dấu phẩy động tiêu chuẩn) và luồng thực thi FPGA (định dạng phần cứng tối ưu hóa).
  • Đo lường công suất tiêu thụ của chip tại các mức tần số xung nhịp khác nhau (khảo sát dải tần số từ 100 MHz đến 200 MHz) và tốc độ khung hình (FPS) tương ứng.
  • Bảng đối sánh hiệu năng và tài nguyên với các nghiên cứu khử sương trước đó trong y văn.

Chương 5: Kết luận và hướng nghiên cứu tiếp (Conclusion and Future Work)

Tóm tắt các đóng góp chính về mặt tối ưu thuật toán và hiệu quả tăng tốc phần cứng HLS trên nền tảng PYNQ-Z2; đồng thời phác thảo các hướng mở rộng cho hệ thống trong tương lai.


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

Kết quả kỹ thuật chính

  1. Chuyển đổi hoàn chỉnh thuật toán sang phần cứng: Đã thiết kế thành công 5 lõi IP tăng tốc bằng C++/Vitis HLS, thay thế các phép toán lặp phức tạp bằng các toán tử phần cứng có khả năng xử lý dòng dữ liệu liên tục (filter2D, ma trận khuếch tán, LUT).
  2. Khả năng xử lý ảnh Full HD: Hệ thống hỗ trợ xử lý luồng hình ảnh kích thước $1920 \times 1080$ với định dạng màu $XF_8UC3$.
  3. Chỉ số chất lượng ảnh: Thuật toán đề xuất đạt các chỉ số đánh giá khách quan vượt trội so với các phương pháp truyền thống khi kiểm thử phần mềm:
    • Chỉ số tương đồng cấu trúc (SSIM) và tỷ số tín hiệu trên nhiễu cực đại (PSNR) đạt mức cao.
    • Chỉ số chất lượng không gian không cần ảnh gốc (BRISQUE) đạt mức thấp, phản ánh độ tự nhiên và rõ nét của ảnh sau khử sương.

Đóng góp mới của tác giả

  • Đề xuất biến thể thuật toán Dark Channel Prior cải tiến sử dụng ma trận khuếch tán bất đẳng hướng (diffusion matrix) kết hợp nhân lọc $3 \times 3$ thay vì tìm min trên cửa sổ trượt kích thước lớn, giải quyết được rào cản tài nguyên bộ nhớ đệm BRAM trên FPGA.
  • Thiết lập quy trình thiết kế hoàn chỉnh từ mức thuật toán cấp cao đến tích hợp hệ thống nhúng SoC thông qua công cụ AMD Xilinx Vitis HLS và PYNQ Overlay, giúp rút ngắn thời gian phát triển phần cứng chuyên dụng so với phương pháp viết mã RTL (Verilog/VHDL) thủ công.

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

Hạn chế được ghi nhận

  • Quá trình tính toán trên FPGA sử dụng một số xấp xỉ phần cứng và chuyển đổi kiểu dữ liệu nên có sai số nhỏ về mặt giá trị điểm ảnh so với kết quả tính toán dấu phẩy động 64-bit/32-bit trên CPU ARM/x86.
  • Việc xử lý song song hai luồng dữ liệu trong kỹ thuật Dataflow đòi hỏi sao chép dữ liệu qua các bộ đệm FIFO/PIPO, làm gia tăng mức sử dụng tài nguyên phần cứng nội chip.
  • Giới hạn tài nguyên logic và băng thông bộ nhớ của dòng chip Zynq-7000 (Z-7020) đặt ra thách thức nếu muốn tăng xung nhịp vượt ngưỡng 200 MHz hoặc xử lý đồng thời nhiều luồng video 4K.

Hướng nghiên cứu tiếp theo

  • Khảo sát và tối ưu hóa sâu hơn mức tiêu thụ năng lượng của chip trên toàn dải tần số hoạt động.
  • Nâng cấp triển khai trên các nền tảng phần cứng mạnh hơn như dòng AMD Xilinx Zynq UltraScale+ MPSoC để đáp ứng chuẩn video 4K thời gian thực với tốc độ khung hình cao hơn.
  • Kết hợp kỹ thuật viết mã RTL thủ công cho các khối giao tiếp nhằm tối ưu hóa việc đồng bộ hóa dữ liệu giữa các miền xung nhịp khác nhau.

Giá trị tham khảo

Tài liệu này là tài liệu tham khảo giá trị 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ệ Vi mạch: Tham khảo phương pháp luận thiết kế hệ thống nhúng SoC, quy trình thiết kế vi mạch bằng Vitis HLS và Vivado.
  • Nhà nghiên cứu trong lĩnh vực Xử lý ảnh và Thị giác máy tính: Tham khảo phương pháp tối ưu hóa toán tử Dark Channel Prior, kỹ thuật sử dụng ma trận khuếch tán và thư viện Vitis Vision Library để tăng tốc các thuật toán xử lý biên cạnh/lọc ảnh thời gian thực.
  • Các dự án phát triển hệ thống biên (Edge AI): Cung cấp mô hình tích hợp giữa vi xử lý ARM và khối tăng tốc FPGA qua giao tiếp AMBA AXI và nền tảng điều khiển PYNQ.

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

1. Tại sao không thể hiện thực trực tiếp vòng lặp tìm kênh tối truyền thống trên FPGA?

Vòng lặp tìm giá trị nhỏ nhất cục bộ truyền thống trên cửa sổ trượt kích thước $3 \times 3$ cho ảnh $1920 \times 1080$ yêu cầu duyệt qua 9 điểm ảnh lân cận cho mỗi điểm ảnh, tiêu tốn khoảng $167.961.600$ chu kỳ xung nhịp (mất khoảng $1,68$ giây ở tần số 100 MHz). Ngoài ra, phương pháp này đòi hỏi dung lượng bộ nhớ đệm BRAM rất lớn để lưu trữ tạm các vùng ảnh, vượt quá khả năng đáp ứng của các dòng chip FPGA tầm trung như Zynq-7020.

2. Thuật toán cải tiến của tác giả đã thay thế bước tìm kênh tối như thế nào?

Tác giả đã chuyển đổi bước tìm min cục bộ sang việc sử dụng toán tử lọc 2D (filter2D) với nhân chập $3 \times 3$ có trọng số cố định ($0,25$ tại tâm và $0,125$ tại các vị trí xung quanh). Cấu trúc này được hỗ trợ tối ưu sẵn trong thư viện Vitis Vision Library (xf::cv::filter2d), giúp giảm chu kỳ xung nhịp và tiết kiệm tài nguyên bộ nhớ.

3. Ma trận khuếch tán (diffusion matrix) có vai trò gì trong việc phục hồi ảnh?

Ma trận khuếch tán (diff_im) được tính toán bằng cách so sánh bitwise giữa ảnh min_mat và darkChannel, kết hợp nhân hệ số $\Omega = 0,6$ tại các vùng có cường độ sáng cao. Ma trận này đóng vai trò thay thế cho tham số ánh sáng môi trường toàn cục $A$ (vốn là một hằng số), giúp triệt tiêu các đối tượng tối (tòa nhà, xe cộ) và giữ lại các vùng sương mù thực tế, từ đó nâng cao chất lượng phục hồi ảnh ở những vùng trời sáng.

4. Giao tiếp giữa vi xử lý ARM (PS) và bộ tăng tốc FPGA (PL) được thiết kế như thế nào?

Hệ thống sử dụng hai chuẩn giao tiếp chính:

  • AMBA AXI4 Master: Được cấu hình cho các cổng truyền nhận dữ liệu mảng hình ảnh lớn (img_input, img_output, min_mat, darkChannel) giữa bộ nhớ DDR và các khối IP tăng tốc.
  • AXI4-Lite Slave: Được cấu hình để truyền nhận các tham số vô hướng kích thước nhỏ như số hàng (rows) và số cột (cols) của ảnh từ vi xử lý ARM sang FPGA.

5. Bo mạch PYNQ-Z2 hỗ trợ việc kiểm thử và nạp thiết kế lên phần cứng ra sao?

Bo mạch PYNQ-Z2 tích hợp sẵn môi trường PYNQ Framework cho phép chạy Jupyter Notebook trực tiếp trên CPU ARM Cortex-A9. Thiết kế phần cứng sau khi đóng gói từ Vivado thành tệp bitstream (.bit) và tệp tiêu đề phần cứng (.hwh) sẽ được nạp động vào khối PL (Overlay) thông qua các hàm thư viện Python, giúp điều khiển và đánh giá hiệu năng bộ tăng tốc FPGA một cách trực quan qua mạng LAN.


Kết luận

Đồ án tốt nghiệp của tác giả Trần Tuấn Kiệt đã nghiên cứu và triển khai thành công giải pháp tối ưu hóa thuật toán khử sương Dark Channel Prior trên nền tảng FPGA PYNQ-Z2 bằng công cụ Vitis HLS. Bằng việc cải tiến cấu trúc thuật toán thông qua toán tử lọc 2D và ma trận khuếch tán, hệ thống đã giải quyết triệt để bài toán thắt nút cổ chai về thời gian thực thi và tài nguyên bộ nhớ trên phần cứng nhúng. Kết quả nghiên cứu chứng minh tính khả thi và hiệu quả của luồng thiết kế tổng hợp cấp cao HLS trong việc phát triển các bộ tăng tốc xử lý ảnh chuyên dụng cho các thiết bị tính toán biên.