Đăng ký Đăng nhập
Trang chủ Mô phỏng mạng cnn trên fpga...

Tài liệu Mô phỏng mạng cnn trên fpga

.PDF
17
870
60

Mô tả:

A. Lời nói đầu Deep Learning là một thuật toán dựa trên một số ý tưởng từ não bộ tới việc tiếp thu nhiều tầng biểu đạt, cả cụ thể lẫn trừu tượng, qua đó làm rõ nghĩa của các loại dữ liệu. Deep Learning được ứng dụng trong nhận diện hình ảnh, nhận diện giọng nói, xử lý ngôn ngữ tự nhiên . Hiện nay rất nhiều các bài toán nhận dạng sử dụng Deep Learning để giải quyết do Deep Learning có thể giải quyết các bài toán với số lượng lớn, kích thước đầu vào lớn với hiệu năng cũng như độ chính xác cao. Những năm gần đây, ta đã chứng kiến được nhiều thành tựu vượt bậc của Deep Learning trong ngành Thị giác máy tính (Computer Vision), các tập đoàn lón như Facebook, Google hay Amazon đã, và đang sự dụng điều đó như một phần không thể thiếu trong sản phẩm của mình, đó có thể là nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động,…Chính những thứ đó đã góp phần giúp cho cuộc sống của chúng ta hiện nay ngày càng tiện nghi, thoải mái hơn. Trong đó, Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một trong những mô hình Deep Learning tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh như trên. Vậy nên chúng em chọn đề tài “Mô phỏng mạng CNN trên FPGA” làm đề tài cho bài tập lớn môn thiết kế IC số. Do kiến thức còn nhiều hạn chế, nên sẽ còn nhiều sai sót, chúng em hi vọng sẽ được thầy giúp đỡ để đề tài của chúng em được hoàn thiện. Chúng em chân thành cảm ơn thầy. Mục Lục A. Lời nói đầu ................................................................................................................................ 1 B. Nội dung .................................................................................................................................... 5 Chương 1: Tổng quan về CNN ................................................................................................... 5 1.1 Giới thiệu về CNN ........................................................................................................ 5 1.2 Giới thiệu các layer cơ bản của mạng CNN ............................................................... 6 1.3 Giới thiệu về các hàm Activation ................................................................................ 7 Chương 2: Mô phỏng CNN bằng ngôn ngữ Verilog ................................................................. 8 2.1 Convolution layer ............................................................................................................... 8 2.2 Max-Pooling layer ............................................................................................................ 11 2.3 ReLU ................................................................................................................................. 13 C. Phụ lục..................................................................................................................................... 15 D. Tài liệu tham khảo ................................................................................................................. 17 2 Mục lục hình ảnh Hình 1.1: Sơ đồ mạng Neural Network……………………………………………..5 Hình 1.2: Sơ đồ mạng CNN…………………………………………………………6 Hình 2.1: Mạch RTL lớp Convolution……………………………………………..10 Hình 2.2: Testbench lớp Convolution……………………………………………...10 Hình 2.3: Mạch RTL lớp Max-pooling…………………………………………….12 Hình 2.4: Testbench lớp Max-pooling……………………………………………..12 Hình 2.5: Mạch RTL của ReLU……………………………………………………14 Hình 2.6: Testbench của ReLU…………………………………………………….14 3 Phân công công việc Tên thành viên Công việc - Tìm hiểu mạng CNN, viết báo cáo Nguyễn Minh Hiếu - Code và train mạng CNN bằng ngôn ngữ Python - Code lớp Max_pooling Nguyễn Đức Hoàn Phạm Công Minh - Tìm hiểu mạng CNN, viết báo cáo - Code lớp Convolution - Tìm hiểu mạng CNN, viết báo cáo - Code lớp Fully-connected 4 B. Nội dung Chương 1: Tổng quan về CNN 1.1 Giới thiệu về CNN Mạng nơ-ron tích chập (CNN - Convolutional Neural Network) là một trong những mô hình mạng “Deep Learning” phổ biến nhất hiện nay, có khả năng nhận dạng và phân loại hình ảnh với độ chính xác rất cao, thậm chí còn tốt hơn con người trong nhiều trường hợp. Mô hình này đã và đang được phát triển, ứng dụng vào các hệ thống xử lý ảnh lớn của Facebook, Google hay Amazon… cho các mục đích khác nhau như các thuật toán tagging tự động, tìm kiếm ảnh hoặc gợi ý sản phẩm cho người tiêu dung. Sự ra đời của mạng CNN là dựa trên ý tưởng cải tiến cách thức các mạng nơron nhân tạo truyền thống. Do sử dụng các liên kết đầy đủ giữa các điểm ảnh vào node, các mạng nơ-ron nhân tạo (Neural Network) bị hạn chế rất nhiều bởi kích thước của ảnh, ảnh càng lớn thì số lượng liên kết càng tăng nhanh và kéo theo sự bùng nổ khối lượng tính toán. Ngoài ra sự liên kết đầy đủ này cũng là sự dư thừa khi với mỗi bức ảnh, các thông tin chủ yếu thể hiện qua sự phụ thuộc giữa các điểm ảnh với những điểm xung quanh nó mà không quan tâm nhiều đến các điểm ảnh ở cách xa nhau. Mạng CNN ra đời với kiến trúc thay đổi, có khả năng xây dựng liên kết chỉ sử dụng một phần cục bộ trong ảnh kết nối đến node trong lớp tiếp theo thay vì toàn bộ ảnh như trong mạng nơ-ron truyền thẳng. Hình 1.1: Sơ đồ mạng Neural Network 5 Hình 1.2: Sơ đồ mạng CNN 1.2 Giới thiệu các layer cơ bản của mạng CNN 1.2.1 Convolution layer Convolution: bao gồm Convolution Filter và Convolutional Layer • Convolution Layer : Chính là các hidden layer – 1 tập các feature map , mỗi feature là 1 bản scan của input ban đầu nhưng được trích xuất ra các feature với đặc tính cụ thể. • Convolution Filter( Kernel): Đây là một ma trận sẽ quét qua ma trận dữ liệu đầu vào, từ trái qua phải, trên xuống dưới, và nhân tương ứng từng giá trị của ma trận đầu vào mà ma trận kernel rồi cộng tổng lại, đưa qua activation funciton (sigmoid, relu, elu, ... ), kết quả sẽ là một con số cụ thể, tập hợp các con số này lại là 1 ma trận nữa, chính là feature map. • Stride: Là khoảng cách giữa 2 kernel khi quét 1.2.2 Pooling layer Pooling: Mục đích của pooling rất đơn giản, nó làm giảm số hyperparameter mà ta cần phải tính toán, từ đó giảm thời gian tính toán, tránh overfitting. Loại pooling ta thường gặp nhất là max pooling, lấy giá trị lớn nhất trong một pooling window. Pooling hoạt động gần giống với convolution, nó cũng có 1 cửa sổ trượt gọi là pooling window, cửa sổ này trượt qua từng giá trị của ma trận dữ liệu đầu vào (thường là các 6 feature map trong convolutional layer), chọn ra một giá trị từ các gía trị nằm trong cửa sổ trượt (với max pooling ta sẽ lấy giá trị lớn nhất). 1.2.3 Fully-Connected layer Fully Connected : Sau các lớp Convolution và Pooling thì sẽ là 2 lớp Fully connected, 1 layer để tập hợp các feature layer mà ta đã tìm ra, chuyển đổi dữ liệu từ 3D, hoặc 2D thành 1D, tức chỉ còn là 1 vector. Còn 1 layer nữa là output, số neuron của layer này phụ thuộc vào số output mà ta muốn tìm ra. 1.3 Giới thiệu về các hàm Activation 1.3.1 ReLU Rectified Linear Unit (ReLU) được sử dụng rộng rãi gần đây vì tính đơn giản của nó. Một vài ưu điểm của ReLU: • ReLU được chứng minh giúp cho việc training các Deep Networks nhanh hơn rất nhiều. Sự tăng tốc này được cho là vì ReLU được tính toán gần như tức thời và gradient của nó cũng được tính cực nhanh với gradient bằng 1 nếu đầu vào lớn hơn 0, bằng 0 nếu đầu vào nhỏ hơn 0. • Mặc dù hàm ReLU không có đạo hàm tại s=0, trong thực nghiệm, người ta vẫn thường định nghĩa ReLU′(0)= và khẳng định thêm rằng, xác suất để input của một unit bằng 0 là rất nhỏ. Công thức của ReLU: f(x) = max(0, x) 1.3.2 Softmax Các hàm softmax thường được sử dụng trong lớp cuối cùng của thuật toán phân loại sử dụng mạng neuron, với chức năng làm nổi bật giá trị lớn nhất và làm mờ các giá trị bé hơn đáng kể so với giá trị lớn nhất. Công thức của hàm Softmax: ai = exp(𝑧𝑖) ∑ exp(𝑧𝑖 ) 𝑣ớ𝑖 𝑖 = 0,1,2, … 𝐶 7 Chương 2: Mô phỏng CNN bằng ngôn ngữ Verilog 2.1 Convolution layer 2.1.1 Yêu cầu kĩ thuật ❖ Mạch bao gồm: - Hai đầu vào + Đầu vào data_stream chứa giá trị của ma trận đầu vào + Đầu vào filter_stream chứa giá trị của ma trận lọc - Đầu ra bit: conv_stream của ma trận ra ❖ Nguyên lý hoạt động - Lần lượt trượt ma trận lọc từ trái sang phải, từ trên xuống dưới trên ma trận đầu vào, sau đó nhân ma trận lọc với các giá trị tương ứng của ma trận đầu vào và cộng tổng các giá trị đó. Cuối cùng, các giá trị tổng sẽ được gán cho ma trận đầu ra 2.1.2 Code 1. module conv2d 2. #( 3. parameter HI = 6, 4. parameter WI = 6, 5. parameter K = 3, 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. parameter parameter parameter parameter parameter SI = HI*WI, HO = HI - K + 1, WO = WI - K + 1, SO = HO*WO, B = 9 //height in //width in //height filter = width filter = K //size in //height out //width out //size out //bits ) ( input wire [B*SI - 1:0] data_stream, input wire [B*K*K-1:0] filter_stream, output wire [(B*2+1)*SO-1:0] conv_stream ); function [B*2:0] conv; input [B*K*K-1:0] a,c; reg [B*2:0] temp; reg signed [B-1:0] A,C; integer x; begin 8 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. temp = 1'b0; for(x=0; xtemp?A:temp; end max = temp; end endfunction // slice data to blocks wire [B*K*K-1:0] filter [0:SO-1]; genvar i,j,k; generate for(i=0; i<=HO; i=i+2) begin//slice_data_axis_0 for(j=0; j<=WO; j=j+2) begin//slice_data_axis_1 11 43. 44. for(k=0; k - Xem thêm -

Tài liệu liên quan

Tài liệu vừa đăng