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