B o-c o-IC1 PDF

Title B o-c o-IC1
Author Nguyễn Hải Đăng
Course Digital Electronics
Institution Trường Đại học Bách khoa Hà Nội
Pages 41
File Size 1.6 MB
File Type PDF
Total Downloads 381
Total Views 650

Summary

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ~~~~~~~ ~~~~~~ – BÁO CÁO Thiết kế, tổng hợp IC số và hệ thống số Nhóm 2 Họ Tên Phạm Văn Mười Trương Bá Mạnh Trần Thị Thơm MSSV 20152513 20152414 20153633 Lớp Điện tử 01 K60 Điện tử 06 K60 Điện tử 10 K60 Hà Nội, 12-2018 GVHD TS. Võ Lê Cường LỜ...


Description

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ~~~~~~~

~~~~~~ –

BÁO CÁO Thiết kế, tổng hợp IC số và hệ thống số Nhóm 2 Họ Tên Phạm Văn Mười Trương Bá Mạnh Trần Thị Thơm

MSSV 20152513 20152414 20153633

Lớp Điện tử 01 K60 Điện tử 06 K60 Điện tử 10 K60

Hà Nội, 12-2018

GVHD TS. Võ Lê Cường

LỜI MỞ ĐẦU Với sự phát triển vô cùng mạnh mẽ của công nghệ thông tin nói chung và k ỹ thuật điện tử viễn thông nói riêng, nhu cầu dịch vụ điện tử viễn thông ngày càng phát triển nhanh, mạnh mẽ. Vì vậy đã tạo áp lực yêu cầu thiết kế ngày càng cao đối với việc chế tạo mạch số với những kích thước nhỏ, gọn mà vẫn đáp ứng được chức năng yêu cầu sử dụng mà những mạch có kích thước lớn không thể đáp ứng và phù hợp được với những nhu cầu sử dụng hiện nay. Môn học “Thiết kế, tổng hợp IC số và hệ thống số” giúp chúng em hiểu thêm về ngôn ngữ Verilog mà từ ngôn ngữ này, chúng em có thể thiết kế được những mạch tích hợp nhỏ ngọn mà vẫn đáp ứng đươc những yêu cầu đặt ra. Chúng em xin gửi lời cám ơn chân thành nhất tới thầy Võ Lê Cường đã giúp đỡ chúng em trong suốt thời gian học quá trình làm bài t ập lớn môn “Thiết kế, tổng hợp IC số và hệ thống s ố”. Do kiến thức còn hạn hẹp và thời gian tìm hiểu không nhiều, thiếu kinh nghiệm thực tế, nên bài tập lớn không tránh khỏi những thiếu sót. Chúng em rất mong nhận được sự góp ý của thầy để làm bài tập lớn được hoàn thiệt hơn. Chúng em xin chân thành cám ơn!

PHÂN CHIA CÔNG VIỆC Đầu việc Tìm mã nguồn, source code pulic CNN Verilog trên Github Kiểm tra tính khả thi code tìm được Đọc hiểu tài liệu, bài báo đi kèm Hiểu code verilog toàn bộ chương trình. Hiểu đường điều khiển, tổng quan hệ thống Hiểu đường đi dữ liệu, chi tiết các khối Tìm hiểu khối TOP, đưa khối Top xuống kit DE0Nano Mô phỏng các khối trên modeulSim Đưa một khối xuống Kit DE0Nano Viết báo cáo Viết, tìm hiểu CNN Viết mô tả hệ thống Viết mô tả chi tiết các khối Sửa báo cáo

Assign Mười Mạnh, Thơm Mạnh Thơm, Mạnh Mạnh Thơm Mười Mạnh Mười Mười Mạnh Thơm Mười, Mạnh,

Thơm

Support

Thơm Mười Thơm, Mạnh Thơm Mạnh, Thơm

MỤC LỤC Contents LỜI MỞ ĐẦU ................................................................................................................................. 2 NỘI DUNG ....................................................................................................................................... 6 Chương 1: Tổng Quan .................................................................................................................... 6 1.

Lí do chọn đề tài: ................................................................................................................. 6

2.

Khái quát về Deep-Learning, CNN .................................................................................. 6 2.1

Deep-learning là gì? ................................................................................................ 6

2.1

CNN là gì? ................................................................................................................ 7

Chương 2: Tìm Hiểu Cách Thực Thi CNN trên FPGA .......................................................... 14 1. Yêu cầu bài toán .................................................................................................................. 14 2. Thiết kế kiến trúc CNN ....................................................................................................... 15 3.

Triển khai phần cứng đưa lên FPGA ............................................................................. 17 3.1 Mô tả hệ thống ............................................................................................................... 18 3.2 Mô tả chức năng của từng khối .................................................................................... 19

4.

Mô phỏng từng khối......................................................................................................... 31

KẾT LUẬN .................................................................................................................................. 40 TÀI LIỆU THAM KHẢO .......................................................................................................... 41

DANH MỤC HÌNH ẢNH Hình 1 Cửa sổ trượt (Sliding Windows) convolutional ..................................................... 7 Hình 2 Ví dụ minh họa về mạng thần kinh CNN ............................................................... 8 Hình 3 Ví dụ minh họa về mạng thần kinh CNN ............................................................... 9 Hình 4 Ví dụ minh họa tạo ra feature map ....................................................................... 11 Hình 1. 5 Ví dụ minh họa đơn giản hóa thông tin đầu ra mạng thần kinh CNN .............. 12 Hình 6 Cơ chế hoạt động của hàm max-pooling ............................................................... 12 Hình 7 Mô hình đầu ra gồm các neuron mạng CNN ......................................................... 13 Hình 8 Kiến trúc mạng thần kinh đơn giản VGG [4] ....................................................... 16 Hình 9 Kiến trúc mạng thần kinh Low Weights Digit Detector (LWDD) [1 ] ................ 17 Hình 10 Sơ đồ triển khai trên phần cứng .......................................................................... 18 Hình 11 Kết quả mô phỏng khối Conv ............................................................................ 36

NỘI DUNG Chương 1: Tổng Quan 1. Lí do chọn đề tài: Ngày nay, mạng nơ-ron nhân tạo (Neural Network - NN) là mô hình xử lý thông tin được mô phỏng dựa trên hoạt động của hệ thống thần kinh của sinh vật, bao gồm số lượng lớn các Nơron được gắn kết để xử lý thông tin. Kết hợp với các kĩ thuật học sâu (Deep Learning - DL), mạng nơ-ron đang trở thành một công cụ rất mạnh mẽ mang lại hiệu quả tốt nhất cho nhiều bài toán khó như nhận dạng ảnh, giọng nói hay xử lý ngôn ngữ tự nhiên. Các mạng nơ-ron trong các hệ thống hiện nay là xử lý nối tiếp, nó phải trả giá về mặt thời gian tính toán, xử lý trên hệ thống PC - server và yêu cầu phần cứng chuyên dụng (các khối xử lý đồ họa: Graphics Processing Units - GPU). Mà phần cứng như vậy không phải lúc nào cũng sẵn có trong các thiết bị di động, nên có một nhu cầu cấp thiết đưa các mạng nơ-ron nhân tạo xuống các thiết bị di dộng. Các thiết bị di động, hệ nhúng có tài nguyên và phần cứng hạn chế, yêu cầu số lượng tham số giảm và số lượng các phép tính toán số học tương đối nhỏ. Tuy nhiên, người ta mới chỉ thực hiện đưa mạng nơ-ron xuống thiết bị di động ở mức phần mềm và các phép tính toán sử dụng dấu phẩy động. Việc sử dụng mạng nơ-ron trên thiết bị di động mà không tối ưu có thể không đáp ứng đủ hiệu suất khi ứng dụng cần xử lý tốc độ cao. Ví dụ: Trong xử lý video thời gian thực (30 khung hình mỗi giây). Để cải thiện tốc độ của mạng nơ-ron nhân tạo, người ta có xu hướng chuyển việc tính toán từ phần mềm sang phần cứng (trên FPGA) và sử dụng định dạng dấu phẩy tĩnh thay cho định dạng dấu phẩy động để tăng tốc độ tính toán [1]. Các công ty như Microsoft và Baidu Trung Quốc đã thu hút sự chú ý đối với việc sử dụng FPGA trong các ứng dụng giống như học tập sâu cách đây vài năm. Họ đã chuyển các thuật toán học tập sâu vào FPGA và tuyên bố rằng FPGA cung cấp sự cải thiện đáng kể về tốc độ ở mức tiêu thụ điện năng so với GPU. Việc phát triển ứng dụng liên quan đến học tập sâu cho FPGA vẫn còn ở giai đoạn đầu và các công ty lớn như Microsoft có khả năng sử dụng GPU cho các mô hình đào tạo sau đó nhúng vào FPGA để tạo ra sản phẩm. Trong chương trình học môn học “Thiết kế, tổng hợp IC số và hệ thống số”, chúng em xin chọn đề tài: Thực thi CNN trên FPGA. 2. Khái quát về Deep-Learning, CNN 2.1 Deep-learning là gì? Deep-learning là một phạm trù nhỏ của học máy (machine learning), deep-learning tập trung giải quyết các vấn đề liên quan đến mạng thần kinh nhân t ạo nhằm nâng cấp các công nghệ như nhận diện giọng nói, tầm nhìn mát tính và xử lý ngôn ngữ tự nhiên. Cái tên Deep Learning ra đời với mục đích nhấn mạnh các Hidden layers của Neural

