Mô phỏng mạng CNN trên FPGA

17 203 1
Mô phỏng mạng CNN trên FPGA

Đ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

Mô phỏng mạng CNN trên FPGA

A Lời nói đầu Deep Learning thuật tốn dựa số ý tưởng từ não tới việc tiếp thu nhiều tầng biểu đạt, cụ thể lẫn trừu tượng, qua làm rõ nghĩa loại liệu Deep Learning ứng dụng 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 nhiều toán nhận dạng sử dụng Deep Learning để giải Deep Learning giải tốn với số lượng lớn, kích thước đầu vào lớn với hiệu độ xác cao Những năm gần đây, ta chứng kiến nhiều thành tựu vượt bậc Deep Learning ngành Thị giác máy tính (Computer Vision), tập đồn lón Facebook, Google hay Amazon đã, dụng điều phần khơng thể thiếu sản phẩm mình, nhận diện khn mặt người dùng, phát triển xe tự lái hay drone giao hàng tự động,…Chính thứ góp phần giúp cho sống ngày tiện nghi, thoải mái Trong đó, Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) hình Deep Learning tiên tiến giúp cho xây dựng hệ thống thông minh Vậy nên chúng em chọn đề tài “Mô mạng CNN FPGA” làm đề tài cho tập lớn môn thiết kế IC số Do kiến thức nhiều hạn chế, nên nhiều sai sót, chúng em hi vọng thầy giúp đỡ để đề tài chúng em 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 B Nội dung Chương 1: Tổng quan CNN 1.1 Giới thiệu CNN 1.2 Giới thiệu layer mạng CNN 1.3 Giới thiệu hàm Activation Chương 2: CNN ngôn ngữ Verilog 2.1 Convolution layer 2.2 Max-Pooling layer 11 2.3 ReLU 13 C Phụ lục 15 D Tài liệu tham khảo 17 Mục lục hình ảnh Hình 1.1: Sơ đồ mạng Neural Network…………………………………………… 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 ReLU……………………………………………………14 Hình 2.6: Testbench ReLU…………………………………………………….14 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 train mạng CNN ngơn ngữ Python - Code lớp Max_pooling Nguyễn Đức Hồ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 B Nội dung Chương 1: Tổng quan CNN 1.1 Giới thiệu CNN Mạng nơ-ron tích chập (CNN - Convolutional Neural Network) hình mạng “Deep Learning” phổ biến nay, có khả nhận dạng phân loại hình ảnh với độ xác cao, chí tốt người nhiều trường hợp hình phát triển, ứng dụng vào hệ thống xử lý ảnh lớn Facebook, Google hay Amazon… cho mục đích khác thuật tốn tagging tự động, tìm kiếm ảnh gợi ý sản phẩm cho người tiêu dung Sự đời mạng CNN dựa ý tưởng cải tiến cách thức mạng nơron nhân tạo truyền thống Do sử dụng liên kết đầy đủ điểm ảnh vào node, mạng nơ-ron nhân tạo (Neural Network) bị hạn chế nhiều kích thước ảnh, ảnh lớn số lượng liên kết tăng nhanh kéo theo bùng nổ khối lượng tính tốn Ngồi liên kết đầy đủ dư thừa với ảnh, thông tin chủ yếu thể qua phụ thuộc điểm ảnh với điểm xung quanh mà khơng quan tâm nhiều đến điểm ảnh cách xa Mạng CNN đời với kiến trúc thay đổi, có khả xây dựng liên kết sử dụng phần cục ảnh kết nối đến node lớp thay tồn ảnh mạng nơ-ron truyền thẳng Hình 1.1: Sơ đồ mạng Neural Network Hình 1.2: Sơ đồ mạng CNN 1.2 Giới thiệu layer mạng CNN 1.2.1 Convolution layer Convolution: bao gồm Convolution Filter Convolutional Layer • Convolution Layer : Chính hidden layer – tập feature map , feature scan input ban đầu trích xuất feature với đặc tính cụ thể • Convolution Filter( Kernel): Đây ma trận quét qua ma trận liệu đầu vào, từ trái qua phải, xuống dưới, nhân tương ứng giá trị ma trận đầu vào mà ma trận kernel cộng tổng lại, đưa qua activation funciton (sigmoid, relu, elu, ), kết số cụ thể, tập hợp số lại ma trận nữa, feature map • Stride: Là khoảng cách kernel quét 1.2.2 Pooling layer Pooling: Mục đích pooling đơn giản, làm giảm số hyperparameter mà ta cần phải tính tốn, từ giảm thời gian tính tốn, tránh overfitting Loại pooling ta thường gặp max pooling, lấy giá trị lớn pooling window Pooling hoạt động gần giống với convolution, có cửa sổ trượt gọi pooling window, cửa sổ trượt qua giá trị ma trận liệu đầu vào (thường feature map convolutional layer), chọn giá trị từ gía trị nằm cửa sổ trượt (với max pooling ta lấy giá trị lớn nhất) 1.2.3 Fully-Connected layer Fully Connected : Sau lớp Convolution Pooling lớp Fully connected, layer để tập hợp feature layer mà ta tìm ra, chuyển đổi liệu từ 3D, 2D thành 1D, tức vector Còn layer output, số neuron layer phụ thuộc vào số output mà ta muốn tìm 1.3 Giới thiệu hàm Activation 1.3.1 ReLU Rectified Linear Unit (ReLU) sử dụng rộng rãi gần tính đơn giản Một vài ưu điểm ReLU: • ReLU chứng minh giúp cho việc training Deep Networks nhanh nhiều Sự tăng tốc cho ReLU tính tốn gần tức thời gradient tính cực nhanh với gradient đầu vào lớn 0, đầu vào nhỏ • Mặc dù hàm ReLU khơng có đạo hàm s=0, thực nghiệm, người ta thường định nghĩa ReLU′(0)= khẳng định thêm rằng, xác suất để input unit nhỏ Công thức ReLU: f(x) = max(0, x) 1.3.2 Softmax Các hàm softmax thường sử dụng lớp cuối thuật toán phân loại sử dụng mạng neuron, với chức làm bật giá trị lớn làm mờ giá trị bé đáng kể so với giá trị lớn Công thức hàm Softmax: = exp(𝑧𝑖) ∑ exp(𝑧𝑖 ) 𝑣ớ𝑖 𝑖 = 0,1,2, … 𝐶 Chương 2: CNN 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ị ma trận đầu vào + Đầu vào filter_stream chứa giá trị ma trận lọc - Đầu bit: conv_stream ma trận ❖ Nguyên lý hoạt động - Lần lượt trượt ma trận lọc từ trái sang phải, từ xuống ma trận đầu vào, sau nhân ma trận lọc với giá trị tương ứng ma trận đầu vào cộng tổng giá trị Cuối cùng, giá trị tổng gán cho ma trận đầu 2.1.2 Code module conv2d #( parameter HI = 6, parameter WI = 6, parameter K = 3, 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 = //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 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; x

Ngày đăng: 04/06/2019, 14:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan