Mô hình YOLO v2-Tiny

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Hệ thống nhận diện phương tiện giao thông bằng FPGA (Trang 33 - 47)

TÓM TÁT KHÓA LUẬN

Hinh 2.14. Tensor ba chiéu biéu dién anh mau

R- CNN. Ngoài ra, mô hình đánh giá sai số của bounding box nhỏ và boundig box

2.5.4. Mô hình YOLO v2-Tiny

Mô hình YOLOv2-Tiny là phiên bản cô đọng của YOLOv2. Goi là phiên bản cô

đọng bởi vì mô hình này chỉ sử dụng 9 lớp tích chập thay vì 22 lớp như bản gốc, thé hiện ở Hình 2.26. Nhờ đó, tốc độ xử lý của mô hình tăng gap 442% so với YOLOvI,

cụ thể YOLOv2-Tiny có thê đạt 244 FPS trên một GPU. Mặt khác, độ chính xác của

nó cũng giảm còn 23.6%, thâp hơn so với các biên thê khác, điêu này được thê hiện

104 52

2b ;

13 13 13 3

ina & a

13 13 13 1

§ b4 128 256 256 S12 1024 sẽ

16

ở Bảng 2.1.

416

208

416 34

3

Coũnw3 s3 Coanyds Coma x 3 Comes x 3 Cor 3 x3 Com 8 +3 Cũrw 3 xã Com 11 1 FhÄxD2 +2 mmmaKE2>“2 (THHP2*4 maxpZx2 maxyp2x2 maxpix2

Hình 2.26. Cau trúc mô hình YOLOv2-Tiny [1].

Mặc dù độ chính xác khá thấp, nhưng nó vẫn có thé được ứng dụng trong một số trường hợp. Hơn nữa kích thước mô hình nhỏ cũng như tốc độ xử lý nhanh là những

ưu thế dé hiện thực mô hình trên những môi trường giới hạn tài nguyên như máy tinh nhúng, hệ thống SoC-FPGA....

Bảng 2.1. So sánh hiệu suất của các phiên bản YOLO [2].

Detector | “"TMPT°TM | props | EPS | mAP value | 4%

layers data YOLOv1 26 Not given 45 63.5 VOC data

YOLOv1-Tiny 9 Not given 155 52.8 VOC data

YOLOv2 32 62.95 40 48.2 COCO data

YOLOv2-Tiny 16 5.42 244 23.6 COCO data

YOLOv3 106 140.7 20 57.8 COCO data

YOLOv3-Tiny 24 5.57 220 33.2 COCO data

23

2.5.5. Mô hình Custom YOLO

Đây là một biến thê được rút gọn của mô hình YOLOv2-Tiny phục vụ cho việc xây dựng hệ thống trên DEI-SoC. Mô hình đã lượt bớt một lớp tích chập của 'YOLOv2-Tiny và có cấu trúc như Hình 2.27.

Convolution 16 - Filter Convolution 512 - Filter

Activation = Leaky Activation = Leaky

Convolution 256 - Filter

Convolution 32 - Filter

Activation = Leaky Activation = Leaky

Convolution 512 - Filter

Activation = Leaky

Convolution 425 - Filter

Activation = Linear

Convolution 512 - Filter

Activation = Leaky

Hình 2.27. Cấu trúc mô hình Custom YOLO. [3]

Từ Bang 2.2. cho thấy độ chính xác của mô hình giảm và số lượng phép toán của

mô hình giảm hơn 2.5 lần số phép toán của mô hình gốc. Trong đó mAP thu được từ kết quả huấn luyện với 80 loại đối tượng của bộ dữ liệu COCO.

Bang 2.2. mAP và FLOPS của Tiny Yolov2 và Custom Yolo. [3]

Tiny YOLO | Custom

Yolo mAP 23.7 % 13.54 %

FLOPS 5.41 Bn 2.148 Bn

24

2.6. Mô hình YOLOv3

Hai năm sau, Joseph và Ali đã ra mắt phiên bản cải tiến hơn so với các phiên bản

cũ về mặt tốc độ xử lý, độ chính xác khi nhận diện các vật thể nhỏ, phân loại đối

Bảng 2.3 Bảng so sánh tốc độ của các kiến trúc mạng nơ-ron. [9]

tượng.

Backbone Top-1 Top-5

Darknet-19 [15] 74.1 91.8

ResNet-101[5] 77.1 93:7

ResNet-152 [5] 71.6 93.8

Darknet-53 TW2 93.8

Bn Ops

7.29 19.7 29.4 18.7

BFLOP/s

1246 1039 1090 1457

FPS

171 32 37 78

Mô hình sử dụng mang no-ron 53 lớp tích chập (Darknet-53 như Hình 2.28) thay

cho mang 19 lớp (Darknet-19) như YOLOv2, dựa theo Bảng 2.3, có thé thay BFLOPs của YOLOv3 là cao nhất, cho thay Darknet-53 tận dụng GPU tốt hơn, nhờ vậy tính toán hiệu quả và xử lý nhanh hơn so với những mô hình sử dụng quá nhiều lớp như

ResNet-101, ResNet-152.

1x

2x

8x

8x

4x

Type Filters Size Output

Convolutional 32 3x3 256 x 256 Convolutional 64 3x3/2 128 x 128 Convolutional 32 1x1

Convolutional 64 3x3

Residual 128 x 128

Convolutional 128 3x3/2 64x64 Convolutional 64 1x1

Convolutional 128 3x3

Residual 64 x 64

Convolutional 256 3x3/2 32x32 Convolutional 128 1x1

Convolutional 256 3x3

Residual 32 x 32

Convolutional 512 3x3/2 16x16 Convolutional 256 1 x 1

Convolutional 512 3x3

Residual 16 x16

Convolutional 1024 3x3/2 8x8 Convolutional 512 1x1

Convolutional 1024 3x3

Residual 8x8 Avgpool Global

Connected 1000

Softmax

Hình 2.28. Cấu trac Darknet-53 ma mô hình YOLOv3 dùng. [9]

25

Bảng 2.4. Bảng so sánh độ chính xác của nhiều mô hình khác nhau. [9]

backbone AP APso APz5 | APs APar AP¿, Two-stage methods

Faster R-CNN+++ [5] ResNet-101-C4 34.9 55.7 37.4 15.6 38.7 50.9

Faster R-CNN w FPN [8] ResNet-101-FPN 362 59.1 390 | 182 39.0 482

Faster R-CNN by G-RMI [6] | Incepton-ResNet-v2[2!] | 347 555 367 | 135 381 520 Faster R-CNN w TDM [20] Inception-ResNet-v2-TDM | 36.8 57.7 39.2 16.2 39.8 52.1 One-stage methods

YOLOv2 [I5] DarkNet-19 [15] 216 440 192 | 50 224 35.5

SSDS13 [1 1, 3] ResNet-101-SSD 312 504 333 | 102 345 498

DSSDSI3 [3] ResNet-101-DSSD 33.2 533 352 | 130 354 S11

RetinaNet [9] ResNet-101-FPN 391 591 423 | 218 427 502

RetinaNet [9] ResNeXt-101-FPN 408 611 441 | 241 44.2 51.2

YOLOv3 608 x 608 Darknet-53 33.0 579 344 | 183 354 419

Ngoài ra, theo Bang 2.4, mô hình YOLOv3 có độ chính xác khá cao, chỉ xếp sau những mô hình RetinaNet. Khả năng nhận diện các vật thể nhỏ tuy không quá cao nhưng cũng tốt hơn 13% so với phiên bản cũ.

2.7. Mô hình Tinier-YOLO [9]

Như đã đề cập ở mục trước, đê có thê biểu diễn mô hình trong môi trường tài

nguyên bị giới hạn như board FPGA, máy tính nhúng như Jetson Nano, Raspberry

Pi..., mô hình nhận diện cần phải có kích thước nhỏ gọn nhưng vẫn đảm bảo hiệu

quả, Tiny-YOLOv3 là một ví dụ. Mô hình này được rút gọn từ mô hình YOLOv3.

Tuy nhiên kết quả dự đoán của mô hình có độ chính xác chưa cao cũng như hiệu suất theo thời gian thực chưa đạt yêu cầu trên thiết bị có khả năng tính toán thấp. Do đó,

mô hình Tinier YOLO ra đời nhằm giảm kích thước mô hình và tăng độ chính xác của kết quả dự đoán. Cũng như các mô hình YOLO khác, Tinier YOLO cũng sử dụng lớp tích, lớp max pool để xây dựng mô hình. Ngoài ra, Tinier YOLO module nhiều lớp tích chập được gọi là fire module dé tăng độ chính xác của mô hình.

2.7.1. Fire module

Fire module là một nhóm ba lớp tích chập được chia làm hai phần, gồm phần vắt (squeeze part) và phan mở rộng (expand part). Phần vắt sử dung lớp tích chập với filter 1x1, đây là một phương pháp hữu hiệu giảm số lượng tham số của mạng được

dé xuất bởi NIN. Vì sử dung filter 1x1 tức là filter chỉ có một phần tử nên rất thuận tiện cho việc huấn luyện ma không làm giảm độ chính xác quá nhiều. Phần mở rộng

26

sử dụng các lớp tích chập filter 1x1 và filter 3x3 , mở rộng kích thước dữ liệu đầu ra. Kết quả của hai phần trên sẽ được nối với nhau dùng làm kết quả của module.

Sử dụng một số lượng fire module nhất định trong mạng vừa giúp làm giảm số lượng tham số của mô hình, vừa tăng chiều sâu cho mô hình - điều được chứng minh

là giúp làm tăng độ chính xác của mô hình. [10]

2.7.2. Cấu trúc mô hình Cấu trúc mô hình được chia làm ba phần chính:

e Phan đầu kế thừa năm cặp lớp (tích chập - max pool) đầu tiên của Tiny

YOLOv3.

© Phần giữa gồm sáu fire module đảm nhận việc nén số lượng tham số của mang

(parameters compression) và kết nói dữ liệu giữa các fire module với nhau (dense connection). Dữ liệu đầu ra sau sáu module sẽ được dùng để thực hiện đưa ra kết quả dự đoán lần thứ nhất.

©_ Phần sau gồm hai fire module sẽ kết hợp hai dữ liệu đầu ra của phần đầu và

phan giữa dé đưa ra kết quả dự đoán lần thứ hai.

Input | Ỉ

1 Fire Made

t _Fire Made Petrone

nM

Dense Connection

p “The Later Part The Promt Part The Middle Part

1a Ra

Hình 2.29. Cầu trúc mô hình Tinier YOLO. [9]

27

2.8. Darknet [11]

Darknet được phát triển bởi Joseph Chet Redmon. Nó là một framework mã nguồn

mở hỗ trợ thuật toán CPU và GPU, cai đặt nhanh và dé dang. Do đó, nó thường được dùng dé hiện thực, huấn luyện các mô hình YOLO. Ngoài ra, darknet cũng được phát triển một số phiên bản hỗ trợ ngôn OpenCL, tạo điều kiện để hiện thực hệ thống nhận

điện trên FPGA.

2.9. OpenBLAS [12]

Basic Linear Algebra Subprograms là một interface cho các biểu thức đại số tuyến tính cơ bản thường được sử dụng. BLAS hỗ trợ cho các phép tính ma trận và vector phức tạp khi hiện thực các ứng dụng. Các nhà phát triển ứng dụng hay thư viện chỉ tập trung vào các thuật toán có sử dụng các biểu thức được hỗ trợ bởi BLAS, còn việc tối ưu kiến trúc của tầng ứng dụng sẽ dành cho chuyên gia.

OpenBLAS là thư viện BLAS được tối ưu hóa dựa trên phiên bản GotoBLAS2

1.13 BSD.

2.10. Số dấu chấm động (Floating point)

2.10.1. Số chấm động với chuẩn IEEE 754

Số dấu cham động là dạng dir liệu sé thường được sử dụng trong lập trình dé biểu diễn số thực với độ chính xác khá cao. Số dấu chấm động với định dạng theo chuẩn IEEE

754 thường được dùng hiện nay sẽ bao gồm ba thành phần là phần dấu (sign), số định trị (mantissa hay significand fraction) và số mũ (exponent). Số dấu chấm động còn được chia làm hai dạng chính là single precision có 32 bit biểu diễn.

Trong đó, biểu diễn nhị phân của dạng bao gồm ba trường (Hình 2.30) Sign (1 bit) biếu diễn dấu của giá tri, Exponent (8 bit) biểu diễn phần mũ của số dau chấm động, Mantissa (hay significand/coefficient) (23 bit) là phần định trị.

Giá trị số thực của một biểu diễn nhị phân số dấu châm động được xác định theo công thức (2.1). Trong đó, bias của dang single precision là 127 theo chuan IEEE.

~1Š#" x (1.0 + 0.Mantissa) x 2E*ponentbias (2.1)

28

“ 32 Bits >

Sign Exponent Mantissa

<—1Bit—> ô 8 Bits > 23 Bits >

Single Precision IEEE 754 Floating-Point Standard

Hình 2.30. Số dau cham động dang single precision theo chuẩn IEEE 754.

Single precision biểu diễn các giá trị trong phạm vi từ -3.40282347E+38 đến - 1.17549435E-38 hoặc từ 1.17549435E-38 đến 3.40282347E+38.

2.10.2. Số chấm động half-precision với chuẩn IEEE 754

Số dấu chấm động half-precision có kích thước 16 bit có cấu trúc tương tự với dang dấu chấm động single precision. Half-precision cũng có ba trường với Sign(1

bit), Exponent (5 bit), Mantissa (10 bit).

Half-precision biểu diễn các giá trị trong phạm vi +65,504 với giá trị dương nhỏ nhất là 1 + 1/1024.

exponent fraction

sign (5 bit) (10 bit)

lf l ]