Network. Có thể hiểu Deep Learning chính là Neural Network với nhiều Hidden layers. Deep-learning đang trở thành một trong những lĩnh vực hot nhất trong khoa học máy tính. Chỉ trong vài năm deep-learning đã thúc đẩy tiến bộ trong đa dạng các lĩnh vực như nhận thức sự vật (object perception), dịch tự động (machine translation), nhận diện giọng nói, ... Deep-learning là thuật toán được xây dựng dựa trên nhiều l ớp Neural mà đầu ra của lớp trước là đầu vào của lớp sau, việc học (learning) của các Neural chính là tìm ra các trọng s ố (weight) và các tham số (bias) thích hợp để kích hoạt (active) các Neural cho các tín hiệu qua hay không. 2.2 CNN (Convolutional Neural Network) là gì? 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 với độ chính xác cao như hiện nay như hệ thống xử lý ảnh lớn như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như 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. CNN được sử dụng nhiều trong các bài toán nhận dạng các object trong ảnh. Để tìm hiểu tại sao thuật toán này được sử dụng rộng rãi cho việc nhận dạng (detection), chúng ta hãy cùng tìm hiểu về thuật toán này. a) Convolutional là gì ? Là một cửa sổ trượt (Sliding Windows) trên một ma trận như mô tả hình dưới:

Hình 1 Cửa sổ trượt (Sliding Windows) convolutional Các convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh lấy ra những thông tin chính xác nhất mà không cần chọn các feature. Trong hình ảnh ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số hóa. Ma trận có kích thước 5x5

và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của dòng và cột. Convolution hay tích chập là nhân từng phần tử trong ma trận 3. Sliding Window hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích thước nhỏ như trong ví dụ trên là 3x3. Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3x3 với ma trận bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ việc nhận ma trận Filter với ma trận ảnh 5x5 bên trái. b) Cấu trúc của mạng CNN Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Trong mô hình mạng truyền ngược (feedforward neural network) thì mỗi neural đầu vào (input node) cho mỗi neural đầu ra trong các lớp tiếp theo. Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn vẹn (affine layer). Còn trong mô hình CNNs thì ngược lại. Các layer liên kết được với nhau thông qua cơ chế convolution. Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có được các kết nối cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của filter áp đặt lên một vùng ảnh cục bộ của neuron trước đó. Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn (loại bỏ các thông tin nhiễu). Trong quá trình huấn luyện mạng (traning) CNN tự động học các giá trị qua các lớp filter dựa vào cách thức mà bạn thực hiện. Ví dụ trong tác vụ phân lớp ảnh, CNNs sẽ cố gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự raw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân lớp ảnh.

Hình 2 Ví dụ minh họa về mạng thần kinh CNN

Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất biến (Location Invariance) và tính kết hợp (Compositionality). Với cùng một đối tượng, nếu đối tượng này được chiếu theo các gốc độ khác nhau (translation, rotation, scaling) thì độ chính xác của thuật toán sẽ bị ảnh hưởng đáng kể. Pooling layer sẽ cho bạn tính bất biến đối với phép dịch chuyển (translation), phép quay (rotation) và phép co giãn (scaling). Tính kết hợp cục bộ cho ta các cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn thông qua convolution từ các filter. Đó là lý do tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống như cách con người nhận biết các vật thể trong tự nhiên. Mạng CNN sử dụng 3 ý tưởng cơ bản:   

Các trường tiếp nhận cục bộ (local receptive field) Trọng số chia sẻ (shared weights) Tổng hợp (pooling).

c) Trường tiếp nhận cục bộ (local receptive field) Đầu vào của mạng CNN là một ảnh. Ví dụ như ảnh có kích thước 28x28 thì tương ứng đầu vào là một ma trận có 28x28 và giá trị mỗi điểm ảnh là một ô trong ma trận. Trong mô hình mạng ANN truyền thống thì chúng ta sẽ kết nối các neuron đầu vào vào tầng ảnh. Tuy nhiên trong CNN chúng ta không làm như vậy mà chúng ta chỉ kết nối trong một vùng nhỏ của các neuron đầu vào như một filter có kích thước 5x5 tương ứng (28-5 + 1) 24 điểm ảnh đầu vào. Mỗi một kết nối sẽ học một trọng số và mỗi neuron ẩn sẽ học một bias. Mỗi một vùng 5x5 đấy gọi là một trường tiếp nhận cục bộ.

