1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khóa luận tốt nghiệp Kỹ thuật máy tính: Thiết kế và hiện thực mạng nơ ron tích chập trên FPGA sử dụng kiến trúc Xception

74 5 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Và Hiện Thực Mạng Nơ Ron Tích Chập Trên FPGA Sử Dụng Kiến Trúc Xception
Tác giả Bựi Nguyễn Tuấn Kiệt, Nguyễn Minh Nhõn
Người hướng dẫn TS. Nguyễn Minh Sơn
Trường học Đại Học Quốc Gia TP. Hồ Chí Minh
Chuyên ngành Kỹ Thuật Máy Tính
Thể loại Khóa Luận Tốt Nghiệp
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 74
Dung lượng 26,83 MB

Cấu trúc

  • 3.9. Stride (Bước nhảy/TTƯỢT).................. St St SEkEErkkrirrkkrkrkkkkrkrkrkrkrkrkrek 19 Chương 4. CHI TIẾT VE THIẾT KE CAC MODULE XCEPTION (33)
  • 4.2. Thiết kế khối Convolution 3x3 stride 2 padding 0.. 1. Kernel 3x3 stride 2 padding 0. .22 2. Convolution Core 3x3 (35)
  • 4.3. Thiết kế khối Convolution 3x3 stride 1 padding 0.. 1. Kernel 3x3 stride 1 padding Ú.......................-- -- -c-cttketetEekekekerrekrrrerrrree 25 4.4. Thiết kế khối Convolution 3x3 stride 1 padding 1 - Depthwise (38)
    • 4.4.1. Kernel 3x3 stride 1 padding Ì.................................-- - 5< c‡cscsketerrkererekeree 26 4.5. Thiết kế khối Convolution 1x1 stride 1 padding 1 - Pointwise (40)
    • 4.5.1. Kernel 1x1 stride 1 padding 1 - Pointwise............................- ----5-cecccc+cccce+ 28 4.5.2. Convolution Core 1X Lice ceceseeeeeseeneseereeeesteeeseseanseeeseeeeeeseneees 29 4.6. Thiết kế khối Convolution 1x1 stride 2 padding 0 (42)
    • 4.6.1. Kernel 1x1 stride 2 padding Ú........................-- esses eseeeeseesesesteneseeneeeeenes 31 4.7. Thiết kế khối Convolution tông quát (45)

Nội dung

Kết quả sẽ được đánh giá theo các tiêu chí: * Tinh chính xác của thuật toán, kết quả sẽ được đánh giá dựa vào kết quả tính toán ở cơ sở lý thuyết và so sánh với kết quả model đã mô phỏng

Stride (Bước nhảy/TTƯỢT) St St SEkEErkkrirrkkrkrkkkkrkrkrkrkrkrkrek 19 Chương 4 CHI TIẾT VE THIẾT KE CAC MODULE XCEPTION

Stride là bước nhảy trong quá trình lọc lay data ảnh đầu vào chuẩn bị cho bước nhân tích chập Thường được sử dụng là stride 1 và stride 2.

Với mỗi lần nhảy, sẽ là lần nhân tích chập tương ứng giữa ma trận ảnh với số Kernel cố định được đặt sẵn.

Mô tả chỉ tiết các bước nhảy như hình 3.16 và 3.17 dưới đây miêu tả biểu diễn bước nhảy Stride: stride= rere | +E aaa

Hình 3.16 Mô tả bước stride 1 với ảnh đầu vào 6x6 va kernel 2x2 stride=2

Hình 3.17 Mô tả bước stride 2 với ảnh đầu vào 6x6 va kernel 2x2

Chương 4 CHI TIẾT VE THIET KE CÁC MODULE XCEPTION

Bảng 4.1 Mô tả tín hiệu interface của các khối chung thiết kế

Tín hiệu VO | Số bit Mô tả clk I 1 Xung clock hệ thông, kích cạnh lên. rst I 1 Reset bất đồng bộ tích cực thấp.

Kernel I 1 Giá trị trọng số từ file python

Valid In I 1 Tin hiệu báo có dữ liệu đi vào

Data In I 32 Dữ liệu đầu vào

IData_Out O 32 IDữ liệu kết quả sau khi thực hiện chức

Valid_Out O 1 Tin hiệu cho biết có dữ liệu đầu ra.