te) (=) ử

15 10 ũ

Hình 2.31. Số dấu chấm động half-precision theo chuẩn IEEE 754.

Half-precision thường được sử dụng trong các môi trường đồ họa để lưu trữ

điểm ảnh như Direct3D, MATLAB, OpenEXR... và trong các phần cứng và phần mềm máy học hay mạng thần kinh nhân tạo thường có khối lượng công việc tính

toán lớn mà không yêu cầu độ chính xác khá cao. Việc sử dụng half-precision trong tính toán giúp hệ thống thực thi nhanh hơn so với đạng single hay double precision.

29

2.11. GEMM (General Matrix Multiplications) [13]

GEMM được định nghĩa là biểu thức C = @AB + BC voi A và B ma trận, a

và B là biến vô hướng va C là ma trận tổn tại trước được ghi dé bởi kết quả đầu ra (Hình 2.32). Biểu thức tích của hai ma trận A*B là một GEMM với ơ bằng 1 va B bằng 0. Ví dụ: trong dữ liệu chuyển của lớp fully connection, ma tran trọng số sẽ là đối số A, hàm kích hoạt tiếp theo sẽ là đối số B và ơ và B thường tương ứng là 1 và

0.

2.12. OpenCL (Open Computing Language) [14] [4]

OpenCL là một framework phục vụ cho việc lập trình song song ở cap thấp, và có HLS (high-level synthesis) tool cho phép việc synthesize design bằng ngôn ngữ C/C++. Một số các thiết kế phức tạp được thư viện hóa dé người thiết kế có thé tập trung vào việc thiết kế các kernel logic.

Về cơ bản, một nền tảng OpenCL bao gồm hai phần là máy chủ (host) và

accelerator (có chứa kernel code). Theo một flow thông thường, máy chủ sẽ load data

vào global memory của accelerator. Sau đó, sẽ khởi động các kernel logic để xử lý data này. Va cuối cùng, máy chủ sẽ nhận lại được kết quả.

30

C/C++ Programming OpenCL Programming

myapplication.c myapplication.c device_code.cl

/1 can also be a C++ file 11 can also be a C++ file 1/ OpenCL€ - a C99 dialect

hotspot 1 D[ „_ kemelvoldk0 £ ) Rxrifteke Kết tu cš elEnqueNDRangeKernel(.); ) Plead

(permet void 2

hotspot 2 clenquenRangekernl(.) Trane amet len

For (int I0; ieN, i++) {..) V }

CP CPU Accelerator

Hình 2.33. Workflow của OpenCL framework.

Ưu điểm của OpenCL ngoài việc có thể dùng ngôn ngữ C để thiết kế chương trình cho host thì nó có thé được sử dụng cho nhiều loại thiết bị khác nhau như CPU, GPU, FPGA nhờ các thư viện có sẵn mà vẫn đảm bảo được độ chính xác cao. Việc sử dụng OpenCL sẽ hợp với những chương trình đòi hỏi nhiều phép tính toán song song.