Hình 3 Ví dụ minh họa về mạng thần kinh CNN

Một cách tổng quan, ta có thể tóm tắt các bước tạo ra 1 hidden layer bằng các cách sau: 

Tạo ra neuron ẩn đầu tiên trong lớp ẩn 1



Dịch filter qua bên phải một cột sẽ tạo được neuron ẩn thứ 2.

Đối với bài toán nhận dạng ảnh người ta thường gọi ma trận lớp đầu vào là feature map, trọng số xác định các đặc trương là shared weight và độ lệch xác định một feature map là shared bias.

Như vậy, đơn giản nhất là qua các bước trên chúng ta chỉ có 1 feature map. Tuy nhiên trong nhận dạng ảnh chúng ta cần nhiều hơn một feature map.

Hình 4 Ví dụ minh họa tạo ra feature map Như vậy, local receptive field thích hợp cho việc phân tách dữ liệu ảnh, giúp chọn ra những vùng ảnh có giá trị nhất cho việc đánh giá phân lớp. d) Trọng số chia sẻ (shared weight and bias) Đầu tiên, các trọng số cho mỗi filter (kernel) phải giống nhau. Tất cả các nơ-ron trong lớp ẩn đầu sẽ phát hiện chính xác feature tương tự chỉ ở các vị trí khác nhau trong hình ảnh đầu vào. Chúng ta gọi việc map từ input layer sang hidden layer là một feature map. Vậy mối quan hệ giữa số lượng Feature map với số lượng tham số là gì? Chúng ta thấy mỗi fearture map cần 25 = 5x5 shared weight và 1 shared bias. Như vậy mỗi feature map cần 5x5+1 = 26 tham số. Như vậy nếu có 10 feature map thì có 10x26 = 260 tham số. Chúng ta xét lại nếu layer đầu tiên có k ết nối đầy đủ nghĩa là chúng ta có 28x28=784 neuron đầu vào như vậy ta chỉ có 30 neuron ẩn. Như vậy ta cần 28x28x30 shared weight và 30 shared bias. T ổng số tham số là 28x28x30+30 tham số lớn hơn nhiều so với CNN. Ví dụ vừa rồi chỉ mô tả để thấy được sự ước lượng số lượng tham số chứ chúng ta không so sánh được trực tiếp vì 2 mô hình khác nhau. Nhưng điều chắc chắn là nếu mô hình có số lượng tham số ít hơn thì nó sẽ chạy nhanh hơn. Tóm lại, một convolutional layer bao gồm các feature map khác nhau. Mỗi một feature map giúp detect một vài feature trong bức ảnh. Lợi ích lớn nhất của trọng số chia sẻ là giảm tối đa số lượng tham số trong mạng CNN.

e) Lớp tổng hợp (pooling layer) Lớp pooling thường được sử dụng ngay sau lớp convulational để đơn giản hóa thông tin đầu ra để giảm bớt số lượng neuron.

Hình 1. 5 Ví dụ minh họa đơn giản hóa thông tin đầu ra mạng thần kinh CNN Thủ tục pooling phổ biến là max-pooling, thủ tục này chọn giá trị lớn nhất trong vùng đầu vào 2x2.

Hình 6 Cơ chế hoạt động của hàm max-pooling

Như vậy qua lớp Max Pooling thì số lượng neuron giảm đi phân nửa. Trong một mạng CNN có nhiều Feature Map nên mỗi Feature Map chúng ta sẽ cho mỗi Max Pooling khác nhau. Chúng ta có thể thấy rằng Max Pooling là cách hỏi xem trong các đặc trưng này thì đặc trưng nào là đặc trưng nhất. Ngoài Max Pooling còn có L2 Pooling.

Cuối cùng ta đặt tất cả các lớp lại với nhau thành một CNN với đầu ra gồm các neuron với số lượng tùy bài toán.

Hình 7 Mô hình đầu ra gồm các neuron mạng CNN Hai lớp cuối cùng của các kết nối trong mạng là một lớp đầy đủ kết nối (fully connected layer) . Lớp này nối mọi nơron từ lớp max pooled tới mọi nơron của tầng ra. f) Cách chọn tham số cho CNN Số các convolution layer: càng nhiều các convolution layer thì performance càng được cải thiện. Sau khoảng 3 hoặc 4 layer, các tác động được giảm một cách đáng kể Filter size: thường filter theo size 5x5 hoặc 3x3 Pooling size: thường là 2x2 hoặc 4x4 cho ảnh đầu vào lớn nhất.