Line buffer là một kỹ thuật quan trọng trong thiết kế đường ống (pipeline), được sử dụng để trích xuất ma trận trong nhân tích chập Kỹ thuật này thực chất là một FIFO hoặc một tập hợp các D Flip-flop nối tiếp, với kích thước 32 bits.

Sơ đồ khối tổng quát được miêu tả như hình 4.1 bên dưới.

Valid_in ok Counter 1 rst

Bufer[0Eufer[1 Buffer [Lengnt-t] l2 _"wiđth-1:0] Data_Out

Hình 4.1 Mô tả sơ đồ khối Line Buffer

Thiết kế khối Convolution 3x3 stride 2 padding 0 1 Kernel 3x3 stride 2 padding 0 .22 2 Convolution Core 3x3

Khối Convolution 3x3 với stride 2 và padding 0 là một cấu trúc mạnh mẽ, kết hợp hai khối: kernel 3x3 với stride 2 và padding 0, cùng với Convolution Core 3x3 Trong quá trình xử lý, 9 dữ liệu ảnh và 9 dữ liệu kernel được đưa vào đầu vào, cho phép khối Kernel 3x3 phân tích và lọc ra các giá trị cần thiết để thực hiện phép nhân tích chập Kết quả cuối cùng được tạo ra từ việc nhân 9 giá trị từ input kernel với 9 giá trị đầu ra từ khối Kernel 3x3.

0, sau đó cộng tổng kết quả 9 phép nhân và cho ra kết quả ở output.

Khối này là khối bắt đầu của toàn bộ kiến trúc Xception Nó sẽ được thực thi

32 lần tạo ra 32 lớp ảnh có kích thước bằng 1 nửa kích thước ảnh ban đầu.

Sơ đỗ khối tổng quát của khối Convolution 3x3 stride 2 padding 0 cụ thể như hình 4.2 bên dưới.

Kernel_3x3_ Convo_Core ||Pata_out(31:0] stride2_ valid_out

Hình 4.2 Mô tả sơ đồ khối Convolution 3x3 stride 2 padding 0

Khói Kernel 3x3 với stride 2 và padding 0 có nhiệm vụ quét và lọc các giá trị cần thiết cho phép nhân tích chập từ dữ liệu ảnh đầu vào theo ma trận 3x3 Kết quả đầu ra từ bước lọc này là 9 giá trị, với bước nhảy stride là 2.

Trong ví dụ này, chúng ta có một ma trận ảnh 5x5 sử dụng khối kernel 3x3 với stride 2 và padding 0 Quá trình lấy dữ liệu bắt đầu từ ma trận 3x3 đầu tiên, sau đó nhảy qua phải 2 giá trị để tiếp tục lấy dữ liệu Hành động này được thực hiện lần lượt theo hàng ngang cho đến khi đạt giá trị cuối cùng Sau đó, chúng ta nhảy 2 ô xuống hàng tiếp theo và lặp lại quy trình, như được mô tả chi tiết trong hình 4.3 bên dưới.

Hình 4.3 Mô tả cách lấy giá trị của khối Kernel 3x3 stride 2 padding 0

Khối Convolution Core 3x3 thực hiện phép nhân tích chập giữa dữ liệu đầu vào 3x3 và kernel 3x3 Nó bao gồm 9 bộ nhân FP 32 bits và 1 bộ cộng cho 9 input FP 32 bits Mỗi dữ liệu đầu vào sẽ được nhân tương ứng với kernel, tạo ra kết quả chính xác cho các ứng dụng học sâu.

Sau đó kết quả của 9 bộ nhân được đưa qua bộ cộng 9 input và cộng tổng lại thành 1 output đầu ra, miêu ta cụ thé theo hình 4.4 bên dưới.

Hình 4.4 Mô tả cách nhân tích chập các input của khối

Sơ đồ khối tổng quát:

Hình 4.5 Mô tả sơ đồ khối Convolution Core 3x3

Thiết kế khối Convolution 3x3 stride 1 padding 0 1 Kernel 3x3 stride 1 padding Ú . -c-cttketetEekekekerrekrrrerrrree 25 4.4 Thiết kế khối Convolution 3x3 stride 1 padding 1 - Depthwise

Kernel 3x3 stride 1 padding Ì . - 5< c‡cscsketerrkererekeree 26 4.5 Thiết kế khối Convolution 1x1 stride 1 padding 1 - Pointwise

Khối Kernel 3x3 stride 1 padding 1 sẽ được ghép với khối Convolution Core 3x3 dé tao thành khối Convolution 3x3 stride 1 padding 1.

Khối Kernel 3x3 với stride 1 và padding 1 thực hiện nhiệm vụ tương tự như khối Kernel 3x3 với stride 1 và padding 0 Sự khác biệt chính là ảnh đầu vào sẽ được bao quanh bởi một lớp viền có giá trị 0.

Ví dụ về ma trận ảnh 3x3 với kernel 3x3, stride 1 và padding 1, sử dụng giá trị 0 để bọc tất cả ảnh Đầu tiên, lấy dữ liệu từ ma trận 3x3 đầu tiên, sau đó di chuyển sang phải 1 giá trị để lấy dữ liệu tiếp theo Tiến hành lướt qua từng hàng ngang cho đến khi đạt giá trị cuối cùng, rồi trượt xuống 1 hàng dọc và lặp lại quy trình, như được minh họa trong hình 4.8 bên dưới.

Hình 4.8 Mô tả cách lấy giá trị của khối Kernel 3x3 stride 2 padding 1 4.5 Thiết kế khối Convolution 1x1 stride 1 padding 1 - Pointwise

Convolution 1x1 stride 1 padding 1 là bước thứ hai của Separable

Convolution sẽ tiền hành nhân từng input ảnh đầu vào với 1 giá tri kernel va cho ra kết quả ở output

Sơ đồ khối tổng quát

Hình 4.9 Mô tả sơ đồ khối Convolution 1x1 stride 1 padding 1

Kernel 1x1 stride 1 padding 1 - Pointwise - 5-cecccc+cccce+ 28 4.5.2 Convolution Core 1X Lice ceceseeeeeseeneseereeeesteeeseseanseeeseeeeeeseneees 29 4.6 Thiết kế khối Convolution 1x1 stride 2 padding 0

Nhiệm vụ của khối Kernel 1x1 stride 1 padding 1 là bọc tat cả input ảnh đầu vào với giá tri 0 sau đó đưa toàn bộ các giá tri ra output.

Trong ví dụ về một pixel ảnh đầu vào kích thước 3x3, chúng ta sử dụng khối kernel 1x1 với stride 1 và padding 1, bao quanh ảnh bằng giá trị 0 Sau đó, giá trị đầu ra được tính theo từng hàng ngang và được đọc với bước stride bằng 1, như mô tả trong hình 4.10 bên dưới.

Hình 4.10 Mô ta cách lấy giá trị của khối Kernel 1x1 stride 1 padding 1

Bên trong khối Convolution Core 1x1, bộ nhân thực hiện phép nhân hai số FP để xử lý các giá trị dữ liệu ảnh Các giá trị này được lọc từ bộ Kernel 1x1 với stride 1 và padding 1, trong khi dữ liệu kernel được lấy từ file Python và kết quả được xuất ra dưới dạng output.

Sơ đồ khối tổng quát:

Hình 4.11 Mô tả sơ đồ khối Convolution Core 1x1

4.6 Thiết kế khối Convolution 1x1 stride 2 padding 0

Khối Convolution 1x1 với stride 2 và padding 0 được tạo thành từ hai khối nhỏ: kernel IxI với stride 2 và padding 0, cùng với Convolution Core 1x1 Dữ liệu ảnh được phân tích qua khối kernel IxI và sau đó được nhân với dữ liệu kernel ở khối Convolution Core 1x1, từ đó cho ra kết quả ở đầu ra.

Khối này tiễn hành chia đi hai lần kích thước của ảnh ở đầu vào.

Sơ đồ khối tổng quát:

Data_out(31:0] valid_in valid_out data_in[31:0)

Hình 4.12 Mô tả so đồ khối Convolution 1x1 stride 2 padding 0

Kernel 1x1 stride 2 padding Ú esses eseeeeseesesesteneseeneeeeenes 31 4.7 Thiết kế khối Convolution tông quát

Khối Kernel 1x1 với stride 2 và padding 0 có nhiệm vụ quét và lọc các giá trị cần thiết để thực hiện phép nhân tích chập theo ma trận 1x1 từ dữ liệu ảnh đầu vào.

Việc xử lý dữ liệu ảnh 5x5 với khối kernel 1x1, stride 2 và padding 0 bắt đầu bằng cách lấy dữ liệu đầu tiên Sau đó, tiến hành trượt qua phải 2 giá trị để lấy dữ liệu tiếp theo, tiếp tục thực hiện theo hàng ngang và hàng dọc như mô tả trong hình 4.13 bên dưới.

Hình 4.13 Mô tả cách lấy giá trị của khối Kernel 1x1 stride 2 padding 0

Sơ đồ khói tổng quát

Hình 4.14 Mô tả so đồ khối Kernel 1x1 stride 2 padding 0

Khối kernel 1x1 stride 2 bao gồm những khối nhỏ bên trong như Counter

Pixel, Counter Height, Compare, Mux, Line Buffer.

4.7 Thiết kế khối Convolution tổng quát

Các bộ Convolution đã được mô tả sẽ được kết hợp thành một khối lớn có tên là Convolution, với bốn chức năng tương ứng cho từng bộ Convolution nhỏ bên trong Dữ liệu đầu vào sẽ được cung cấp cho tất cả các input của các khối bên trong, trong khi đầu ra sẽ được lựa chọn dựa trên dữ liệu chân select.

Hình 4.15 Mô tả sơ đồ khối Convolution tổng quát

ReLU (Rectified Linear Unit) là hàm kích hoạt trả về giá trị lớn hơn giữa 0 và dữ liệu đầu vào Hàm này sử dụng bit dấu trong số thực để xác định xem dữ liệu có phải là số không âm hay không, khi bit dấu bằng 1.

ReLU được thiết kế như một mạch tổ hợp, sử dụng Mux 2-1, trong đó chân select là bit dấu của dữ liệu đầu vào.

Nếu sign bit bằng 1, khối sẽ trả về 32’b0 Ngược lại, nếu sign bit bằng 0, khối sẽ trả về chính đầu vào.

Hình 4.16 Mô ta cach thực thi của hàm kích hoạt Relu

Sơ đồ khối tổng quát

Hình 4.17 Mô tả sơ đồ khối ReLU Activation

4.9 Thiết kế khối Max Pooling 3x3

Lớp Pooling thường được sử dụng giữa các lớp tích chập để giảm kích thước dữ liệu, đồng thời giữ lại các đặc trưng quan trọng Việc này không chỉ giúp giảm khối lượng tính toán trong mạng mà còn tối ưu hóa hiệu suất của mô hình.

Khối Max Pooling là kết hợp của khối kernel 3x3 stride 2 và các phép tính trừ và nhân giúp lọc ra giá trị lớn nhất trong số 9 giá trị.

Sơ đồ khối tổng quát

Module tính giá trị max - |[Data_out(31:0]

Hình 4.18 Mô tả so đồ khối của Max Pooling 3x3 stride 2

Khối Kernel 3x3 với stride 2 và padding 1 có nhiệm vụ bao quanh toàn bộ giá trị của ảnh đầu vào bằng giá trị 0 Nó thực hiện việc quét và lọc ra các giá trị cần thiết để thực hiện phép nhân tích chập trên dữ liệu ảnh đầu vào thông qua ma trận 3x3.

Giá trị đầu ra là kết quả gồm 9 giá trị của bước lọc này Có bước nhảy stride bằng 2

Trong ví dụ về ma trận ảnh 3x3, chúng ta sử dụng khối kernel 3x3 với stride 2 và padding 1, trong đó viền xung quanh ảnh được lấp đầy bằng giá trị 0 Quá trình bắt đầu bằng cách lấy dữ liệu từ ma trận 3x3 đầu tiên, sau đó trượt sang phải hai giá trị để lấy dữ liệu tiếp theo.

Tiến hành theo hàng ngang cho đến giá trị cuối cùng, sau đó di chuyển hai ô xuống hàng dọc và lặp lại quy trình này, như mô tả trong hình 4.19 bên dưới.

Hình 4.19 Mô tả cách lấy giá trị của khối Kernel 3x3 stride 2 padding 1

4.9.2 Khối tính giá trị max

Các kết quả của bộ kernel 3x3 stride 2 padding 1 sẽ được di qua các khối trừ để so sánh lẫn nhau.

Sau đó lấy số lớn hơn và tiếp tục lặp lại cho đến khi lấy được giá trị lớn nhất trong số 9 giá trị.

Hình 4.20 Mô tả sơ đồ khối tính giá trị max

4.10 Thiết kế khối Global Average Pooling

Khối thực hiện chức năng Global Average Pooling với stride 0 Input đầu vào là các data ảnh có kích thước 2x2.

Khối sẽ tinh tổng các giá trị đầu vào input nay rồi chia cho 2 dé lấy giá trị trung bình ở đầu ra output.

Day là bước kế cuối giúp đưa các giá trị ảnh 2x2 về thành 1 giá trị duy nhất. Cấp input cho khối lọc cuối cùng Dense.

Sơ đồ khối tổng quát

Valid in Average_ › sae my data_in[31:0 poating valid_out

Hình 4.21 Mô tả so đồ khối Global Average Pooling

Khối Dense là một mạch lọc tổng hợp, thực hiện phép nhân giữa các giá trị đầu ra của bộ Global Average Pooling với một giá trị kernel từ file trọng số Kết quả này sau đó được lưu lại và cộng với kết quả của khối Dense tiếp theo.

4.12 Thiết kế khối Sigmoid Đây là bước cuối cùng của thuật toán, hàm kích hoạt Sigmoid là hàm cho ra output két quả của anh đầu vào ban đầu, xác định nhận diện vật thể có đeo khẩu trang hay không tra về kết qua “0” hoặc nhận input đầu vào là Data out của khối“yp

Hình 4.23 Mô ta công thức tinh của hàm kích hoạt Sigmoid

Sơ đồ khối tổng quát:

XIy to >} Exp >| ADDER > dv > to Data_Out

Hình 4.24 Mô tả sơ đồ khối Sigmoid

4.13 Thiết kế khối Batch Normalization

Trong kiến trúc Xception, có hai công đoạn dé tính Batch Normalization đầu tiên ding python để tính hai giá trị a và b.

Sau đó dùng Verilog dé tính công thức bên hình dưới Điều này sẽ giúp tối ưu hóa phần cứng (vì không dùng khối căn bậc hai, khối divider).

Hình 4.25 Mô tả công thức tính của khối Batch Normalization

Hình 4.26 Mô tả interface sơ đồ khói Batch Normalization

Chương 5 LAY GIA TRI TRONG SỐ

5.1 Tổng quan về nhận diện khuôn mặt đeo khẩu trang

Việc hiện thực thành công thuật toán Deep Learning (DL) trên nền tảng FPGA bằng ngôn ngữ Verilog không thể thiếu việc xác định giá trị trọng số Một ví dụ điển hình là việc sử dụng các Template có sẵn từ Keras và TensorFlow bằng ngôn ngữ Python để đạt được độ chính xác cao trong việc nhận diện khuôn mặt có hoặc không đeo khẩu trang Qua đó, trọng số của từng lớp Layer sẽ được xác định và nạp giá trị cố định vào các module trên FPGA.

Nhóm nghiên cứu đã thực hiện huấn luyện hơn 10.000 ảnh, bao gồm 4.000 mẫu cho mỗi nhóm đối tượng với các kích thước khác nhau trong kênh màu xám, cùng với tập dữ liệu kiểm tra gồm 2.000 ví dụ được gán nhãn Mỗi pixel trong ảnh có giá trị từ 0 đến 255, trong đó pixel màu đen có giá trị 0 và pixel trắng có giá trị tối đa là 255 Quá trình huấn luyện được thực hiện nhiều lần, và kết quả khả quan nhất đạt được sau khoảng 200 lần huấn luyện, với giá trị loss thấp và độ chính xác hoàn toàn đạt 1.0, như thể hiện trong hình 5.1 bên dưới.

Hình 5.1 Mô tả các thông số khi train các ảnh

Sau khi thực hiện 200 lần train, nhóm nhận thấy rằng kết quả không khả quan, do đó quyết định chọn lần train thứ 199 làm mô hình cho quá trình nhận diện Lần train này được xem là có giá trị trọng số tốt nhất trong toàn bộ quá trình huấn luyện.

5.2 Giá trị trọng số Convolution

Các khối Convolution 3x3 yêu cầu 9 giá trị đầu vào cố định cho mỗi khối, tương ứng với số lượng kernel cần thiết Trong khi đó, khối Convolution 1x1 chỉ cần 1 giá trị đầu vào cố định cho mỗi kernel.

5.3 Giá trị trọng số Separable Convolution

Tương tự với khối Convolution 3x3 va Convolution 1x1, việc lay gia tri Kernel sẽ theo từng khối Depthwise va Pointwise tương ứng

5.4 Giá trị trọng số Batch Normalization

Ngày đăng: 03/11/2024, 19:13

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN