Triển khai thuật toán Fusion trên nền tảng FPGA cho ứng dụng xử lý ảnh

MỤC LỤC

BOARD DE2i-150 và DE1-SoC

DE1-SoC

- DE1-SoC Development Kit được xây dựng trên nền tảng Altera System- on-Chip (SoC) FPGA. Kit cũng chứa đầy đủ các thành phần từ bộ nhớ DDR3 high-speed, Video in/out, Ethernet, ADC….

THUẬT TOÁN FUSION

Thuật toán

- Trên FPGA, IP Core thực hiện convolution nhận vào các pixel lần lượt theo chiều từ trái sang phải, từ trên xuống dưới, do vậy cần line buffer đóng vai trò lưu trữ lại các pixel để thực hiện nhân chập, ví dụ: ảnh đầu vào có kích thước 640x480 và kernel có kích thước 3x3, đến khi pixel hàng 3 cột 3 được đưa vào thì phép nhân chập mới hoàn thành xong cho pixel đầu tiên ảnh đầu ra. - Để thực hiện thuật toán Fusion với đầu vào là hai ảnh thu được từ camera thường và camera nhiệt, ta thực hiện tính toán Laplacian Pyramid trên ảnh nhiệt, expand lại nếu kích thước ảnh trên các level nhỏ hơn ảnh gốc về lại kích thước ban đầu rồi cộng với ảnh từ camera thường đầu vào. - Khi triển khai trên FPGA, thay vì việc xây dựng các IP Core để thực hiện các thao tác REDUCE, EXPAND, ta áp dụng thuật toán àtrous để đơn giản hóa các thao tác về phép nhân chập (convolution) thông thường nhưng với bộ lọc Gaussian được chèn vào các hàng, các cột có giá trị 0.

Như vậy với level đầu tiên Gaussian kernel có kích thước gốc là 5x5, level tiếp theo có kích thước 9x9 (vì chèn thêm vào giữa các hàng, cột ban đầu một hàng, một cột chỉ chứa giá trị 0), tiếp theo nữa là 17x17… Thuật toán àtrous giúp tránh được việc down-sample với mỗi level trên Gaussian Pyramid trước khi thực hiện nhân chập, đồng thời vì ảnh đầu ra có kích thước giống với ảnh đầu vào nên thao tác up-sample khi kết hợp thông tin cũng có thể được bỏ qua. - Sau khi tính toán xong Laplacian Pyramid với ảnh nhiệt, thực hiện cộng các level với ảnh camera thường đầu vào, ta thu được ảnh Fusion đầu ra. |∇ | sẽ có giá trị lớn, đại lượng thứ hai trong công thức sẽ được tối ưu, tạo ra ảnh B được làm trơn.

- Saliency extraction dùng cho việc tính toán trọng số để kết hợp thông tin hai ảnh từ camera thường và camera nhiệt với ý nghĩa trên ảnh nhiệt, điểm ảnh có giá trị càng lớn thì có trọng số càng cao (áp dụng với ảnh nhiệt white-hot, có thể áp dụng tương tự với ảnh black-hot). % Saliency extraction, tính các hệ số để kết hợp hai ảnh % Tham khảo công thức (10).

Hình 14: Gaussian Pyramid
Hình 14: Gaussian Pyramid

Phương pháp triển khai trên FPGA

- Các khối Gaussian 5x5, Gaussian 9x9, Gaussian 17x17 thực hiện nhân chập Gaussian với kích thước tương ứng. - Ảnh đầu ra của các khối nhân chập được trừ đi từ ảnh đầu vào, và cộng với ảnh thường để tạo ảnh fusion. - Các khối nhân chập hoạt động đồng thời, các pixel được đưa vào tuần tự và liên tục từ đầu vào tới đầu ra.

+ Ảnh thường và ảnh nhiệt sau LEP filter được đưa vào khối kết hợp để tạo ảnh Fusion đầu ra dựa trên trọng số đã tính toán. - Dưới đây là sơ đồ ghép nối giữa IP Core Fusion và các module khác trên hệ thống hoàn chỉnh cuối cùng chạy trên board DE2i-150 để thử nghiệm. Với board DE1- SoC hoàn toàn tương tự vì nhìn chung cả hai đều theo kiến trúc SoC, nhưng thay vì bus PCIe như DE2i-150, DE1-SoC có hệ thống bus high-bandwidth interconnect backbone tốc độ cao giữa FPGA và HPS.

- IP Core IP Compiler PCIe thực hiện theo chuẩn giao thức PCIe để truyền dữ liệu qua lại giữa CPU và FPGA, các Base Address Register (BAR1, BAR2) được dùng để ghép nối với bus điều khiển của các IP Core khác và từ đó CPU có thể điều khiển các IP Core này bằng cách đọc/ghi giá trị các thanh ghi qua bus PCIe. - Hai ảnh đầu vào được gửi từ RAM (HPS/CPU) qua đường bus PCIe Gen1 x1 đến hai vùng nhớ khác nhau trên SDRAM, IP Core Scatter-Gather DMA trên FPGA nhận lệnh từ CPU để làm nhiệm vụ truyền dữ liệu này. - Các IP Core Video DMA có hai mode: Memory To Avalon-ST (mode 1) hoặc Avalon-ST To Memory (mode 2), để đọc dữ liệu từ SDRAM, ta cấu hình mode 1, dữ liệu sẽ được gửi ra theo đúng giao thức Avalon Video Streaming Source, ngược lại để ghi dữ liệu ra SDRAM, ta cấu hình mode 2.

- IP Core Clipper làm nhiệm vụ padding ảnh đầu vào giá trị 0 xung quanh viền ảnh, ta thêm vào IP Core này vì trong quá trình thực hiện nhân chập kích thước ảnh sẽ bị giảm đi, ta cần giữ lại theo đúng chuẩn 640x480 để hiển thị ra VGA. - Khối hiển thị VGA bao gồm hai IP Core là Frame Reader và Clocked Video Output. Frame Reader đọc ảnh từ SDRAM và gửi ra theo giao thức Avalon Video Streaming Source cho IP Core Clocked Video Output để tạo các tín hiệu đầu ra VGA theo đúng chuẩn, bao gồm các tín hiệu: R, G, B, HSync, VSync.

- Ở phần sau, ta sẽ nói về cơ chế thêm vào một switch để chuyển đổi hình ảnh hiển thị đầu ra trên màn hình VGA theo cơ chế polling, cho phép người dùng lựa chọn hiển thị kết quả của hoặc thuật toán Fusion thứ nhất hoặc của thuật toán Fusion thứ hai.

Hình 17: Sơ đồ khối tổng quan Gaussian pyramid decomposition
Hình 17: Sơ đồ khối tổng quan Gaussian pyramid decomposition

TRIỂN KHAI THUẬT TOÁN TRÊN FPGA

Triển khai

- Các khối Decomposition_1, Decomposition_2, Decomposition_3 trong sơ đồ tương tự nhau, thực hiện lần lượt nhân chập Gaussian với các bộ lọc kích thước 5x5, 9x9 và 17x17, do vậy chỉ khác ở phần line buffer. - Các khối bên trong tính toán nhân chập ảnh với Gaussian 5x5 và đưa ra kết quả ảnh đầu ra theo chuẩn Avalon Video Streaming Interface đã trình bày trong mục b.

Hình 26c: Sơ đồ bên trong của LineBuffer
Hình 26c: Sơ đồ bên trong của LineBuffer

Một vài thông số cài đặt, cấu hình các khối tính toán

+ Các tham số có thể cấu hình bao gồm: số bit của các giá trị đầu vào/đầu ra, phép nhân số có dấu/không dấu, số nguyên/fixed point, sử dụng các khối DSP hay Logic elements, số chu kỳ pipeline. + Các tham số có thể tính toán bao gồm: số lượng giá trị đầu vào, pipeline, asynchronous clear port. + Các tham số có thể cấu hình bao gồm: số lượng word, kích thước mỗi word, giá trị khởi tạo, register output port, enable port.

Hình 34: Các tham số cấu hình của khối Multiplier/Product
Hình 34: Các tham số cấu hình của khối Multiplier/Product

KẾT QUẢ THỬ NGHIỆM

    - Để thuận tiện cho việc chạy thử nghiệm, cả hai IP Core Fusion thực hiện theo hai thuật toán khác nhau được đưa vào 1 project, ghép nối với các IP Core Video DMA, Clipper cùng hoạt động song song và kết quả đưa ra hai vùng nhớ khác nhau. Ta dùng một switch trên board để lựa chọn đầu ra hiển thị qua cổng VGA, trạng thái của switch được nhận biết theo cơ chế polling (kiểm tra trạng thái mỗi 30-40 ms). (a) ảnh thường, (b) ảnh nhiệt, (c) ảnh fusion theo phương pháp được đề xuất, (d)-(n) ảnh fusion theo các phương pháp được thực hiện trước đó.

    Fusion là thuật toán xử lý ảnh hữu ích và được ứng dụng nhiều trong thực tế. Trong đồ án tốt nghiệp, em đã xây dựng IP Core thực hiện hai phương pháp Fusion theo chuẩn vào ra Avalon Video Streaming Interface – giao thức thường được dùng trong các IP Core xử lý ảnh/video được cung cấp bởi Intel (Altera). Phương pháp Gaussian Pyramid Decomposition trên một vài tập dataset thử nghiệm có thể thấy khá nhiều nhiễu trong khi đó hướng tiếp cận với Saliency extraction và LEP filter có kết quả tốt hơn đáng kể.

    Em đã tìm hiểu và xây dựng hệ thống SoC, viết chương trình thực hiện các thử nghiệm thực tế trên môi trường Linux với tập dataset gồm rất nhiều ảnh liên tục có kích thước 640x480. Kết quả thử nghiệm trực tiếp được trên board tương tự kết quả mô phỏng trên sơ đồ khối Simulink đã xây dựng, và qua quan sát có thể thấy kết quả hình ảnh đầu ra khá tốt. Cuối cùng, một vài thông số về thời gian, năng lượng được so sánh khi thực hiện giữa CPU và FPGA nhằm mục đích tham khảo.

    Em xin chân thành cảm ơn thầy Nguyễn Đức Tiến đã tạo điều kiện về board thí nghiệm, về tài liệu và phương pháp thiết kế để giúp em hoàn thành đồ án tốt nghiệp, đồng thời cảm ơn kỹ sư Nguyễn Phi Long tại Viettel R&D đã nhiệt tình hỗ trợ trong quá trình tìm hiểu, xây dựng thuật toán từ các bài báo khoa học. Em rất mong nhận được phản hồi và góp ý từ thầy để bài làm và báo cáo được hoàn thiện hơn.

    Hình 51: Sơ đồ ghép nối IP Core trên DE2i-150
    Hình 51: Sơ đồ ghép nối IP Core trên DE2i-150