Cách cuối cùng là thực hiện nhiều lần việc train test để chọn ra được param tốt

Chương 2: Tìm Hiểu Cách Thực Thi CNN trên FPGA 1. Yêu cầu bài toán Trong nội dung bảo vệ môn học, nhóm chúng em đề xuất tìm hiểu đề tài: “Thiết kế và thực thi CNN trên FPGA sử dụng ngôn ngữ Verilog”, với tính toán sử dụng dấu phẩy tĩnh cho phép đạt hiệu suất cao, chính xác để có thể triển khai trên phần mềm, cụ thể ở đây là “Ứng dụng cho nhận dạng chữ số viết tay thời gian thực”. Do tối giản số lượng tham số, nó đã giúp tránh được các vấn đề về băng thông bộ nhớ. Phương pháp được đề xuất có thể thực hiện trên một FPGA rất cơ bản, nhưng cũng có thể mở rộng để sử dụng trên các FPGA có số lượng lớn các cổng logic. Tất cả mã nguồn, tài liệu phục vụ cho nghiên cứu được tham khảo ở [1]. Giải pháp cho vấn đề nhận dạng chữ viết tay nhận được hình ảnh từ máy ảnh trong thời gian thực, hiển thị kết quả trên màn hình, tốc độ nhận dạng chữ số tối thiểu phải vượt quá 30 FPS, nghĩa là một mạng thần kinh có thể xử lý một hình ảnh duy nhất trong 33ms trên phần cứng (FPGA). Nhóm chúng em sử dụng kit DE0-Nano[2] với những lý do sau:  Intel (Altera) FPGA được cài đặt trên bo mạch này, được sản xuất hàng loạt, giá thành rẻ.  Cyclone IV FPGA có hiệu năng khá thấp, số lượng cổng logic ít, có thể đưa ra so sánh hiệu suất với các loại GPU hiện đại hiện nay.  DE0-Nano kết nối t ốt với các thiết bị ngoại vi như máy ảnh, màn hình,..  Kit có 32MB Ram, có thể được sử dụng để lưu trữ trọng số của mạng. Bộ dữ liệu sử dụng để train cho bài toán là bộ dữ liệu MNIST [3] được sử dụng rộng rãi trong lĩnh vực computer vision:  Hình ảnh MNIST là chữ tối sáng trên nền tối  Kích thước hình ảnh là 28x28 pixel  Hình ảnh rõ nét, không có nhiễu Vì vậy dữ liệu đầu vào của mạng sau khi đưa xuống thử nghiệm sẽ là hình ảnh t ừ máy ảnh được giảm kích thước xuống 28x28 pixel và được chuyển đổi về ảnh xám theo công thức: BW = (8 ∗ G + 5 ∗ R + 3 ∗ B)/16

(1)

2. Thiết kế kiến trúc CNN Mạng được xây dựng với kích thước đầu vào nhỏ, giảm dần từ lớp này sang lớp khác và số lượng bộ l ọc tăng lên. Ở cuối mạng, một tập hợp các đặc điểm được hình thành và đưa vào bộ phân loại (classification layer), các nowrron đầu ra cho thấy khả năng hình ảnh sẽ thuộc về lớp nào cụ thể. Để xây dựng kiến trúc mạng, bộ quy tắc sau đây được đề xuất nhằm giảm thiểu tổng trọng số lưu trữ, sử dụng tính toán dấu phẩy tĩnh (fixed-point):  Giảm thiểu số lượng các l ớp kết nối đầy đủ (fully connected layers)  Giảm số lượng bộ lọc của từng lớp chập nhưng không làm giảm hiệu suất phân loại  Không sử dụng biến sai lệch (bias), điều này rất quan tr ọng khi chuyển từ dấu phảy động (floating-point) sang dấu phẩy tĩnh (fixed-point).  Sử dụng hàm kích hoạt (activation), như RELU, Tanh, sigmoid. Trước khi đưa mạng nơ-ron xuống phần cứng, phần huấn luyện (training) được chuẩn bị và thực hiện trên phần mềm để kiểm tra và lưu trọng s ố. Mô hình mạng nơ-ron được sử dụng là mô hình mạng Low Weights Digit Detector (LWDD) được sửa đổi (modification) dựa trên mô hình mạng VGG [4]. Cụ thể như sau:  Đầu tiên, LWDD được loại bỏ các lớp kết nối (fully connected layers) và biến sai lệch (bias).  Sau đó, lớp GlobalMaxPooling được thêm vào kiến trúc mạng thay vì lớp GlobalAvgPooling, hiệu quả của các lớp này như nhau...


Similar Free PDFs