Camera là một giải pháp thay thé dé dàng tiếp cận và không tốn quá nhiều chi phí.Việc sử dụng camera để thu hình ảnh của người lái xe trong quá trình điều khiểnphương tiện giao thông để
Thư viện mã nguồn mở Open-Source Computer Vision Library?Ì
Tổng quan về OpenCCV -¿- c +keEk£EE+EE2E12E12121712171 211 e 4 2.1.2 OpenCV với CUDA - Compute Unified Device Architecture
OpenCV (Open-Source Computer Vision Library) là một thư viện mã nguồn mở về thị giác máy tính và máy học OpenCV được xây dựng để cung cấp một cơ sở hạ tầng chung cho các ứng dụng thị giác máy tính và tăng tốc việc đây mạnh sự hiệu quả của các chương trình máy hoc trong các sản pham thương mại Là một sản phẩm được cấp phép BSD, OpenCV giúp các doanh nghiệp dé dàng sử dụng và sửa đổi mã.
Thư viện có hơn 2500 thuật toán được tối ưu hóa, trong đó bao gồm một bộ đầy đủ của cả thuật toán máy học và thị giác máy tính cô điển và hiện đại. Các thuật toán này có thể được sử dụng để phát hiện và nhận dạng khuôn mặt, xác định đối tượng, phân loại hành động của con người trong video, theo dõi chuyên động của máy ảnh, theo dõi đối tượng chuyền động, trích xuất mô hình 3D của đối tượng, tạo ra các đám mây điểm 3D từ máy ảnh âm thanh nỗi, ghép các hình ảnh lại với nhau dé tạo ra hình ảnh có độ phân giải cao của toàn bộ cảnh, tìm các hình ảnh tương tự từ cơ sở dữ liệu hình ảnh, loại bỏ mắt đỏ khỏi hình ảnh được chụp bằng đèn flash, theo dõi chuyên động của mắt, nhận dạng phong cảnh, v.v OpenCV có hơn 47 nghìn người dùng Cộng đồng và số lượt tải xuống ước tính vượt quá 18 triệu Thư viện được sử dụng rộng rãi trong các công ty, nhóm nghiên cứu và các cơ quan chính phủ.
Cùng với các công ty lâu đời như Google, Yahoo, Microsoft, Intel, IBM,
Sony, Honda, Toyota sử dụng thư viện, có rất nhiều công ty khởi nghiệp như
Applied Minds, VideoSurf và Zeitera, sử dụng rộng rãi OpenCV Cac ứng dung được triển khai của OpenCV trải dai từ việc ghép các hình ảnh chế độ xem phố lại với nhau, phát hiện sự xâm nhập trong video giám sát ở Israel, giám sát thiết bị bom mìn ở Trung Quốc, giúp robot điều hướng và nhặt đồ vật tai Willow Garage, phát hiện tai nạn đuối nước bề bơi ở châu Âu, chạy nghệ thuật tương tác trong Tây Ban Nha và New York, kiểm tra các mảnh vỡ ở đường băng ở Tho Nhĩ Kỳ, kiểm tra nhãn mác trên sản phẩm tai các nhà máy trên khắp thé giới dé phát hiện nhanh khuôn mặt ở Nhật Bản.
Nó có các giao diện C ++, Python, Java và MATLAB và hỗ trợ Windows,
Linux, Android và Mac OS OpenCV chủ yêu hướng tới các ứng dụng thị giác thời gian thực và tận dụng các lệnh MMX và SSE khi có sẵn Giao diện
CUDA và OpenCL day đủ tính năng đang được tích cực phát triển ngay bây giờ Có hơn 500 thuật toán và nhiều gấp khoảng 10 lần các hàm chức năng hoặc hỗ trợ các thuật toán đó OpenCV được viết nguyên bản bằng C ++ và có giao diện mẫu hoạt động liền mạch với các vùng chứa STL.
2.1.2 OpenCV với CUDA - Compute Unified Device Architecture
Mô-đun GPU OpenCV là một tập hợp các lớp và chức năng dé sử dung kha năng tính toán của GPU Nó được triển khai bằng cách sử dụng NVIDIA *
CUDA * Runtime API và chỉ hỗ trợ GPU NVIDIA Mô-đun GPU OpenCV bao gồm các chức năng tiện ích, các tính năng từ đơn giản cho đến các thuật toán cấp cao Các chức năng tiện ích và tính năng đơn giản cấp thấp cung cấp cơ sở hạ tang mạnh mẽ dé phát triển các thuật toán tầm nhìn nhanh tận dụng lợi thế của GPU trong khi chức năng cấp cao bao gồm một số thuật toán hiện đại (chăng hạn như tương ứng âm thanh nổi, bộ phát hiện khuôn mặt và người, v.v.) sẵn sàng được sử dụng bởi các nhà phát triển ứng dụng.
Mô-đun GPU được thiết kế như một API máy chủ Điều này có nghĩa là nếu bạn đã biên dịch trước mã nhị phân GPU OpenCV, bạn không bắt buộc phải cài đặt Bộ công cụ CUDA hoặc viết bat kỳ mã bồ sung nao dé sử dung GPU.
Mô-đun GPU OpenCV được thiết kế dé dé sử dụng và không yêu cầu bat kỳ kiến thức nào về CUDA Mặc dù vậy, kiến thức như vậy chắc chắn sẽ hữu ích dé xử ly các trường hợp không nhỏ hoặc đạt được hiệu suất cao nhất Sẽ rất hữu ích nếu bạn hiểu chi phí của các hoạt động khác nhau, GPU làm gi, định dạng dữ liệu ưa thích là gì, v.v Mô-đun GPU là một công cụ hiệu quả để thực hiện nhanh chóng các thuật toán thị giác máy tính tăng tốc GPU Tuy nhiên, nếu thuật toán của bạn liên quan đến nhiều thao tác đơn giản, thì để có hiệu suất tốt nhất có thé, bạn vẫn có thê cần viết hạt nhân của riêng mình dé tránh các thao tác ghi và đọc thêm trên các kết quả trung gian.
Thư viện mã nguồn mở dib . 2-2 s£+£+S£EE+EE£EE£+EE£EEerxzEezrerrxerxee 6 2.3 Thuật toỏn Support Vector Machine — SVM[Tệè, -++s+s+x+s+Êzceeexrse 7 2.3.1 _ Giới thiệu về Support Vector Machine ¿-s¿©z+cs+5c+¿ 7 2.3.2 Sơ lược về cách hoạt động của Support Vector Machine
Cơ bản về hoạt động của mô hình Single Shot Detector
e Ý tưởng: Ý tưởng chính của SSD đến từ việc sử dụng các bounding box, bằng việc khởi tạo sẵn các box tại mỗi vị trí trên ảnh, SSD sẽ tính toán và
19 đánh giá thông tin tại mỗi vi trí xem vi trí đó có vật thé hay không, nêu có thì là vật thê nào, và dựa trên két quả của các vi trí gan nhau,
SSD sẽ tính toán được một box phù hợp nhất bao trọn vật thê.
Ngoài ra, bằng việc tính toán bounding box trên các feature map khác nhau, tại mỗi tầng feature map, một box sẽ ôm trọn một phần hình ảnh với các kích thước khác nhau Như trên ví dụ dưới đây (hình 11), con mèo và con chó có thé được phát hiện ở hai tầng feature map khác nhau, hai kích thước và tỉ lệ khác nhau Thay vì sử dụng một box và thay đổi kích thước box cho phù hợp với vật thé, thì SSD sử dụng nhiều box trên nhiều tầng, từ đó tổng hợp ra vị trí và kích thước box kết quả Bằng việc loại trừ các region proposal, SDD có thê đạt được tốc tộ xử lí cao hơn Faster R-CNN. lŸloc : A(cz, cụ, w, h) conf : (ex, 21° ` Cụ) e Kiến trúc của Single Shot Detector:
SSD sử dụng kiến trúc VGG16 — một kiến trúc mạng tích chập tiêu chuẩn thường được sử dụng cho việc detect ảnh có chất lượng cao — đóng vai trò như một kiến trúc cơ sở cho hệ thống để extract các feature map Sau đó SSD thêm một số convolutional feature layers vào phía sau kiến trúc VGG16 SSD sử dụng các filter có kích thước 3 x 3 x p trên các layer dùng dé dự đoán thay vi dùng fully connected layer như trên YOLO Bằng việc sử dụng các filter, kích thước của
20 các feature map sẽ giảm dân theo độ sâu của mang, hỗ trợ cho việc phát hiện vật thé ở các kích thước và tỉ lệ khác nhau.
Trên một feature map kích cỡ m x n, tại mỗi vị trí cell hay tại mỗi pixel, khởi tạo các default bounding box, các box này có vai trò giống như các anchor của Faster R-CNN Tuy nhiên, vì vị trí của mỗi cell cố định nên các box nảy cũng sẽ được cố định Tại mỗi cell, giả sử khởi tạo k box, SSD phải tính toán phân loại c class và đồng thời tính toán xem hình dáng của box như thế nào, như tọa độ (cx, cy), dài và rộng (w, h) Vậy tổng số tính toán là (c+4) * k * m * n.
Conv: 3x3x1024 Conv: 1x1x1024 Com:1xx296 Conv: 1x1xi28 Conv:1xixi28 Conv:1x1x128
Conv: 3x3x(4x(Classes+4)) Detections:8732 per Class
Hình 12 Kiến trúc của mô hình Single Shot Detector [12]
2.4.3 Training với mô hình Single Shot Detector
Việc training của Single Shot Detector yêu cầu được cung cap thông tin về các groundtruth của vật thé bao gồm các thông tin về class và shape.
Vì vậy dé thực hiên training cho mô hình, chúng ta phải cần một tập dữ liệu chứa khung để xác định vị trí của mỗi đối tượng và được gán nhãn tương ứng.
Khái niệm về Intersection Over Union (IoU): e Là chỉ số đánh giá được sử dụng để đo độ chính xác của các Object
Detector trên tập dt liệu cu thé Mọi thuật toán có khả năng dự đoán ra các bounding box làm output đều có thê được đánh giá qua IoU.
21 e Để có thé áp dụng được IoU dé đánh giá một Object Detector bat ki ta cần: những ground-truth bounding box (bounding box đúng của đối tượng, ví dụ như bounding box của đối tượng được khoanh vùng và đánh nhãn bằng tay sử dụng trong tập test.) và Những predicted bounding box được sinh ra từ model Ví dụ như hình sau:
Hình 13 Ví du về Intersection Over Union e Công thức tinh toán Inersection over Union có thé được định nghĩa thông qua:
Hình 14 Công thức tinh cua Intersection Over Union
Nhìn vào công thức này, ban sẽ thay IoU đơn giản là một tỉ lệ O tử số ta tính toán area of overlap - diện tính phần chồng lên nhau giữa predicted bounding box và ground-truth bounding box Phần mẫu số là area of union - diện tích phần hợp - hay đơn giản hơn là diện tích mà hai bounding box này đang chiếm Chia diện tích phần chồng (giao) cho diện tích phần hợp sẽ thu được giá trị mà ta mong muốn -
Hình 15 Công thức tinh cua Intersection Over Union (tt)
2.4.4. e Trong quá trình traning, ta tiến hành tìm các default box trên các feature map phù hợp với ground-truth bounding box bằng cách tìm các box có loU cao Thường các box được chọn sẽ có chỉ số loU > 0.5 Trong trường hợp có nhiều box có IoU lớn hơn 0.5 thì chương trình sẽ ưu tiên chọn các box có chỉ số IoU cao hơn.
Hàm loss của mô hình Single Shot Detector
Ham loss của mô hình Single Shot Detector được xây dựng bang hai hàm chính là localization loss để đánh giá việc phát hiện và confidence loss dé đánh giá việc phân lớp đối tượng. Đặt xi = {1,0} ứng với default box thứ i khớp với groundtruth thứ j thuộc lớp p, ta có ham loss sau:
LG;e,L,8) = 7 Leon Gre) + luce bg) “ẾD
N ở đây là số lượng những default box phù hợp được tìm ở bước trên. Nếu N =0 thi Loss = 0 Ham Loss L„„„ được tính bằng Smooth L1 loss giữa box dự đoán (1) và ground-truth box (g) Với các tham số như điểm chính giữ (cx, cy) của default box (d) và chiều dài (w), chiều rộng (h). e Localization Loss:
Lục (%X, Lg) = ằ ằ xjsmooth,(" — Gj) (2.21) i € Pos mE {cx,cy,w,h} e Confidence Loss:
Leong (40) = — ằ xj, log(ờ”) — >, log(ờ7) (2.22) ¡€Pos ie€ Neg
2.4.5 Chon kích thước và tỉ lệ default box
Các feature map ở độ sâu khác nhau sẽ có kích thước khác nhau, vì vậy, kích thước của các default box cũng được thay đổi theo độ sâu của feature map Ví dụ với độ sâu là m (bao gồm m feature map tai bước detect):
Sk = Smin aig = [1, mM], Smin = 0.2, Smax = 0.9
Giả sử với m = 3, ta lân lượt sẽ có s; = 0.2, sz = 0.55, s3 = 0.9.
Với tỉ lệ giữa chiêu dai va chiêu rộng cua box, sẽ tính được với a, €
Chiều dài và chiều rộng có thé tinh từ a, : wt = Sự ay (2.23) ht = s/o (2.24)
Với trường hop tỉ lệ bang 1, ta thêm 1 box nữa với kích thước là
Sự = VwSxS„ +1 Như vậy, trên một vi trí của feature map sẽ có tổng cộng 6 bounding box Tâm điểm của mỗi box sẽ được tính bằng:
Với |ƒ„| là kích cỡ của feature map hình vuông i,j là vị trí của cell.
2.5 Phương pháp đánh giá một model Machine Learning"*!
Việc đánh giá sẽ được dựa vào những chỉ số như sau để đánh giá tính chính xác và cũng đánh giá tính độ tin cậy của model.
Accuracy (độ chính xác): Day là cách đơn giản và được sử dụng nhiều nhất tính tỉ lệ giữa số điểm được dự đoán đúng va tổng số điểm trong tập dữ liệu kiểm thử Cách đánh giá này đơn giản tính tỉ lệ giữa số điểm được dự đoán đúng và tong số điểm trong tập dữ liệu kiểm thử.
Confusion matrix: Chỉ ra được cu thé mỗi loại được phân loại như thế nào, lớp nào được phân loại đúng nhiều nhất, và đữ liệu thuộc lớp nào thường bị phân loại nhằm vào lớp khác Về cơ bản, confusion matrix thể hiện có bao nhiêu điểm dir liệu thực sự thuộc vào một class, và được dự đoán là rơi vào một class.
True/False Positive/Negative: thường được áp dụng cho các bài toán phân lớp có hai lớp dữ liệu Cụ thé hơn, trong hai lớp dữ liệu này có một lớp nghiêm trọng hơn lớp kia và cần được dự đoán chính xác Ví dụ, trong bài toán xác định có bệnh ung thư hay không thì việc không bị sót (miss) quan trọng hơn là việc chân đoán nhằm âm tính thành dương tính Trong bài toán xác định có mìn dưới lòng đất hay không thì việc bỏ sót nghiêm trọng hơn việc báo động nhằm rất nhiều Hay trong bài toán lọc email rác thì việc cho nhằm email quan trọng vào thùng rác nghiêm trọng hơn việc xác định một email rác là email thường.
Thông số kỹ thuật của Kit NVIDIA Jetson nano
- CPU: quad-core ARM® Cortex®-A57 CPU
- _ Bộ nhớ: khe căm thé microSD (devkit) hoặc 16GB eMMC flash (Từ nha sản xuất)
- Kha năng sử lí video: o Encode: 4K @ 30 (H.264/H.265) o Decode: 4K @ 60 (H.264/H.265)
- Cac công giao tiếp: o Ethernet: 10/100/1000BASE-T self-negotiation o Camera: 12-ch (3x4 OR 4x2) MIPI CSI-2 DPHY 1.1 (1.5Gbps) o Display: HDMI 2.0, DP (DisplayPort) o USB: 4x USB 3.0, USB 2.0 (Micro USB) o Others: GPIO, I2C, I2S, SPI, UART
- Nguồn cấp: o Micro USB (5V 2.5A) o DC Jack (5V 4A)
Hinh 16 Kit NVIDIA Jetson Nano
2.6.3 CUDA trén kit NVIDIA Jetson Nano
NVIDA Jetson Nano là một trong những máy tính nhúng có giá thành rẻ nhưng có hỗ GPU và đặc biệt là CUDA.
CUDA là một nền tang tính toán song song và mô hình lập trình được phát triển bởi NVIDIA dé tính toán chung trên các đơn vị xử lý đồ hoa (GPU). Với CUDA, các nhà phát triển có thé tăng tốc đáng ké các ứng dụng điện toán bằng cách khai thác sức mạnh của GPU.
CUDA cho phép các nhà phát triển truy nhập vào tập các chỉ lệnh ảo và bộ nhớ của các phần tử tính toán song song trong đơn vị xử lý đồ họa của CUDA (CUDA GPU) Sử dụng CUDA, các GPU do NVIDIA sản xuất có thé dé dàng thực hiện các tính toán như những CPU Tuy nhiên, không giống như các CPU, các GPU có kiến trúc song song trên toàn bộ giúp cho sự tập trung vào khả năng thực thi một cách chậm rãi nhiều luồng dữ liệu một lúc, hơn là thực thi rất nhanh một luồng dữ liệu Cách tiếp cận giải quyết các van đề có mục đích tổng quát này trên các GPU được gọi là GPGPU.
2.7 Tìm hiểu về thư viện TensorRT"!
TensorRT là một thư viện C++ giúp cho việc xử lý hiệu năng cao trên các đơn vị xử lý đồ họa GPU của NIVIA Nó được thiết kế để hoạt động theo kiểu bổ sung vào các fameworks như TensorFlow, Caffe, PyTorch, MXNet,
Đặc biệt TensorRT giúp các mạng đã được dao tạo hoạt động nhanh chóng và hoạt động hiệu quả trên GPU dé tạo ra kết quả tốt hơn.
Một số framework như TensorFlow đã tính hợp TensorRT dé có thé tăng tốc khả năng suy luận của mô hình Ngoài ra, TensorRT có thể được sử dụng làm thư viện trong ứng dụng người dùng Nó bao gồm các trình phân tích cú pháp để nhập các mô hình hiện có từ Caffee, ONNX hoặc TensorFlow và API C++, Python dé xây dựng các mô hình theo chương trình.
Hình 17 Tổng quan quy trình toi wu model với TensorRT
2.7.2 Tổng quan quy trình phát triển deep learning kết hợp TensorRT
Dé phát triển dự án deep learning kết hợp với TensorRT thì nhìn chung có 3 giai đoạn: e Giai đoạn 1: Đào tạo mô hình
Nhà phát triển sẽ phải triển khai van dé, xác định đầu vào, đầu ra dé phát triển mô hình training mong muốn Trong quá trình này, để có một model training tốt thì cần phải làm thực hiện thu thập di liệu, tăng cường quản lý gán nhãn các bộ dữ liệu dé dao tạo Sau đó thiết kế cấu trúc của mạng và đảo tạo mô hình Trong quá trình đào tạo cần phải giám sát quá trình training để có thé tăng cường chỉnh sửa chức năng hoặc thu thập thêm dữ liệu, tăng chất lượng model theo mong muốn. Ở quá trình này thì TensorRT không được sử dụng để đào tạo. e_ Giai đoạn 2: Phát triển giải pháp và triển khai
Trong quá trình này, nhà phát triển sẽ thực hiện việc ứng dụng mô hình đào tạo trong một hệ thong nào đó như có thê nói:
- Hé thống nhận diện khuôn mặt, hay vật thé
- Hé thống lái xe tự động
- Hé thống an ninh video trong khuôn viên công ty
TensorRT sẽ cung cấp một công cụ suy luận, module nhỏ gọn mạnh mẽ đáng tin cậy đê ho trợ các công việc suy luận của kiên trúc đã trién khai.
Sau khi xác định những việc cần thiết để thực hiện, nhà phát triển sẽ xây dựng công cụ suy luận từ model đã được training từ lúc trước bằng cách sử dụng TensorRT để tạo ra một model mới Nói cách khác, là chúng ta sẽ lấy model đã training trước đó phát triển phân tích thành TensorRT model bằng trình cú pháp ONNX, trình phân tích Caffe hoặc trình phân tích TensorRT/UFF như hình 18.
Hình 18 TensorRT tối wu hóa các mô hình mang than kinh được đào tạo dé tạo ra một công cụ suy luận thời gian TensorRT Runtime
Tiếp theo, sẽ xem xét các tùy chọn dé tối ưu hóa như bath size, kích thước workspace, độ chính xác hỗn hơp (mixed precision) Các tùy chọn và chỉ định này như là một phần để triển khai TensorRT nơi mà thực sự xây dựng một công cụ tối ưu model của mình.
Cuối cùng tiễn hành tối ưu model thành định dạng TensorRT. e Giai đoạn 3: Triển khai giải pháp
Giai đoạn này có nghĩa là hệ thống sẽ thực thi và chương trình xây dựng được thực thi cùng với TensoRT.
2.7.3 Lợi ích khi triển khai TensorRT
Giải thích ngắn gọn và dé dễ hiểu, với việc không sử dụng TensorRT thì mỗi model sẽ thực hiện đơn lẻ trên mỗi GPU, điều này có thé dẫn dé việc không sử dụng tốt nguồn tài nguyên của GPU trên các máy tính AI chuyên dụng như hiện nay được hỗ trợ với nhiều GPU.
Như hình 19 bên dưới làm ví dụ việc điều phối các model đơn lẽ trên mỗi
GPU. ằ * Single model / framework per GPU cpu s Utilization is low ĩ
* Peak load requires adding GPUs
Hình 19 Phân bo luông các model cho GPU
GPU GPU2 GPU3 — 6PU6 6PU7 0PUð
Hình 20 Hiệu suất khi thực thi models trên GPU Ở hình 20 thì ta có thể thấy tông tài nguyên được sử dụng không được quá cao, không sử dụng tốt nguồn tài nguyên của hệ thống dẫn đến GPUI và GPU2 quá tải so với các GPU khác thì được sử dụng rất ít gây ra lãng phí tài nguyên đáng kê.
Khi chúng ta tích hợp TensorRT có các model thì việc điều phối GPU giúp cân bằng được các nguồi tài nguyên như hình 21 và hình 22 bên dưới.
Every GPU runs multiple models / frameworks
Absorb peak loads more easily
6PU1 GPU2 GPU 3 GPU4 GPUS GPU 6 GPU7 GPU 8
All Models All Models All Models All Models All Models All Models All Models All Models
Hình 22 Hiệu suất điều phối của GPU khi sử dụng TensorRT
2.7.4 Dùng TensorRT để tối ưu file Tensorflow
Từ các kiến thức nhóm đã tìm hiểu về TensorRT ở trên, giải pháp tích hợp TensorRT vào Tensorflow có thê được áp dụng vào một số model ứng dụng như nhận diện được đối tượng, dịch thuật, Gia sử khi đã có được mô hình Tensorflow có khả năng nhận diện được vật thể, chúng ta có thể sử dụng
35 model đó dé thực thi các chương trình dự đoán bằng cách đóng băng lại biểu đồ mô hình được đã được train bởi Tensorflow và xuất file đưới dạng *.pb. Tiếp theo đó, ta chuyên đổi định dạng file *.pb sang định dạng *.uff, phố biến hơn và được hỗ trợ bởi TensorRT để xây dựng một engine có thể chạy trên nhân GPU của kit NVIDIA Jetson Nano Sau đó từ file *.uff ta sử dụng thư viện pyCuda và TensorRT để tiến hành build một engine và lưu engine đó thành một file *.bin, điều này sẽ giúp chúng ta đỡ mất thời gian build engine khi thực hiện chương trình lại nhiều lần Trong quá trình build engine, chúng ta sẽ cấu hình phần cứng của GPU dé thực hiện model trên, một số thuộc tính như workspace_size hay batch size, những thuộc tinh này sẽ ảnh hưởng đến hiệu suất cũng như độ chính xác của model khi chạy trên nhân GPU Bên cạnh đó chúng ta cũng cần cấu hình kích thước input và kết quả output mong đợi sao cho phù hợp với model Sơ đồ dưới đây sẽ cho thấy được quá trình áp dụng bộ tối ưu của TensorRT vào biểu đồ trong
Tensorflow khi áp dụng phương pháp này.
File graph *.pb — File uff *.uff > Fle enine "on
Hình 23 Quá trình build một file engine dé thực hiện chương trình
Lợi ích khi triển khai TensorR'T -¿- 2s s£sz+z+zx+rxezse+ 33 2.7.4 Dùng TensorRT dé tối ưu file Tensorflow 5- s52 35 Chương 3 PHAN TÍCH VÀ THIET KE HỆ THÔNG
Giải thích ngắn gọn và dé dễ hiểu, với việc không sử dụng TensorRT thì mỗi model sẽ thực hiện đơn lẻ trên mỗi GPU, điều này có thé dẫn dé việc không sử dụng tốt nguồn tài nguyên của GPU trên các máy tính AI chuyên dụng như hiện nay được hỗ trợ với nhiều GPU.
Như hình 19 bên dưới làm ví dụ việc điều phối các model đơn lẽ trên mỗi
GPU. ằ * Single model / framework per GPU cpu s Utilization is low ĩ
* Peak load requires adding GPUs
Hình 19 Phân bo luông các model cho GPU
GPU GPU2 GPU3 — 6PU6 6PU7 0PUð
Hình 20 Hiệu suất khi thực thi models trên GPU Ở hình 20 thì ta có thể thấy tông tài nguyên được sử dụng không được quá cao, không sử dụng tốt nguồn tài nguyên của hệ thống dẫn đến GPUI và GPU2 quá tải so với các GPU khác thì được sử dụng rất ít gây ra lãng phí tài nguyên đáng kê.
Khi chúng ta tích hợp TensorRT có các model thì việc điều phối GPU giúp cân bằng được các nguồi tài nguyên như hình 21 và hình 22 bên dưới.
Every GPU runs multiple models / frameworks
Absorb peak loads more easily
6PU1 GPU2 GPU 3 GPU4 GPUS GPU 6 GPU7 GPU 8
All Models All Models All Models All Models All Models All Models All Models All Models
Hình 22 Hiệu suất điều phối của GPU khi sử dụng TensorRT
2.7.4 Dùng TensorRT để tối ưu file Tensorflow
Từ các kiến thức nhóm đã tìm hiểu về TensorRT ở trên, giải pháp tích hợp TensorRT vào Tensorflow có thê được áp dụng vào một số model ứng dụng như nhận diện được đối tượng, dịch thuật, Gia sử khi đã có được mô hình Tensorflow có khả năng nhận diện được vật thể, chúng ta có thể sử dụng
35 model đó dé thực thi các chương trình dự đoán bằng cách đóng băng lại biểu đồ mô hình được đã được train bởi Tensorflow và xuất file đưới dạng *.pb. Tiếp theo đó, ta chuyên đổi định dạng file *.pb sang định dạng *.uff, phố biến hơn và được hỗ trợ bởi TensorRT để xây dựng một engine có thể chạy trên nhân GPU của kit NVIDIA Jetson Nano Sau đó từ file *.uff ta sử dụng thư viện pyCuda và TensorRT để tiến hành build một engine và lưu engine đó thành một file *.bin, điều này sẽ giúp chúng ta đỡ mất thời gian build engine khi thực hiện chương trình lại nhiều lần Trong quá trình build engine, chúng ta sẽ cấu hình phần cứng của GPU dé thực hiện model trên, một số thuộc tính như workspace_size hay batch size, những thuộc tinh này sẽ ảnh hưởng đến hiệu suất cũng như độ chính xác của model khi chạy trên nhân GPU Bên cạnh đó chúng ta cũng cần cấu hình kích thước input và kết quả output mong đợi sao cho phù hợp với model Sơ đồ dưới đây sẽ cho thấy được quá trình áp dụng bộ tối ưu của TensorRT vào biểu đồ trong
Tensorflow khi áp dụng phương pháp này.
File graph *.pb — File uff *.uff > Fle enine "on
Hình 23 Quá trình build một file engine dé thực hiện chương trình
Chương 3 PHAN TÍCH VÀ THIET KE HỆ THONG
Phân tích hệ thống ¿22 2++<+EESEE2EEEEEEEEEE1E211221271712211 21111 eeU 37 3.2 Thiết kế hệ thống -¿-©2¿©+¿22+2EE2EE22EE2E12211221221 211212212 xe 38 3.2.1 Tổng quan về chương trình ¿s©+s++zx++zx+zx++zxezrxe+ 38 3.2.2 Cac phương pháp được thực hiện trong chương trình
Phương pháp nhận diện ngáp - -++-++++xs+stssesserssereres 45 Chương 4 KET QUÁ THỰC NGHIỆỆM 2-2 52+S2+EE+EE+£E2EEzEEerxerkerer 41 4.1 Kết quả đánh giá model SVM dùng dé nhận biết chớp mắt
Dựa trên các tọa độ điểm đã tìm được trong lúc dùng để nhận diện chớp mắt Nhóm sẽ lưu tọa độ của các điểm dùng để mô tả môi trên và môi dưới của khuôn mặt dé tiến hành xác định ngáp Nhóm sẽ tiến hành so sánh tọa độ của các điểm để tìm ra điểm cao nhất của môi trên và thấp nhât của môi dưới, sau đó chương trình sẽ tính khoảng cách của hai diém
45 trên và so sánh với khoảng cách tối đa khi người đó không ngáp Nếu như hai khoảng cách trên có độ chênh lệch xảy ra trên nhiều khung hình liên tiếp nhau thì chương trình nhận diện người đó đang thực hiện hành vi ngáp. Ở đây vị trí đặt camera trên xe ô tô sẽ là phía sau vô lăng, sao cho camera có thé thu rõ được hình anh từ khuôn mặt của tài xế lái xe nhất Nhóm sẽ đặt giá trị ngưỡng tối đa mà người đó được cho là ngáp là 35 Nếu như khoảng cách giữa môi trên và môi dưới của tài xế lớn hơn 35 trong 10 khung hình nhất định, chương trình sẽ xác định đó là một lần ngáp cho đến khi người đó trở về trạng thái bình thường.
Chương4 KET QUA THỰC NGHIEM
Sau quá trình thực hiện chương trình, nhóm tiến hành quá tình kiểm thử cho chương trình Nhóm sẽ đánh giá dựa trên ba yếu tố chính là độ chính xác của model SVM dùng dé nhận biết chớp mắt, độ chính xác của chương trình nhận diện tiền buồn ngủ và độ trễ của phần nhận diện tài xế ngủ gật Bên cạnh đó, nhóm sẽ đánh giá tốc độ xử lý của chương trình trên kit NVIDIA Jetson Nano dựa trên tốc độ khung hình xử lí và phần trăm sử dụng của GPU.
4.1 Kết quả đánh giá model SVM dùng để nhận biết chớp mắt
Trong phần này, chúng tối sẽ giới thiệu những kết quả thực nghiệm khi huấn luyện các mô hình huấn luyện bằng những cấu hình khác nhau của thuật toán
SVM trên cùng một máy tính.
Chi tiết cau hình máy xử lý:
CPU: Intel, Core 15, 2 core - 4 threads,
Dữ liệu huấn luyện và đánh giá: Ở phan huấn luyện này, với bộ dữ liệu là Eyeblink8 (5900 mau) được xử lý cân bằng đã được giới thiệu ở phần trên là là bộ dữ liệu dé chúng tôi huấn luyện cho các mô hình SVM khác nhau.
Bộ dữ liệu được huấn luyện đựa chia thành hai phan: Training va Test với tỉ lệ
8:2 e Training: chiếm 80% trên tổng số của bộ dữ liệu sẽ có 4720 mẫu dữ liệu (2348 mẫu của lớp số 1 trên 4720 mẫu). e Test: chiếm 20% của bộ dữ liệu sẽ có 1180 mẫu dữ liệu (602 mẫu của lớp số 1 trên 1180 mau dữ liệu).
Với thuật toán SVM, việc sử dụng các kernel khác nhau dé phù hop với mỗi bộ dự liệu khác nhau là điều quan trọng Do vậy với những kernel đã tìm hiểu nhóm sẽ huấn luyện cho tuật toán SVM này từng kernel khác nhau với cùng một tham
47 số C = 2 dé chọn được một kernel có độ chính xác và phù hợp nhất với bộ dữ liệu Eyeblink8.
Chúng tôi lần lượt training với các kernel Linear, Polynomial, Radial Basic
Function (RBF), và sigmod và sẽ đánh gia chúng thông qua gia tri Accuracy (độ chính xác) dé chọn một kernel tốt nhất.
Sau khi hoàn thành traing cho mỗi SVM với mỗi kernel cùng với tham số C thì có được kết quả:
Bảng 4 Độ chính xác của model theo các loại Kernel
Kernel Linear Polynomial RBF Sigmod
Như vậy rõ ràng khi training cùng một giá trị tham số C = 2 cho lần lượt từng kernel thì với độ chính xác là 94,89% thi kernel RBF tốt hơn rất nhiều so với những kernel còn lại Điều này cũng có thé dé đoán trước rằng RBF sẽ có độ chính xác cao nhất vì theo những bài báo đánh giá cho rằng khi sử dụng kernel rbf dé traing SVM df liệu được tao ra một cách đối x, đường phân lớp tìm được cũng tạo ra các vùng đối xứng với mội lớp, nghiện này được cho là hợp lý hơn.
Và trên thực tế, các RBF kernel được sử dụng nhiều nhất và cũng là lựa chọn mặc định và một số thử việc như sklearn cũng chọn RBF kernel là kernel mặc định.
Sau khi chọn được kernel cần thiết là RBF kernel, chúng thay đôi giá tri của tham số C để có thé tăng thêm độ chính xác của model.
Việc chọn tham số C, nhóm chọn tham số C nằm trong khoảng từ [1;2] ở khoảng này đủ nhỏ dé có thé có được margin đủ lớn tốt làm cho model có thé tốt nhất Sau khi trainig từng qua từng tham số nhóm thu được kết quả như sau:
Hình 28 Biéu đô đánh giá độ chính xác dự trên độ biến thiên của giá trị C
Sau khi traing với những tham số C khác nhau thì ta thấy rằng với giá trị C = 1.9 là tốt nhất với độ chính xác 0.9489 (94.89%) Với C = 1.9 nó không quá lớn dé SVM để thu được nghiệm cho Soft margin Bên cạnh đó, một số chỉ số đánh giá khác cũng có thể thấy được độ ồn định của model.
Confusion matrix, without normalization Normalized confusion matrix
Hình 29 Thống kê kết quả đánh giá theo Confusion Matrix
1.8 8.94 8.96 accuracy macro avg weighted avg
Hình 30 Số liệu thống kê sau quá trình training Nhận xét:
Dựa vào bảng thống kê Confusion matrix với nhãn “0.0” với 578 điểm dit liệu kiểm thử thì dự đoán được chính xác 540 điểm (tương được độ chính xác là 0.93) Với nhãn “1.0” thì với 602 điểm dữ liện kiểm thử thì được đoán chính xác được 580 điểm (tương được độ chính xác là 0.96).
Cùng với đó giá trị fl-score là 0.95 là một giá tri cao đủ để cho thay rang model traing này đủ tốt để sử dụng phân loại.
Kết quả đánh giá chương trình nhận diện buồn ngủ
Bằng việc tối ưu tốc độ thực thi của chương trình trên kit NVIDIA Jetson Nano, chương trình hiện tại đã thực hiện được khác tốt chức năng nhận diện được trạng thái đang ngủ của tài xế lái xe với độ trễ khá thấp, chỉ trong không 0.5 giây sau khi tài xế đã chợp mắt Với tốc độ thực thi hiện tại là 20 khung hình trên một giây, sau khoảng 10 khung hình có độ mở của mắt bé hơn 0.2, tương ứng với 0.5 giây thì chương trình sẽ đưa ra cảnh báo là tài xế đã ngủ So với một số kit nhúng khác chỉ sử dụng CPU thì thời gian đưa ra cảnh báo từ 1 giây đến 2 giây, nguyên nhân là do tốc độ thực thi của các chương trình này thường khá thấp. Bên cạnh đó, nhóm sử dụng thuật toán SVM dé thực hiện đếm số lần chớp mắt kết hợp với số lần ngáp trong vòng một phút dé đưa ra nhận định trang thái tiền buôn ngủ cho tài xế Nhóm dự định thực hiện kiểm thử trên bộ dữ liệu Real Life
Drowsiness Dataset — RLDD, tuy nhiên trong bộ dữ liệu này, vị trí đặt máy camera cũng như điều kiện ánh sáng khiến cho chương trình khả năng nhận diện các điểm facial landmark chưa đạt được độ chính xác cần thiết, ảnh hưởng đến quá trình tính toán các giá trị độ mở của mắt cũng như nhận diện ngáp Vì lý do trên, nhóm quyết định kiểm thử chương trình với một vài video mà nhóm tự thực hiện Kết quả, chương trình đưa ra được những dựa đoán trạng thái về buồn ngủ cho mỗi phút mỗi khi nhóm thực hiện số lần chớp mắt nhiều hơn và có kết hợp với ngáp.
Hiệu suất của chương trình khi thực thi trên kit NVIDIA Jetson Nano
Sau khi thực hiện tối ưu chương trình trên kit NVIDIA Jetson Nano, tốc độ thực thi của chương trình đã được cải thiện một cách đáng kể Cụ thé, chương trình nhận diện khuôn mặt sẽ được thực hiện trên nhân GPU bằng việc sử dụng một engine được build bởi TensorRT Phan chương trình thực hiện tìm các điểm facial landmarks và tính toán các giá trị độ mở của mắt hay thực hiện đếm số lần chớp mắt trong một phút băng SVM được thực hiện trên nhân CPU Kết quả đạt được, chương trình đã đạt được tốc độ thực thi từ 19 đến 20 FPS, xung nhịp GPU dao động từ 26% đến 29%, điều này cho thấy chương trình có thể chạy trong một khoảng thời gian dài mà không lo sợ vấn đề về quá tải phần cứng So với khi thực thi chương trình trình trên các kit nhúng khác không sử dụng GPU hay khi sử dụng thư viện dlib dé nhận diện khuôn mặt trên hình thì phương pháp của nhóm giúp nhận diện được khuôn mặt với độ chính xác cao hơn va tốc độ thực thi chương trình cũng được cải thiện đáng kê.
Tuy nhiên, khi hoạt động trên kit NVIDIA Jetson Nano, sau một phút thực hiện nhiệm thu thập các giá trị EAR cho mỗi khung hình, chương trình thực hiện hàm tiến hành đếm số lần chớp mắt trong một phút trước đó, lúc này việc lay các giá trị sẽ được dừng lại cho đến khi thực hiện đếm xong số lần chớp trong một phút trước đó, thời gian này kéo dai từ 5 đến 7 giây.
Camera TensorRT SSD Demo for Jetson Nano
NVIDIA Jetson Nano (Developer Kit Version) - Jetpack 4.4.1 [LAT 32.4.4] t N
(0.947990550529377: ] 921NHz [ WARN:@] global /hone/jetson/opencv/nodutes/vtdeoto// open Ope! 7 warning: Cannot query video posit vat ———— [info] [Sensor] — [Tenp] — [Power/nM] - [Cur] [Avr] —ơ
‘DROWSINESS Ai s Jetson Clocks: tn 6117 3451 nVIBIA DROISTNESS AI INV Power[8]: HAXN
FF) “NVDEC: a Camera TensorRT SSD Demo for Jetson Nano eeotearpeeH x62, vad) - 8-95 6-136 8:1
[Camera TensorRT SSD Demo for Jetson Nano
NVIDIA Jetson Nano (Developer Kit Verston) - Jetpack 4.4.1 [LAT 32.4.4] l ] 1.5GHz cH, nacro avg weight
9.9479965595293772 0Hz bat /hone/3etson/opencvjnodutes/videoto/src/cap_gstreaner.cpp (933) tuse0, value= sport YAMNNNNNNNN !
YAMNNNNNNNN † [Sensor] — [Temp] -r [Pứwer/mM] - [cur] [Avr]
—— Camera TensorRT $8 Demo for Jetson Nano 2 :
Xerenomsaer l Jetson Clocks: taact Sebo Đệ
Hình 32 Hình anh thực thi chương trình trên kit NVIDIA Jetson Nano (tt)
Chương 5 KET LUẬN VA HƯỚNG PHÁT TRIEN
Về cơ bản, chương trình đã giúp nhận diện được trạng thái buồn ngủ của tài xế trên kit NVIDIA Jetson Nano với độ trễ tương đối thấp Phần chức năng nhận diện tiền buồn ngủ chưa tìm được bộ dữ liệu thích hợp để thực hiện kiểm thử nên chưa thé đánh giá chính xác được chức năng nhận diện tiền buồn ngủ của chương trình.
Ngoài ra, nhóm đã thực hiện tối ưu thành công tốc độ thực thi của chương trình trên kit NVIDIA Jetson Nano So với các chương trình nhận diện buồn ngủ trước đây khi chạy trên các thiết bị nhúng khác như board nhúng như Raspberry
Pi thường chỉ sử dụng phần cứng CPU đề thực hiện chương trình, FPS chỉ trong khoảng từ 8 đến 9 FPS, làm cho khả năng real-time còn hạn chế Với kit NVIDIA Jetson Nano, bang việc tích hop TensorRT vào một model Tensorflow dé tối ưu phần cứng cho chương trình, giúp chương trình có tốc độ xử lí nhanh hơn và giúp dễ hiện thực real-time cho chương trình hơn.
5.2 Hướng phát triển của chương trình
Hướng phát triển tiếp theo của chương trình là xây dựng một bộ dữ liệu dé tiến hành kiểm thử độ chính xác của chương trình dự đoán tiền buồn ngủ Bộ dữ liệu này tốt nhất là nên được thu thập từ chính các tài xế lái xe đường dài dé có thé mang lại độ chính xác tốt hơn, lưu ý nên chọn vị trí đặt camera sao cho phù hợp đê có thê quan sát rõ nét nhât khuôn mặt của tài xê.
Ngoài ra, việc cung cấp một số phương pháp kết hop dé giúp cho chương trình có thê phát hiện được hành vi buồn ngủ trong môi trường ánh sáng kém vào ban đêm cũng nhưng một số điều kiện ngoại cảnh khác ảnh hưởng xấu đến việc nhận diện khuôn mặt cũng như nhận diện các điểm trên khuôn mặt Việc này giúp cho khả năng dự đoán độ mở của mắt cũng chính xác hơn và giúp chương trình đưa ra nhận xét chính xác hơn.
[1] Adrian Rosebrock - “Eye blink detection with OpenCV, Python, and dlib”: https://www.pyimagesearch.com/2017/04/24/eye-blink-detection-opencv-python- dlib/ - ngay 24 thang 4 nam 2017
[2] Adrian Rosebrock - “Drowsiness detection with OpenCV”: https://www.pyimagesearch.com/2017/05/08/drowsiness-detection-opencv/ , ngay 8 thang 5 nam 2017
[3] Alexander Mordvintsev, Abid Rahman K, “Introduction to OpenCV-Python
Tutorials”, https://docs.opencv.org/master/d0/de3/tutorial_ py_intro.html
[4] Caio B Souto Maior, Marcio C Moura, Joao M M de Santana, Lucas M do
Nascimento, July B Macedo, July B Macedo, Enrique L Droguett, “Real-time
SVM Classification for Drowsiness Detection Using Eye Aspect Ratio”, Thang 9 nam 2018.
[5] National Sleep Foundation, “Detection and Prevention’, https://drowsydriving.org/about/detection-and-prevention/.
[6] Novie Theresia Br Pasaribu, Agus Prijono, Ratnadewi, Ratnadewi, Ratnadewi,
“Drowsiness Detection According to the Number of Blinking Eyes Specified From Eye Aspect Ratio Value Modification”, tai hội nghi International Conference on
Life, Innovation, Change, and Knowledge, Nam 2018
[7] Pooya Davoodi, Guangda Lai, Trevor Morris, Siddharth Sharma - “High performance inference with TensorRT Integration”: High performance inference with TensorRT Integration — The TensorFlow Blog, ngay 13 thang 6 nam 2019
[8] Tensorflow guide, “TensorFlow Hub Object Detection Colab”, https://www.tensorflow.org/hub/tutorials/tf2_object_detection?hl=en, ngay 09 thang