2.12.1. Cách OpenCL tổ chức các phép tính toán song song

Các phép tính toán được lặp lại nhiều lần khi được lập trình với OpenCL thường

được gọi là các work-item hay các thread. Các work-item này sẽ được nhóm lại thành

các work-group với định dạng kích thước có tên gọi là local dimension. Chỉ có những

work-item ở trong cùng work-group mới có thể chạy đồng bộ với nhau. Và cuối cùng,

nhóm các work-group sẽ có kích thước gọi là global dimension.

Kích thước local dimension luôn phải là ước số của kích thước global dimension.

Vi dụ: với global dimension là 224x160 thì local dimension có thể là 2x16, 4x10, ..., còn local dimension không hợp lệ sẽ là dạng 5x16 hoặc bat ky kích thước nao không phải là ước số của global dimension.

31

Local dimension 3x3

dnoi3-10M

Hinh 2.34. Global dimension, local dimension, work-group va work-item.

Sau đây là một bài toán cụ thé giúp hiểu rõ hơn về cách mà OpenCL thực hiện đồng bộ các phép tính:

Với bài toán tính tổng của một dãy số, có thé phân nhỏ các phép cộng ra như sau:

1Ị2|3|3|5|6|7|8|93|01-1)/2|13|134315|%6

+] G&G gị EF} xi 3i bị Ee

3 7 11 15 9 3 7 11

10 26 12 18

36 30

fy |] —

66

Hình 2.35. Vi du về cách ma OpenCL đồng bộ phép tính Nhu hình có thé thay các phép cộng có thê được thực thi song song với nhau. Vậy

có thể đưa ra giải pháp đồng bộ bằng cách đặt mỗi phép cộng là một work-item, với work-group có kích thước là 4 thì có được cầu trúc như sau:

32

Work-group size = 4 Work-group size = 4

3

work-item

/thread

Sau mỗi lần tính toán xong của một tang thì các work-item sẽ được gan lại cho các phép tính tiếp theo. Các work-item ở tầng kế tiếp sẽ phải chờ cho work-item ở tang trước đó thực thi xong. Ví du như work-item 1 ở tang 2 sẽ phải chờ cho work- item 2 và 3 ở tang 1 thực thi xong để nhận được dữ liệu cho phép tính. Tuy nhiên, việc tổ chức như vay sẽ gặp phải van đề xung đột giữa work-item khác work-group.

Đó là work-item 2 ở tầng 2 sẽ phải chờ cho work-item 4 và 5 ở tang 1 thực thi, nhưng

sự đồng bộ này là không hợp lệ do work-item 2 khác work-group với work-item 4 và

5 nên không thé đảm bảo được là kết quả của work-item 2 ở tang 1 có bị ghi dé lên

hay không.

Khi lựa chọn kích thước của work-group, cũng cần phải cân nhắc kĩ để chọn ra được kích thước phù hợp (thường thì nên là bội số của sé core) với số core sẵn có của một compute unit (thường sẽ là khối có chứa những module phục vụ cho các phép tính đơn giản như cộng, trừ, nhân, chia, mux,...) để tránh việc lãng phí core.

2.12.2. Truyền nhận dữ liệu

Kiến trúc của một thiết bị như FPGA hay GPU,... thường sẽ có global memory

va các compute unit. Như FPGA của board DE1-SoC sẽ có global memory là

SDRAM và các compute unit có các ALM (Adaptive Logic Module), LUT(Look-up

Table), DSP(Digital Signal Processing blocks),... Dé truyền nhận dữ liệu giữa host (trong dé tài này là HPS của board) va FPGA thi sẽ phải thông qua global memory

33

bằng cách cấp phát vùng nhớ trên global memory, sau đó sao chép đữ liệu cần dùng

từ host memory sang vùng nhớ đó.

Local memory thì sẽ là cầu nối giữa global memory và các work-item bên trong compute unit (việc dùng local memory là tùy chọn vì có thê truyền nhận giữa global memory đến các work-item nhưng tốc độ sẽ không được đảm bảo).

2.13. Intel® FPGA SDK for OpenCLTM [15]

Intel® FPGA SDK for OpenCLTM là môi trường cho hỗ trợ các nhà phát triển phần mềm gia tốc phần mềm bằng cách sử dụng Intel CPUs và FPGAs trên các nền tảng không đồng nhất. Công nghệ phần mềm của Intel SDK cho OpenCL cho phép người dùng tận dụng các tính năng của FPGA dé tăng tốc độ xử lý, sử dụng năng lượng hiệu quả và đạt độ trễ thấp. SDK cung cấp trình biên dịch và các công cụ hỗ trợ nhà phát triển xây dựng và chạy các ứng dụng OpenCL trên những sản phẩm của

Intel.

2.14. Tổng quan về board DE1-SoC

SDRAM Controller Subsystem

Controllers

Cortex-A9 MPU Subsystem

HPS-FPGA

Interfaces FPGA Fabric On-Chip Support (LUTs, RAMs, Multipliers & Routing) Memories Peripherals

Interface Peripherals

Hard Memory Controllers PLLs PLLs

Hình 2.37. Cấu trúc của hệ thông SoC-FPGA board DE1-SoC.

34

Kit phát triển DE1-SoC cung cấp một nên tảng thiết kế phan cứng mạnh mẽ được phát triển từ Altera SoC FPGA. Kit bao gồm lõi nhúng dual-core Cortex-A9 và FPGA. fabric công nghiệp hàng đầu của Altera. Ngoài ra hệ thông Altera SoC còn tích hợp

hệ thống xử lý cứng dựa trên ARM (HPS - Hardware Processor System) bao gồm bộ

xử lý, thiết bị ngoại vi và giao diện bộ nhớ được kết nối liền mach với kết cấu FPGA bằng cách sử dụng đường trục kết nói băng thông cao như Hình 2.37. Do đó có board DEI-SoC nhiều tính năng cho phép người dùng thiết kế nhiều loại mạch, từ các mạch đơn giản đến các dự án đa phương tiện khác nhau.

No:

mm.

_ VGA Out

Mic Line Line VGA HPS Gigabit HPS

In In Out Video-in 24-bitDAC | Ethemet USB Host UART-to-USB

USB HUB

STAG Header UART-to-USB

Controller

Audio Codec ‘ "

Video Decoder ‘Micro SD Card

PS2 b 5.

USB PHY

— Ethemet PHY USB-Blaster II

tơ 2x20 GPIO x2

Power DC Jack 1GB DDR3 SDRAM

- A Altera 28m.

Power ON/OFF Cyclone V FPGA

with ARM CortexAS

64MB SDRAM.

ADC ADC Header

7-Segment Display

LED x10

Switch x10 WARM_RST | HPS User Button

HPS_RST

Hình 2.38. Board DE1-SoC layout.

Các thành phan chính được cung cap trên board DEI-SoC (Hình 2.38) bao gồm:

+ FPGA Device

e Cyclone V SoC S5CSEMASF31C6 Device

e Dual-core ARM Cortex-A9 (HPS)

® 85K Programmable Logic Elements

e 4,450 Kbits embedded memory

e 6 Fractional PLLs

35

e 2 Hard Memory Controllers

Thanh phan bộ nhớ

e@ 64MB (32Mx16) SDRAM on FPGA

e@ 1GB (2x256Mx16) DDR3 SDRAM on HPS

e Micro SD Card Socket on HPS

Thanh phan giao tiép

e Two USB 2.0 Host Ports (ULPI interface with USB type A connector)

on HPS

® UART to USB (USB Mini B connector)

e 10/100/1000 Ethernet

e@ PS/2 mouse/keyboard

e IR Emitter/Receiver

36

Một phần của tài liệu Khóa luận tốt nghiệp Kỹ thuật máy tính: Hệ thống nhận diện phương tiện giao thông bằng FPGA (Trang 33 - 47)

Tải bản đầy đủ (PDF)

(81 trang)