Xây dựng ứng dụng phát hiện lửa dựa trên mô hình học sâu trên thiết bị jetson nano Xây dựng ứng dụng phát hiện lửa dựa trên mô hình học sâu trên thiết bị jetson nano Xây dựng ứng dụng phát hiện lửa dựa trên mô hình học sâu trên thiết bị jetson nano Xây dựng ứng dụng phát hiện lửa dựa trên mô hình học sâu trên thiết bị jetson nano
CƠ SỞ LÝ THUYẾT
Các khái niệm về thị giác máy tính và máy học
2.1.1 Bài toán phát hiện vật thể (Object Detection)
2.1.1.1 Giới thiệu về thị giác máy tính
Một trong những lĩnh vực quan trọng của Trí tuệ nhân tạo là thị giác máy tính, bao gồm các phương pháp thu nhận, xử lý và phân tích hình ảnh kỹ thuật số Thị giác máy tính không chỉ giúp nhận dạng hình ảnh và phát hiện đối tượng, mà còn hỗ trợ tạo ảnh và siêu phân giải hình ảnh Trong đó, phát hiện đối tượng (Object Detection) được coi là khía cạnh sâu sắc nhất do tính hiệu quả và khả năng ứng dụng trong thực tế.
Object Detection là công nghệ cho phép hệ thống máy tính và phần mềm xác định vị trí và nhận diện các đối tượng trong hình ảnh Công nghệ này được áp dụng rộng rãi trong nhiều lĩnh vực như phát hiện khuôn mặt, nhận diện xe, đếm số người đi bộ, hệ thống bảo mật, xe không người lái, và các hệ thống cảnh báo sớm từ xa.
Bắt đầu áp dụng các phương pháp nhận diện đối tượng hiện đại trong ứng dụng và hệ thống, đồng thời phát triển các ứng dụng mới dựa trên những phương pháp này Việc triển khai nhận diện đối tượng sớm thường dựa vào các thuật toán cổ điển, như những thuật toán có sẵn trong OpenCV - thư viện Computer Vision phổ biến Tuy nhiên, các thuật toán cổ điển này không đủ hiệu suất để hoạt động hiệu quả trong nhiều điều kiện khác nhau.
Sự bùng nổ của deep learning vào năm 2012 đã dẫn đến sự phát triển của nhiều thuật toán phát hiện đối tượng hiện đại, bao gồm R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet, SSD và YOLO Những phương pháp này không chỉ nhanh chóng mà còn đạt độ chính xác cao, đồng thời yêu cầu người sử dụng phải có kiến thức vững về toán học và học sâu.
Nhận dạng đối tượng là thuật ngữ chỉ các nhiệm vụ trong thị giác máy tính, tập trung vào việc xác định và phân loại các đối tượng trong hình ảnh kỹ thuật số.
Phân loại hình ảnh liên quan đến việc dự đoán lớp của đối tượng trong hình ảnh, trong khi định vị vật thể xác định vị trí và vẽ bounding box xung quanh các đối tượng Phát hiện đối tượng kết hợp cả hai nhiệm vụ trên cho một hoặc nhiều đối tượng trong hình ảnh Ba nhiệm vụ thị giác máy tính cơ bản có thể được phân biệt thông qua đầu vào và đầu ra của chúng.
Phân loại hình ảnh là quá trình dự đoán nhãn cho một đối tượng trong bức ảnh Đầu vào là một hình ảnh chứa đối tượng, ví dụ như một bức ảnh, và đầu ra là nhãn hình ảnh tương ứng với đối tượng đó.
Định vị đối tượng (Object Localization) là quá trình xác định vị trí của các đối tượng trong hình ảnh và thể hiện chúng thông qua các bounding box Đầu vào của quá trình này là một hình ảnh có một hoặc nhiều đối tượng, ví dụ như một bức ảnh Kết quả đầu ra là một hoặc nhiều bounding box, được xác định bởi tọa độ tâm, chiều rộng và chiều cao của các đối tượng.
Phát hiện đối tượng (Object Detection) là quá trình xác định vị trí và nhận diện các đối tượng trong hình ảnh thông qua việc sử dụng bounding box và nhãn Đầu vào của quá trình này là một hình ảnh có thể chứa một hoặc nhiều đối tượng, trong khi đầu ra bao gồm một hoặc nhiều bounding box cùng với nhãn tương ứng cho từng đối tượng.
Hình 2.1 Sơ đồ tác vụ thị giác máy tính
2.1.2 Khái niệm về Deep Learning và Machine Learning
Machine Learning (Máy học) là một phương pháp trong trí tuệ nhân tạo (AI) cho phép hệ thống tự động tìm ra giải pháp cho các bài toán cụ thể sau khi đã được lập trình viên huấn luyện Phương pháp này được áp dụng để cải thiện hiệu suất trong nhiều công việc khác nhau.
Bài toán machine learning thường được chia làm hai loại là dự đoán (prediction) và phân loại (classification):
Dự đoán là quá trình giúp giải quyết các vấn đề liên quan đến sự biến động của một thông số cụ thể Chẳng hạn, từ tập dữ liệu về chỉ số chứng khoán qua các phiên giao dịch, máy tính có khả năng dự đoán giá trị cổ phiếu trong phiên giao dịch tiếp theo.
Phân loại (Classification): Các bài toán phân loại được áp dụng nhiều trong lĩnh vực thị giác máy tính, dùng để lọc các loại vật thể
Machine Learning hoạt động theo luồng như sau:
Hình 2.2 Luồng hoạt động của Machine Learning
1 Data collection – thu thập dữ liệu: máy tính chỉ có khả năng học tập khi được cung cấp đầy đủ các dữ liệu đầu vào ( dataset ), các dữ liệu đầu vào phải đảm bảo các yêu tố: chính xác và sát với nhu cầu giải quyết vấn đề của mô hình, không trộn lẫn với các dữ liệu sai, được gán nhãn một cách cẩn thận Mô hình có đủ thông minh hay không phụ thuộc vào độ tin cậy của dữ liệu đầu vào
2 Preprocessing – tiền xử lý: bước này dùng để chuẩn hóa dữ liệu, loại bỏ các thuộc tính không cần thiết, gán nhãn dữ liệu, mã hóa một số đặc trưng, trích xuất đặc trưng, rút gọn dữ liệu nhưng vẫn đảm bảo kết quả… Bước này tốn thời gian nhất tỉ lệ thuận với số lượng dữ liệu đưa vào Bước 1 và 2 thường chiếm hơn 70% tổng thời gian thực hiện
3 Training model – huấn luyện mô hình: triển khai huấn luyện mô hình dựa trên các dữ liệu đã thu thập
4 Evaluating model – đánh giá mô hình: sau khi đã huấn luyện mô hình xong, mô hình cần dùng các độ đo để đánh giá, tùy vào từng độ đo khác nhau mà mô hình cũng được đánh giá tốt hay không khác nhau Độ chính xác của mô hình đạt trên 80% được cho là kết quả tốt
5 Improve – cải thiện: sau khi đã đánh giá mô hình, các mô hình đạt độ chính xác không tốt thì cần được train lại, thường sẽ lặp lại từ bước 3, cho đến khi đạt độ chính xác như kỳ vọng Tổng thời gian của 3 bước cuối rơi vào khoảng 30% tổng thời gian thực hiện Tuy nhiên, nếu thực hiện quá nhiều lần mà vẫn không đạt được kết quả mong muốn, lỗi chắc chắn do dữ liệu đưa vào có trộn lẫn dữ liệu sai và cần thực hiện lại từ đầu
Machine Learning chia thành hai loại: “tự học có hướng dẫn” và “ tự học không có hướng dẫn”
Các thuật ngữ cơ bản trong đề tài
Anchor Box là yếu tố quan trọng trong việc xác định vị trí của vật thể, cho phép bounding box có khả năng dịch chuyển tâm, điều chỉnh kích thước và tạo ra khung hình bao quanh vật thể với độ chính xác cao nhất.
Bounding Box là khung hình bao quanh vật thể
Class: Mỗi vật thể cần phát hiện được gọi là một class.
Epoch được tính là khi chúng ta đưa tất cả dữ liệu vào mạng neural network 1 lần
Feature map là một khối output mà ta chia nó thành một mạng lưới với nhiều ô vuong và áp dụng tìm kiếm vật thể trên mỗi ô vuông
Iterations refer to the number of batches required to complete one epoch in a dataset For instance, if we have a dataset containing 20,000 samples and a batch size of 500, it would take 40 iterations to finish one epoch.
Non-max suppression là phương pháp hiệu quả giúp loại bỏ các Bounding Box chồng chéo, đồng thời quy tụ chúng về một Bounding Box duy nhất có xác suất cao nhất.
Offset là các tham số giúp xác định bounding box bao gồm tâm của bounding box (x,y) và chiều dài, chiều rộng (w,h)
Pipeline là một chuỗi các bước xử lý liên tiếp, nhận đầu vào từ dữ liệu như ảnh, âm thanh và các trường dữ liệu, sau đó trả ra kết quả dự báo ở đầu ra.
Region Proposal: Vùng đề xuất, là những vùng mà có khả năng chứa đối tượng hoặc hình ảnh ở bên trong nó
Testing Set là tập dữ liệu dùng để kiểm thử sau khi máy đã học xong
Sau khi huấn luyện, mô hình máy học cần được kiểm chứng hiệu quả thông qua việc đánh giá độ chính xác Để thực hiện điều này, người ta sử dụng tập Testing set, khác với Training set, tập này chỉ chứa các giá trị input mà không có giá trị output Máy tính sẽ tiếp nhận các giá trị input, xử lý chúng và đưa ra output tương ứng.
Tập huấn luyện (training set) là một bộ dữ liệu lớn được sử dụng trong quá trình huấn luyện máy học, giúp máy học và rút trích các đặc điểm quan trọng Tập huấn luyện bao gồm hai phần chính: đầu vào (input) và đầu ra (output) Đầu vào là những dữ liệu mà mô hình cần xử lý, ví dụ như hình ảnh trong bài toán nhận dạng hình ảnh Đầu ra là kết quả tương ứng với tập đầu vào; trong trường hợp huấn luyện mô hình phát hiện lửa, đầu ra sẽ là ngọn lửa.
Validation test tương tự như tập training set, bao gồm các cặp giá trị input và output Tuy nhiên, nó được sử dụng để kiểm tra độ chính xác của mô hình máy học trong quá trình huấn luyện Sự khác biệt giữa Validation test và Testing set là Validation set được sử dụng trong quá trình huấn luyện, trong khi Testing set được dùng để kiểm tra sau khi quá trình huấn luyện hoàn tất.
Mô hình tiền huấn luyện là một giải pháp hiệu quả, đã được phát triển từ một bộ dữ liệu lớn hoặc các phương pháp hiện đại, giúp giảm thiểu công sức cần thiết để huấn luyện từ đầu Sau đó, mô hình này có thể được tinh chỉnh thêm để phù hợp hơn với bộ dữ liệu thực tế.
Mô hình Yolo
2.3.1 Giới thiệu về mạng Yolo ( Yolo Network )
YOLO, viết tắt của "You Only Look Once", chứng minh hiệu quả vượt trội trong bài toán phát hiện vật thể Khác với phương pháp phân loại chỉ dự đoán nhãn của vật thể, YOLO giải quyết bài toán phát hiện vật thể (Object Detection) bằng cách xác định vị trí và nhận diện nhiều vật thể khác nhau trong cùng một khung hình Nhờ vào khả năng này, YOLO có thể phát hiện đồng thời nhiều vật thể với các nhãn khác nhau, mang lại hiệu quả cao trong các ứng dụng thực tiễn.
Yolo là một mô hình mạng CNN nổi bật trong việc phát hiện, nhận dạng và phân loại đối tượng, được biết đến với tốc độ nhanh chóng, mặc dù không phải là mô hình chính xác nhất Mô hình này kết hợp các lớp convolutional và full-connected, trong đó các lớp convolutional trích xuất đặc tính của ảnh, trong khi các lớp full-connected dự đoán xác suất và tọa độ của đối tượng Yolo sử dụng một mạng neural network duy nhất, được huấn luyện theo phương pháp end-to-end, nhận đầu vào là một bức ảnh và cung cấp các bounding box cùng nhãn lớp cho từng bounding box.
2.3.2 Lịch sử phát triển của Yolo
Phiên bản đầu tiên của Yolo, YOLOv1, được phát hành vào tháng 5 năm 2016 bởi tác giả Joseph Redmon trong bài báo "You only look once: Unified, Real-Time Object Detection" Sự ra mắt này đã đánh dấu một bước ngoặt quan trọng trong việc phát triển các giải pháp phát hiện vật thể trong thời gian thực Đến tháng 12 năm 2017, Joseph Redmon tiếp tục giới thiệu phiên bản nâng cấp mang tên Yolo9000.
Tháng 4 năm 2018, một phiên bản mới được phát triển với tên gọi YOLOv3, đây là mô hình được sử dụng nhiều nhất cho đến thời điểm hiện tại, được hỗ trợ trên các nền tảng khác nhau: Pytorch, Darknet, Keras, Tensorflow, SSD ,Tensorflow Lite, TensorRT, v.v Khác hẳn với hai phiên bản trước, ở phiên bản này, tốc độ huấn luyên mô hình được cải thiện đáng kể, dễ dàng cài đặt và cấu hình Đặc biệt với nên tảng Darknet, người dùng có thể dễ dàng tạo ra một model riêng cho bản thân sau vài tiếng đồng hồ
Vào đầu năm 2020, Alexey Bochkovskiy đã giới thiệu YOLOv4, một phiên bản cải tiến vượt trội so với YOLOv3 về độ chính xác, số khung hình trên giây, hiệu suất tiết kiệm tài nguyên thiết bị và thời gian đào tạo mô hình Chỉ sau chưa đầy một năm ra mắt, YOLOv4 đã trở thành một chủ đề nóng bỏng trong cộng đồng công nghệ thông tin.
Glenn Jocher đã phát hành YOLOv5, gây ra nhiều tranh cãi về tên gọi này, và cho đến nay vẫn chưa có tài liệu chính thức nào về vấn đề này Phiên bản YOLOv5 hiện chỉ hỗ trợ trên nền tảng Pytorch, nhưng nổi bật với thiết kế gọn nhẹ và hiệu năng vượt trội so với các phiên bản trước.
2.3.3 Các đánh giá về Yolo
Trong các thử nghiệm, YOLOv4 đã đạt giá trị AP 43,5% (65,7% AP50) trên tập dữ liệu COCO của Microsoft, đồng thời đạt tốc độ gần 65 FPS trên Tesla V100 Điều này cho thấy YOLOv4 vượt trội hơn các máy dò khác về cả tốc độ và độ chính xác.
YOLOv4 nhanh gấp đôi EfficientDet bên cạnh hiệu quả tương ứng, so với YOLOv3,
AP và FPS đã tăng lần lượt 10% và 12% Bài báo nhấn mạnh độ chính xác và tốc độ vượt trội của YOLOv4, đóng góp quan trọng cho lĩnh vực khoa học.
Hình 2.4 Biểu đồ đánh giá các mô hình phổ biến
(Nguồn : https://github.com/AlexeyAB/darknet )
YOLO là một mạng nơ-ron sâu kết hợp giữa các lớp tích chập (convolutional layers) và các lớp kết nối (connected layers) Hình ảnh đầu vào được điều chỉnh kích thước để phù hợp với các lớp tích chập Tại các lớp kết nối, một bản đồ đặc trưng (feature map) có kích thước 7 x 7 x 1024 được sử dụng làm đầu vào cho các lớp dự đoán nhãn và tọa độ Bounding Box của vật thể YOLO áp dụng hồi quy tuyến tính để dự đoán thông tin cho mỗi ô vuông, do đó không sử dụng hàm kích hoạt ở lớp cuối cùng Với kích thước ảnh đầu vào là 448x448, mô hình CNN có 6 tầng max pooling với kích thước 2x2 sẽ giảm kích thước ảnh xuống còn 7x7 ở đầu ra Thay vì sử dụng lớp kết nối đầy đủ ở các tầng cuối, chúng ta có thể thay thế bằng lớp tích chập 1x1 với 13 bản đồ đặc trưng, giúp đầu ra dễ dàng đạt được kích thước 7x7x13.
Hình 2.5 Kiến trúc mạng Yolo (Nguồn : https://github.com/AlexeyAB/darknet )
Các phiên bản Yolo có cấu trúc tương tự nhau nhưng khác nhau về số lượng và vị trí của các lớp mạng neural tính chập Kích thước đầu ra phụ thuộc vào kích thước ảnh đầu vào Để nâng cao độ chính xác trong việc nhận diện vật thể, thường thêm các lớp vào mạng Ngược lại, để tăng tốc độ khung hình và tiết kiệm tài nguyên máy tính, các phiên bản như Yolo Tiny thường được thiết kế với ít lớp hơn.
Tên lớp Filters Size Output
Bảng 2.1 Bảng phân lớp của kiến trúc Yolo
2.3.5 Nguyên lý hoạt động Yolo Đầu vào của mô hình là một ảnh hay một frame được trích xuất từ Video Ảnh đầu vào sau đó được chia thành mạng lưới có S x S ô (hay còn gọi là grid size) Thông thường grid size sẽ là 3 x 3, 7 x 7, 9 x 9, …
Hình 2.6 Biểu diễn mô hình hoạt dộng của Yolo
(Nguồn : https://github.com/AlexeyAB/darknet )
YOLO phân chia hình ảnh thành các ô vuông dạng lưới và xác định sự hiện diện của tâm vật thể trong từng ô Nếu có vật thể, mô hình sẽ sử dụng Anchor Box để khoanh vùng, và sau khi lọc kết quả chính xác, sẽ xuất ra Bounding Box Thuật toán dựa trên một mạng neural đơn, khai thác các feature map từ các lớp convolution để dự đoán bounding box và xác suất loại đối tượng Sau khi thực hiện, sẽ có nhiều bounding box với kích thước khác nhau Bằng cách áp dụng thuật toán Non-Maxima Suppression (NMS), ta loại bỏ các bounding box trùng lặp với tỉ lệ thấp và giữ lại các bounding box có tỉ lệ khớp cao Đầu ra của mô hình là ma trận 3 chiều kích thước S × S × (5× + ) với N và M lần N M tương ứng với số lượng Box và Class cần dự đoán trong mỗi ô.
Sau khi đoán mỗi bounding box, tham số trả về bao gồm 5 thành phần: (x, y, w, h, prediction) Trong đó, (x, y) là tọa độ tâm của bounding box, (w, h) lần lượt là chiều rộng và chiều cao của bounding box Giá trị prediction được định nghĩa là Pr(Object) nhân với IOU(pred, truth).
Khi huấn luyện YOLO để nhận dạng 20 đối tượng khác nhau, hình ảnh đầu vào sẽ được chuyển đổi thành một tensor có kích thước 7x7x30 sau khi qua các lớp Mỗi ô trong tensor này chứa 30 tham số, trong đó tham số đầu tiên là xác suất ô chứa một vật thể Các tham số tiếp theo lần lượt đại diện cho vị trí tâm vật thể (x_center, y_center), chiều rộng và chiều dài của vật thể Ngoài ra, các tham số từ 6 đến 10 tương ứng với thông tin của box thứ hai, và tham số thứ 11 cho biết xác suất ô chứa đối tượng thứ nhất.
20 objects cần nhận dạng) Tương tự tham số 12 là xác suất object trong ô là object thứ hai … cho đên tham số 30 là xác suất object trong ô là object thứ 20
Hình 2.7 Mô phỏng các tham số của đầu ra và đầu vào
(Nguồn : https://aicurious.io/posts/tim-hieu-yolo-cho-phat-hien-vat- -v1-den-v5tu )
2.3.5.1 Các công thức tính toán trong Yolo
In the context of object detection, prediction is defined as Pr(Object) multiplied by IOU(pred, truth) The Intersection Over Union (IOU) is a metric used to evaluate the accuracy of an object detection model based on a specific dataset IOU is calculated by comparing the overlap between the predicted bounding box and the ground truth bounding box.
Hình 2.8 Công thức tính IoU (Nguồn : https://aicurious.io/posts/tim-hieu-yolo-cho-phat-hien-vat- -v1-den-v5tu )
Tensorflow TensorRT
TensorFlow là thư viện mã nguồn mở mạnh mẽ cho machine learning và deep learning, hỗ trợ các phép toán học phức tạp Nó cho phép xử lý tính toán số học thông qua biểu đồ, trong đó các nút đại diện cho các phép toán và các cạnh biểu thị luồng dữ liệu.
Kiến trúc của Tensorflow được chia thành ba phần:
1 Tiền xử lý dữ liệu
3 Đào tạo và ước tính mô hình
Một số khái niệm trong Tensorflow:
Tensor: tất cả các kiểu dữ liệu khi đưa vào trong tensorflow thì đều được gọi là Tensor có 3 thuộc tính cơ bản là rank, shape và type
In the realm of tensors, the rank indicates the dimensionality of the tensor: a scalar has a rank of 0, while a vector is classified as a rank 1 tensor A matrix, on the other hand, is recognized as a rank 2 tensor or a two-dimensional array in Python When the rank exceeds 2, the tensor is referred to as an N-tensor Additionally, the shape of a tensor defines its dimensions, and the type refers to the data type of its elements.
Cách sử dụng Tensorflow: Vì không phải là thư viện có sẵn trong python nên cần phải import tensorflow as tf
Tạo CT Tensorflow chia thành 2 phần: oConstruction phase: Xây dựng mô hình tính toán oExecute phase: Chạy mô hình tính toán
Epoch và Loss trong Tensor:
+ Epoch: Một vòng lặp qua tập dữ liệu training.
Loss là một giá trị vô hướng cần giảm dần trong quá trình huấn luyện mô hình Giá trị Loss càng thấp, mô hình càng chính xác và gần gũi với giá trị thực tế.
TensorRT là bộ công cụ phát triển phần mềm (SDK) của NVDIA, giúp tối ưu hóa các mô hình học sâu đã được đào tạo trước đó, hỗ trợ nhiều loại mô hình như TensorFlow, TFLite, YOLO, SSD, và MobileNet Công cụ này cho phép người dùng chuyển đổi các mô hình sang định dạng trt, tối ưu hóa các thông số như FPS, bộ nhớ RAM, GPU và CPU, từ đó nâng cao hiệu suất khi chạy trên các thiết bị nhúng của NVDIA Hiện tại, TensorRT đã được tích hợp sẵn trong hệ điều hành Jetpack 4.5 của Jetson Nano, giúp người dùng không cần cài đặt như các phiên bản trước.
2.4.2.2 Chu trình chuyển đổi sang TensorRT
1 Sử dụng một Framework bất kỳ để đào tạo mô hình nhận diện lửa
2 Chuyển đổi về một mạng neural trung gian Để chuyển đổi về định dạng TensorRT, mô hình phải có bước chuyển đổi trung gian về định dạng uff (thích hợp với các mô hình Tensorflow) hoặc onnx (thích hợp với nhiều loại mô hình khách nhau) Ngoài hai định dạng này ra, hiện nay TensorRT chưa hỗ trợ định dạng nào khác o Onnx (Open Neural Network Exchange): là một hệ sinh thái trí tuệ nhân tạo mã nguồn mở của các công ty công nghệ và tổ chức nghiên cứu nhằm thiết lập các tiêu chuẩn mở để đại diện cho các thuật toán học máy và công cụ phần mềm nhằm thúc đẩy đổi mới và hợp tác trong lĩnh vực AI Trên Github có rất nhiều tài liệu hướng dẫn sử dụng Onnx
3 Sử dụng hàm chuyển đổi của TensorRT SDK để chuyển đổi từ onnx hoặc uff sang định dạng TensorRT
4 Thu được mô hình TensorRT, có định dạng trt
5 Sử dụng hàm load_model (của thư viện TensorRT) để khởi động mô hình
Hình 2.10 Quá trình hình thành sản phẩm dựa trên TensorRT
( Nguồn : https://developer.nvidia.com/tensorrt )
Thiết bị Jetson Nano
NVIDIA Jetson Nano Developer Kit là một máy tính nhỏ gọn nhưng mạnh mẽ, cho phép người dùng chạy nhiều mạng neural song song, phục vụ cho các ứng dụng xử lý hình ảnh hiệu quả.
Jetson Nano là một máy tính AI tích hợp nhỏ gọn, có kích thước tương đương với một bảng mạch và sử dụng chuẩn kết nối SO-DIMM Chuẩn kích thước này cũng được NVIDIA áp dụng cho các sản phẩm khác nhằm tối ưu hóa tính năng nhỏ gọn NVIDIA khẳng định rằng Jetson Nano giúp tăng tốc quá trình ứng dụng thuật toán AI vào thực tế, được thiết kế đặc biệt cho các nhà phát triển, sản xuất và nghiên cứu trong lĩnh vực trí tuệ nhân tạo.
Hình 2.11 Thiết bị Jetson Nano( Nguồn : https://developer.nvidia.com/ )
Model: Jetson Nano Developer Kit Carrier Board A02 (1 camera port)
CPU: Quad-core ARM A57 @ 1.43 GHz
Memory: 2 GB 64-bit LPDDR4 25.6 GB/s
Giao thức MQTT ( Message Queuing Telnhómetry)
MQTT (Message Queuing Telemetry Transport) là một giao thức truyền thông điệp theo mô hình publish/subscribe, lý tưởng cho các thiết bị IoT với băng thông thấp và độ tin cậy cao Giao thức này hoạt động hiệu quả trong các mạng lưới không ổn định và dựa trên một Broker, giúp đơn giản hóa việc cài đặt MQTT được thiết kế mở, không bị ràng buộc bởi ứng dụng cụ thể nào, mang lại tính linh hoạt cho người dùng.
MQTT là lựa chọn lý tưởng trong các môi trường như:
Những nơi mà giá mạng viễn thông đắt đỏ, băng thông thấp hay thiếu tin cậy
Khi chạy trên thiết bị nhúng bị giới hạn về tài nguyên tốc độ và bộ nhớ
Giao thức này là lựa chọn lý tưởng cho các ứng dụng M2M (Machine to Machine) nhờ vào việc sử dụng băng thông thấp trong môi trường có độ trễ cao.
MQTT là một giao thức lý tưởng cho các ứng dụng IoT nhờ vào những ưu điểm nổi bật như băng thông thấp và độ tin cậy cao Giao thức này hoạt động hiệu quả ngay cả trong hệ thống mạng không ổn định, tiêu tốn rất ít byte cho việc kết nối với server Ngoài ra, kết nối có thể duy trì trạng thái open liên tục và cho phép nhiều thiết bị (MQTT client) kết nối thông qua một MQTT server (broker) Với khả năng sử dụng băng thông thấp trong môi trường có độ trễ cao, MQTT trở thành lựa chọn hoàn hảo cho các ứng dụng yêu cầu tính ổn định và hiệu suất cao.
2.6.2 Tính năng và đặc điểm nổi bật
Dạng truyền thông điệp theo mô hình Pub/Sub cung cấp việc truyền tin phân tán một chiều, tách biệt với phần ứng dụng
Việc truyền thông điệp là ngay lập tức, không quan tâm đến nội dung được truyền
Sử dụng TCP/IP là giao thức nền
Có ba mức độ tin cậy trong việc truyền dữ liệu (QoS: Quality of Service) QoS 0 cho phép broker/client gửi dữ liệu một lần duy nhất, với việc xác nhận thông qua giao thức TCP/IP QoS 1 yêu cầu broker/client gửi dữ liệu ít nhất một lần và nhận được xác nhận từ phía bên kia, có thể dẫn đến nhiều lần xác nhận Cuối cùng, QoS 2 đảm bảo rằng dữ liệu chỉ được nhận một lần duy nhất, thông qua quy trình bắt tay gồm bốn bước.
Phần bao bọc dữ liệu truyền nhỏ và được giảm đến mức tối thiểu để giảm tải cho đường truyền
2.6.3 Mô hình hoạt động của MQTT
2.6.3.1 Thành phần và cơ chế hoạt động
Client: o Publisher - Nơi gửi thông điệp o Subscriber - Nơi nhận thông điệp
Broker - Máy chủ môi giới
Broker là bộ xử lý trung tâm, đóng vai trò là cầu nối giữa Publisher và Subscriber Nhiệm vụ chính của Broker là nhận thông điệp từ Publisher, xếp vào hàng đợi và chuyển đến địa điểm cụ thể Ngoài ra, Broker còn có thể thực hiện các chức năng phụ như bảo mật thông điệp, lưu trữ thông điệp và ghi lại nhật ký.
Client được phân thành hai nhóm chính: Publisher và Subscriber Publisher có nhiệm vụ phát hành các thông điệp lên một hoặc nhiều chủ đề cụ thể, trong khi Subscriber đăng ký theo dõi một hoặc nhiều chủ đề để nhận thông điệp từ các chủ đề đó.
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC OS, Windows, Linux, Android, iOS,
Hình 2.12 Ví dụ về luồng hoạt động của MQTT(Nguồn https://viblo.asia/p/mqtt- -gi-vai-tro-la cua-mqtt-trong-iot-V3m5WL3bKO7 )
Hình 2.13 Kiến Trúc MQTT (Nguồn https://viblo.asia/p/mqtt- -gi-vai-tro-la cua-mqtt-trong-iot-V3m5WL3bKO7 )
Thành phần chính của MQTT là Client (Publisher/Subscriber), Server (Broker), Sessions (tạm dịch là Phiên làm việc), Subscriptions và Topics
MQTT Client (Publisher/Subscriber): Clients sẽ subscribe một hoặc nhiều topics để gửi và nhận thông điệp từ những topic tương ứng
MQTT Server (Broker): Broker nhận những thông tin subscribe (Subscriptions) từ client, nhận thông điệp, chuyển những thông điệp đến các Subscriber tương ứng dựa trên Subscriptions từ client
Topic có thể được xem như một hàng đợi chứa các thông điệp, với các khuôn mẫu dành riêng cho Subscriber và Publisher Theo cách logic, các topic cho phép Client trao đổi thông tin dựa trên những ngữ nghĩa đã được định nghĩa trước Ví dụ điển hình là dữ liệu cảm biến nhiệt độ của một tòa nhà, giúp tối ưu hóa quy trình quản lý và kiểm soát môi trường.
Session: Một session được định nghĩa là kết nối từ client đến server Tất cả các giao tiếp giữa client và server đều là 1 phần của session
Subscription là một kết nối từ client đến topic, khác với session Khi client đã đăng ký một topic, họ có khả năng nhận và gửi thông điệp với topic đó.
Điện toán biên (Edge Computing)
2.7.1 Giới thiệu về Edge Computing
Điện toán biên (Edge Computing) là một mạng lưới các trung tâm xử lý và lưu trữ dữ liệu cục bộ, tối ưu hóa quá trình truyền dẫn trước khi gửi dữ liệu tới trung tâm dữ liệu hoặc đám mây Công nghệ này giúp giảm thiểu tình trạng gián đoạn và trì hoãn trong việc gửi và nhận dữ liệu, với khả năng xử lý thông tin ngay tại các biên của hệ thống mạng.
Edge Computing cho phép các thiết bị, từ máy tính xách tay đến cảm biến trong thiết bị IoT, xử lý dữ liệu ngay tại chỗ thay vì gửi toàn bộ lên đám mây Việc lưu trữ cục bộ này không chỉ tăng tốc độ thu thập dữ liệu mà còn cho phép chia sẻ lượng lớn thông tin khi kết hợp với các thiết bị IoT có kết nối.
Với sự phát triển của Điện toán biên, dung lượng lưu trữ được nâng cao, tính linh hoạt được cải thiện, và chi phí được giảm thiểu Quan trọng hơn, Điện toán biên giúp mở rộng mạng tới các khu vực xa trung tâm dữ liệu mà vẫn đảm bảo tốc độ và độ tin cậy của mạng.
Điện toán biên (Edge Computing) là một mô hình điện toán phân tán, giúp đưa việc xử lý và lưu trữ dữ liệu đến gần hơn với vị trí cần thiết, từ đó nâng cao tốc độ và tiết kiệm băng thông Trong kiến trúc phân lớp, điện toán biên nằm ở lớp giữa, gần với các thiết bị IoT.
Lớp trên cùng là các trung tâm dữ liệu đám mây (Cloud Data Center) để xử lý, phân tích các tác vụ phức tạp như Big Data, Machine Learning
Lớp điện toán biên (Edge Computing) nằm gần các thiết bị IoT, giúp kết nối và xử lý dữ liệu cục bộ từ hàng tỷ thiết bị này Thuật ngữ "Điện toán biên" mô tả các trung tâm tính toán nằm giữa đám mây và thiết bị, tạo ra một môi trường tối ưu cho việc xử lý dữ liệu gần nguồn gốc.
Lớp cuối cùng là các thiết bị IoT: các cảm biến (Sensor); các thiết bị đo đạc; điều khiển (Controller)
Khi áp dụng Edge Computing, các lập trình viên không cần phải gửi dữ liệu từ cảm biến IoT đến bất kỳ đâu Thiết bị hoặc nút mạng gần nhất, như bộ định tuyến, sẽ đảm nhiệm việc xử lý dữ liệu và có khả năng phản hồi kịp thời khi cần thiết.
Thingsboard
ThingsBoard là nền tảng IoT mã nguồn mở, giúp phát triển, quản lý và mở rộng các dự án IoT một cách nhanh chóng Người dùng có thể thu thập, xử lý, hiển thị trực quan và quản lý thiết bị dễ dàng với ThingsBoard.
Thingsboard hỗ trợ kết nối thiết bị qua các giao thức IoT tiêu chuẩn công nghiệp như MQTT, CoAP và HTTP, phù hợp cho cả triển khai trên đám mây lẫn tại chỗ.
ThingsBoard là nền tảng mạnh mẽ cho phép người dùng thiết lập các Bảng điều khiển IoT đa dạng, giúp hiển thị dữ liệu và điều khiển thiết bị từ xa theo thời gian thực Bên cạnh đó, ThingsBoard hỗ trợ việc tạo ra các chuỗi quy tắc phức tạp nhằm xử lý dữ liệu từ thiết bị, phù hợp với nhiều ứng dụng cụ thể.
Hình 2.15 Kiến trúc Thingsboard ( Nguồn: https://thingsboard.io/ )
Thingsboard thu thập dữ liệu từ các thiết bị cảm biến IoT thông qua hai phương pháp chính để gửi thông tin.
1 Sử dụng các thiết bị có khả năng phát sóng truyền thông như Bluetooth, ZiGbee, Lora để gửi tín hiệu về một Gateway ( ví dụ như Raspberry Pi ) Sau khi Gateway nhận được thông tin được gửi về, Gateway sẽ xử lý và hiển thị lên bảng điều khiển của Thingsboard
2 Sử dụng các giao thức truyền thông tin IoT như MQTT/HTTP/COAP Thiết bị được khởi tạo trên Thingsboard sẽ cung cấp cho lập trình viên một mã token, tại phần mã nguồn lập trình, ta chỉ cần cài thêm các thư viện hỗ trợ các giao thức đó và sau đó sẽ có các hàm hỗ trợ gửi thông tin lên Thingsboard Các tính năng của Thingsboard:
Quản lý các thiết bị từ xa
Hiển thị trực quan dữ liệu trên bảng điều khiển
Sử dụng các chuỗi quy tắc để tạo nên ứng dụng trực quan
MÔ HÌNH ỨNG DỤNG
Mô tả mô hình
Hình trên biểu diễn mô hình triển khai ứng dụng phát hiện lửa chạy trên biết bị nhúng Jetson Nano Mô hình ứng dụng gồm các thành phần sau:
1 Mô hình học sâu đã được huấn luyện ban đầu: Đây là cơ sở cho việc phát triển ứng dụng Chỉ khi mô hình gốc đạt được kết quả tốt, việc tối ưu mô hình, cho đến việc chạy trên thiết bị mới hoạt động hiệu quả
2 Định dạng TensorRT: Định dạng trt giúp mô hình hoạt động tốt nhất trên thiết bị Jetson Nano Với sự hỗ trợ của công ty Nvdia, từ phần cứng cho đến hệ điều hành Jetpack đều tương thích với các mô hình được tối ưu về TensorRT
3 Dashboard: Bảng điều khiển nằm trong Thingsboard được host trên một máy Laptop trong cùng mạng LAN
4 Hệ thống cảnh báo: Hệ thống cảnh báo sẽ dựa trên các tham số được gửi về từ Camera, khi phát hiện khả năng xảy ra hỏa hoạn trên 75%, một Email cảnh báo sẽ được gửi về địa chỉ Email đã cài đặt sẵn
5 Streaming Server: Truyền trực tiếp hình ảnh từ Camera lên Web Server, sử dụng thư viện Flask của Python để hỗ trợ
3.1.2 Nguyên lý hoạt động Ứng dụng phát hiện lửa được chạy trên thiết bị Jetson Nano sẽ có một Camera kết nối với thiết bị qua cổng USB Ứng dụng sẽ được chạy với luồng hoạt động như sau như sau:
1 Khởi động ứng dụng phát hiện lửa và hệ thống Streaming Server Trong quá trình chạy, ứng dụng sẽ ghi đè lên nhau từng khung hình lên một file được đặt tên là “detect.jpeg” File này sẽ được Streaming Server đưa lên Web Server theo từng lần được ghi đè Streaming Server chiếu trực tiếp hình ảnh được ghi lại từ Camera trong thời gian thực
2 Hệ thống phát hiện lửa dựa vào mô hình học sâu đã được đào tạo từ trước Sẽ thực hiện phân tích các hình ảnh từ Camera a Về phần phát hiện lửa trên khung hình: Tại các vị trí mô hình đã phát hiện ra lửa, thư viện OpenCV sẽ định vị và vẽ bounding box bao quanh vị trí đó b Về phần tham số: Khi phát hiện ra lửa, các tham số được trả về một mảng numpy n chiều ( với n là số ngọn lửa trong khung hình vừa phát hiện ra) Các tham số này bao gồm tỉ lệ vật thể đó có phải là ngọn lửa hay không
3 Giao thức MQTT được sử dụng để gửi các tham số trên về bảng điều khiển Đồng thời sẽ có một hàm phân tích: nếu như các vật thể trong khung hình có tỉ lệ là ngọn lửa trên 75%, một email sẽ được gửi về admin
4 Giao thức được sử dụng để gửi email cảnh báo là SMTP, với server SMTP của google (Gmail)
Các tính năng và ưu điểm của hệ thống:
1 Khả năng phát hiện lửa nhanh (trong thời gian thực) với độ chính xác cao
2 Mô hình nhỏ gọn, thích hợp chạy trên các thiết bị nhúng
3 Hệ thống Streaming chạy ổn định, không xuất hiện độ trễ
4 Tốc độ gửi cảnh báo nhanh (lập tức gửi cảnh báo sau khi tỉ lệ hỏa hoạn đạt 75%)
5 Khi không có kết nối Internet, vẫn có khả năng chạy trên Local, hiển thị và phân tích bình thường.
6 Tiêu thụ năng lượng thấp, thiết bị Jetson Nano chỉ cần cấp nguồn 5V và 2A là có thể hoạt động bình thường
3.1.3 Lý do thực hiện ứng dụng trên thiết bị nhúng
Nhóm đã cân nhắc giữa việc xây dựng ứng dụng bằng phương pháp Edge Computing thay vì Cloud, với những lý do sau:
Edge tối ưu hóa hệ thống truyền dẫn, ngăn chặn tình trạng gián đoạn và giảm thiểu độ trễ trong quá trình gửi và nhận dữ liệu Tất cả các tính toán được thực hiện ngay tại các biên của hệ thống mạng.
Mô hình Streaming Realtime, cho phép phát hình ảnh trong thời gian thực ở khoảng cách xa, thường gặp khó khăn với việc xử lý từ Cloud Điều này dẫn đến độ trễ cao và tiêu tốn lưu lượng truyền Stream, ảnh hưởng trực tiếp đến FPS.
Edge Computing giảm thiểu sự phụ thuộc vào mạng Internet, cho phép thiết bị xử lý dữ liệu ngay tại chỗ và chỉ phản hồi khi các điều kiện cần thiết được đáp ứng Trong trường hợp không có kết nối Internet, người dùng có thể tận dụng localhost, máy ảo hoặc mạng ảo để thử nghiệm trước khi triển khai ứng dụng.
Các phiên bản miễn phí của Cloud hạn chế số lượng tác vụ, trong khi chi phí cho các bản trả phí lại khá cao Do đó, việc phát triển trên thiết bị nhúng trở thành lựa chọn hợp lý cho nhóm, phù hợp với hoàn cảnh và điều kiện hiện tại.
Cài đặt các thư viện và môi trường cần thiết
3.2.1 Cài đặt các thư viện tiên quyết
Cài đặt bộ công cụ tải về và cài đặt các thư viện trên python (pip): sudo apt install python3-pip
Ghi tất cả các thư viện cần thiết vào một file requirement-gpu.txt Tên thư viện Phiên bản Công dụng
Tensorflow 2.3.0 Xây dựng mô hình học sâu
Opencv 4.1.1.26 Thư viện hỗ trợ thị giác máy tính
Lxml Mới nhất Xử lý các file xml tqdm Mới nhất Thư viện xây dựng các icon thanh tiến trình
Absl-py Mới nhất Xử lý các hàm Flags
Matplotlib Mới nhất Vẽ đồ thị
Easydict Mới nhất Thư viện hỗ trợ đệ quy trong python
Pillow Mới nhất Xử lý các định dạng hình ảnh
Numpy 1.15.1 Xử lý toán tử, mảng, chuỗi số
Onnx 1.4.1 Hỗ trợ quá trình chuyển đổi mô hình trung gian trước khi sang TensorRT
Pycuda 2017.1.1 Thư viện sử dụng để chạy
CUDA sử dụng ngôn ngữ lập trình python
Flask Mới nhất Thiết lập Streaming Server
Bảng 3.1 Danh sách thư viện cần cài đặt
Sử dụng lệnh pip3 install - requirements-gpu.txt r để cài đặt tất cả các thư viện trong file requirement-gpu.txt
Darknet là nền tảng lý tưởng cho việc huấn luyện các mô hình phát hiện vật thể, đặc biệt hoạt động tốt trên hệ điều hành Linux nhờ vào khả năng cài đặt và cấu hình dễ dàng, cùng với tài liệu hướng dẫn đầy đủ Tuy nhiên, để đào tạo mô hình hiệu quả, Darknet yêu cầu máy tính có cấu hình cao và thời gian chạy lâu Do đó, Google Colab trở thành dịch vụ máy ảo trực tuyến phù hợp để đáp ứng nhu cầu này.
Tải bộ công cụ tại : https://github.com/AlexeyAB/darknet
Sau khi tải về, chỉnh sửa file Makefile để phù hợp với thiết bị cài đặt: Nội dung Makefile như sau:
Hình 3.2: Nội dung của file Makefile và ý nghĩa các dòng lệnh cài đặt
Sử dụng lệnh make trên Terminal để Debug chương trình.
Chuẩn bị và gán nhãn dữ liệu đầu vào
Quy trình chuẩn bị dữ liệu là bước đầu tiên và quan trọng nhất trong việc xây dựng ứng dụng phát hiện lửa Dữ liệu đầu vào cần phải đáp ứng các điều kiện nhất định để đảm bảo hiệu quả của quá trình huấn luyện.
Hình ảnh phải khái quát, rõ ràng, tránh những hình ảnh bị vật thể khác che chắn
Có đầy đủ các góc cạnh của vật thể cần phát hiện Đầy đủ kích thước từ lớn đến nhỏ của vật thể
Bắt buộc phải gán nhãn và vẽ bounding box, để mô hình huấn luyện có thể xác định vật thể cần tìm
Mô hình tối ưu trong quá trình huấn luyện nên tuân thủ tỷ lệ phân chia hình ảnh là 70% cho Tập huấn luyện, 20% cho Tập xác thực và 10% cho Tập kiểm tra Tuy nhiên, mô hình vẫn hoạt động hiệu quả ngay cả khi không có Tập kiểm tra.
Trong nghiên cứu này, mô hình huấn luyện đã sử dụng 1.346 hình ảnh để tiến hành quá trình đào tạo Dữ liệu được thu thập từ các nguồn uy tín, và một phần được nhóm nghiên cứu tự gán nhãn và chuẩn bị.
Hình 3.3: Dữ liệu huấn luyện đầu vào
Mô hình chỉ hiểu thông tin khi hình ảnh được gán nhãn, với nhãn cung cấp thứ tự lớp, tọa độ tâm vật thể, chiều cao và chiều dài Các mô hình phát hiện vật thể hiện nay thường sử dụng định dạng tệp gán nhãn là xml hoặc txt Cụ thể, mô hình YOLOv4 sử dụng định dạng txt để huấn luyện, trong khi phần mềm LabelIMG hỗ trợ gán nhãn các vật thể trên từng khung hình.
Hình 3.4 Phần mềm gán nhãn hình ảnh
Cấu hình và huấn luyện mô hình
3.4.1 Nguyên lý hoạt động của quá trình huấn luyện mô hình
Mạng Neural sẽ tính toán từng ảnh để tối ưu hàm mất mát, giúp tìm ra bộ trọng số tốt nhất cho việc biểu diễn dữ liệu và nhận dạng các ảnh mới Sau khi huấn luyện xong, các file lưu trữ kết quả sẽ có định dạng như weights (darknet), pt (pytorch), tflite (Tensorflow Lite), pb (Tensorflow), và h5 (Keras).
Trong quá trình nhận diện lửa trong khung hình, mô hình sử dụng các thông số đã được huấn luyện trước đó Mô hình này sẽ so sánh các thông số đó với kết quả thu được từ khung hình, từ đó hiển thị xác suất liệu có phải là lửa hay không.
3.4.2 Cấu hình mô hình huấn luyện
Mô hình được huấn luyện từ dữ liệu đã thu thập, sử dụng nhiều tài nguyên máy tính Để tối ưu hóa hiệu quả và chất lượng, việc huấn luyện có thể thực hiện trên Google Colab.
Để bắt đầu, tải mô hình huấn luyện, hay còn gọi là "Pretrain Model" Chúng ta sẽ sử dụng model YOLOv4-tiny.conv29, một phiên bản cải tiến của YOLOv4-tiny, phù hợp cho các thiết bị nhúng nhờ vào kích thước gọn nhẹ.
!wget https://github.com/AlexeyAB/darknet/releases/download/darknet_y olo_v4_pre/YOLOv4-tiny.conv.29
Bước 2: Phân chia dữ liệu hình ảnh theo tỉ lệ 70% cho Tập Huấn Luyện, 20% cho Tập Xác Thực, trong khi Tập Kiểm Tra 10% sẽ được sử dụng riêng sau khi huấn luyện thành công Để tiết kiệm thời gian, nên lập trình một file Python để phân chia hình ảnh ngẫu nhiên Sau khi hoàn thành, các file hình ảnh sẽ có đường dẫn cụ thể.
Hình 3.5 Liên kết đường dẫn các hình ảnh dữ liệu đầu vào
Bước 3: Thiết lập hai files yolo.data và yolo.names trong cùng thư mục đó Với:
File yolo.names thiết lập tên đối tượng (class) cần phát hiện
File yolo.data lưu trữ đường dẫn đến các thư mục của dữ liệu train, valid, đường dẫn lưu trữ file weights
Bước 4: Thiết lập các tham số ở file cfg Đây là file cấu hình của phiên bản YOLOv4-tiny.Conv.29 Nội dung của file cấu hình:
Hình 3.6 Nội dung file cấu hình mô hình huấn luyện
Số thứ tự Tên tham số Diễn giải
1 Batch Số lượng ảnh lấy ra trong mỗi vòng huấn luyện
2 Subdivision Ước số của Batch Số lần lấy ảnh của mỗi vòng sẽ bằng Batch / Subdivision
3 Width Kích thước chiều ngang của ảnh huấn luyện
4 Height Kích thước chiều dọc của ảnh huấn luyện
5 Channels Số kênh đầu vào của mạng huấn luyện
6 Momentum Giá trị ảnh hưởng đến tốc độ huấn luyện
7 Decay Thông số giảm kích thước hệ thống theo tỉ lệ nhằm tránh quá tải
8 Angle Các thông số nhằm tăng lượng Dataset bằng cách xoay hình ảnh input thành nhiều góc khác nhau
9 Saturation Các thông số nhằm tăng lượng Dataset bằng cách điều chỉnh độ bão hòa của màu sắc hình ảnh input
10 Exposure Các thông số nhằm tăng lượng Dataset bằng cách điều chỉnh độ sáng của hình ảnh input
11 Hue Các thông số nhằm tăng lượng Dataset bằng cách điều chỉnh màu sắc chính của hình ảnh input
12 Learning Rate Tốc độ học của máy Chỉ số càng thấp thì mô hình chạy càng chính xác nhưng sẽ huấn luyện lâu và ngược lại
Trong quá trình huấn luyện, nếu số vòng huấn luyện ít hơn số lượng burn in, chỉ số Learning Rate sẽ được điều chỉnh để đảm bảo độ chính xác Ngược lại, nếu số vòng huấn luyện lớn hơn số lượng burn in, các cập nhật sẽ được thực hiện khác.
14 Max Batches Số vòng huấn luyện tối đa
16 Steps Steps và Scales được đặt để thay đổi tốc
Learning Rate, chẳng hạn như khi số lần lặp đạt 8000 hoặc 9000 vòng, tốc độ học sẽ giảm đi 0.1 lần (10%)
Bảng 3.2 Diễn giải các tham số trong file cấu hình
Bước 5: Chạy lệnh huấn luyện
!./darknet detector train yolo.data data/tiny.cfg YOLOv4-tiny.weights
Sau khi huấn luyện, ta đạt được một file có định dạng weights nằm trong thư mục backup:
Hình 3.7 Kết quả thu được sau khi huấn luyện mô hình
File YOLOv4-tiny_best.weights lưu trữ kết quả tại vòng lặp có độ chính xác cao nhất, trong khi file YOLOv4-tiny_final.weights ghi lại kết quả huấn luyện ở vòng lặp cuối cùng.
Sau khi hoàn tất huấn luyện mô hình, bước tiếp theo là kiểm thử khả năng nhận diện lửa của mô hình Việc kiểm thử này được thực hiện qua hai phương pháp: kiểm thử trong thời gian thực sử dụng Camera và kiểm thử trên tập Test Set.
Hình 3.8 Kết quả kiểm thử mô hình bằng Camera
Hình 3.9 Kết quả kiểm thử mô hình trên tập Test Set
Từ kết quả kiểm thử, có thể nhận định rằng quy trình huấn luyện mô hình đã diễn ra đúng và thuận lợi như mong muốn.
Thiết lập cho Jetson Nano
3.5.1 Cài đặt hệ điều hành
Các bộ cài đặt cần chuẩn bị: hệ điều hành Jetpack 4.4.1, phần mềm boot ổ đĩa vào thẻ nhớ BalenaEtcher:
Bước 1: Chọn Flash from File để xác vị trí đĩa cài đặt hệ điều hành Lưu ý: đĩa cài đặt hệ điều hành có định dạng iso
Bước 2: Chọn thiết bị để boot ổ đĩa là thẻ nhớ (SD Card)
Bước 3: Sau khi chọn thiết bị xong, ổ đĩa sẽ tự động được boot vào thẻ nhớ Ta chỉ cần cắm thể nhớ vào thiết bị và sử dụng
Hình 3.10 Hệ điều hành Jetpack
Tối ưu hóa mô hình
3.6.1 Các bước thực hiện tối ưu hóa mô hình
Mô hình TensorRT hiện đang là lựa chọn tối ưu nhất cho việc chạy trên thiết bị Jetson Nano, nhờ vào sự hỗ trợ từ NVIDIA Mô hình này không chỉ hoạt động hiệu quả và ổn định mà còn tiêu thụ ít tài nguyên máy tính.
Mô hình YOLOv4-tiny được chọn là mô hình hiệu quả nhất trong các thử nghiệm, và nhóm quyết định tối ưu hóa nó trên nền tảng TensorRT Để chuyển đổi định dạng weights của YOLOv4-tiny sang định dạng TensorRT, cần thực hiện một bước trung gian là chuyển đổi sang định dạng onnx.
Bước 1: Tải bộ chuyển đổi tại https://github.com/jkjung- avt/tensorrt_demo#YOLOv3
Bước 2: Tải các thư viện cần thiết
Thư viện pycuda ( CUDA của nvdia dành cho python ):
$ cd ${HOME}/project/tensorrt_demo/ssd
Thư viện onnx phiên bản 1.4.1 của python Lưu ý: các phiên bản khác không tương thích với hệ điều hành Jetpack 4.4
Cài tiếp tục các plugins hỗ trợ cho Yolo Layer chuyển đổi sang
$ cd ${HOME}/project/tensorrt_demo/plugins
Bước 3: Để mô hình YOLOv4-tiny đã được huấn luyện vào thư mục
Rename the file to YOLOv4-tiny-416.weights, as this project utilizes an image size of 416 pixels.
Nếu mô hình này có kích thước lớn, thời gian chạy thậm chí lên đến 45 phút
Lưu ý: Code chuyển đổi này chỉ hoạt động trên hệ điều hành Jetpack và phiên bản onnx 1.4.1 Nếu không đáp ứng đúng, thì không thể chuyển đổi sang onnx
Chạy file yolo_to_onnx.py để khởi động:
$ cd ${HOME}/project/tensorrt_demo/yolo
$ python3 yolo_to_onnx.py -m YOLOv4-416
Sau khi chạy xong, ta thu được file onnx như sau
Bước 4: Tiếp tục từ mô hình trung gian onnx chuyển đổi sang định dạng trt bằng lệnh $ python3 onnx_to_trt.py -m YOLOv4-416 Kết quả thu được:
3.6.2 Kết quả đạt được sau khi tối ưu
1 Về kích thước sau khi chuyển đổi định dạng: Hình ảnh dưới đây thể hiện kích thước giữa các mô hình: mô hình YOLOv4-tiny ban đầu (.weights), mô hình chuyển đổi trung gian (.onnx) và mô hình được tối ưu TensorRT (.trt) Ta có thể thấy:
Hình 3.13 So sánh kích thước giữa các mô hình
2 Về chất lượng khi chạy mô hình: Mô hình có khả năng nhận diện được lửa tốt, với FPS cao (21.22) như hình mô tả dưới đây
Hình 3.14 Thử nghiệm mô hình TensorRT
3 Về kiến trúc của mô hình ban đầu và mô hình đã được tối ưu ta có: a Mô hình ban đầu trước khi xuất ra Output có hai Convolutional Layer ( mạng chập Neural) để lọc ra vị trí và Bounding box có kích thước nhỏ nhất Tuy nhiên dưới hai lớp này có rất nhiều các lớp Reshape và toán tử ở phía dưới b Đối với mô hình TensorRT, kiến trúc các lớp đã được rút gọn Phía dưới các lớp Convolutional Layer không còn các lớp con dày đặc như mô hình gốc Thay vàođó chỉ có một lớp BatchNormalization Đây cũng là một trong những nguyên nhân khiến TensorRT có khả năng tiết kiệm tài nguyên máy tính tốt hơn so với mô hình gốc
Hình 3.15 Kiến trúc của mô hình chưa được tối ưu
Hình 3.16 Kiến trúc của mô hình đã được tối ưu
Cài đặt Dashboard dựa trên nền tảng Thingsboard
Thingsboard có thể được cài đặt dễ dàng trên hệ điều hành Ubuntu, trong khi việc cài đặt trên Windows có thể gặp khó khăn hơn Người dùng có thể thiết lập Thingsboard trên máy tính trong cùng mạng LAN để chia sẻ sử dụng Bộ cài đặt có thể được tải về từ liên kết sau: [Tải Thingsboard](https://github.com/thingsboard/thingsboard/releases/download/v3.2.2/thingsboard-3.2.2.deb).
Hình 3.17 Giao diện Thingsboard sau khi cài đặt thành công
TRIỂN KHAI THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ
Sơ đồ triển khai ứng dụng trên thiết bị
Admin: Sử dụng Camera được kết nối vào thiết bị Jetson để phát hiện ra những đám cháy
Hình ảnh từ Camera sẽ được Streaming Server sử dụng thư viện Flask của Python để phát trực tiếp lên host Để hiển thị video streaming, bạn cần tạo một thẻ HTML trên Dashboard của Thingsboard và nhúng đường dẫn video vào đó.
Các thông số từ vụ cháy, bao gồm tỉ lệ khả năng xảy ra hỏa hoạn, số vị trí có đám cháy và FPS, được truyền tải lên Thingsboard thông qua giao thức MQTT.
Trên Thingsboard, thiết lập một Rule Chain với điều kiện: Nếu tỉ lệ xảy ra hỏa hoạn trên 70% thì gửi cảnh báo về cho Admin
Người dùng có thể truy cập vào hệ thống bằng tài khoản xác thực được cấp để xem live stream từ camera và nhận thông số gửi từ camera Tuy nhiên, họ không thể nhận được email cảnh báo từ Thingsboard.
Hình 4.1 Mô hình triển khai thực nghiệm
Thiết lập Streaming Server
Nguyên tắc hoạt động của Streaming là tải hình ảnh lên Web Server bằng cách upload từng khung hình mà camera ghi lại Trung bình, mỗi giây sẽ có 20 khung hình được camera ghi nhận, tương ứng với 20 hình ảnh được tải lên Streaming Server Hệ thống sẽ được triển khai theo các bước cụ thể.
Bước 1: Cài đặt thư viện Flask cho python
Bước 2: Thiết lập Streaming Server bằng ngôn ngữ Python, sử dụng các Function để tải liên tục các frame lên Web Server với địa chỉ Localhost 127.0.0.1 Bước 3: Ứng dụng phát hiện lửa sẽ ghi lại các frame từ camera, kèm theo bounding box của vật thể được phát hiện vào file hình ảnh detect.jpeg, với mỗi frame tự ghi đè liên tục Thêm dòng code cv.imwrite('detect.jpeg', 'frame') vào vòng lặp khi tải mô hình.
Bước 4: Chạy thử nghiệm Ta chỉ cần dùng đường dẫn của hình ảnh Stream liên kết đến Dashboard bằng thẻ của html
Hình 4.2 Hình ảnh Streaming Server
Thiết lập trên Thingsboard
Dashboard của ứng dụng phát hiện lửa đã được cài đặt trên Thingsboard Phương thức truyền thông tin sử dụng MQTT, với Device trên Thingsboard hoạt động như một Broker, xác thực bằng mã Token riêng biệt Bước đầu tiên là tạo một thiết bị trên Thingsboard theo các bước hướng dẫn trong hình ảnh.
Hình 4.3 Khởi tạo thiết bị trên Thingsboard
Sau khi bấm vào dấu cộng, một bảng khởi tạo sẽ hiện lên:
Hình 4.4 Khởi tạo thiết bị trên Thingsboard 2
Thực hiện các bước trên hình, sau đó bấm Add thì đã tạo xong một thiết bị mới
Bước 2: Lấy mã token để truy cập thiết bị
Hình 4.5 Lấy mã Token trên Thingsboard
Bước 3: Thiết lập đường truyền MQTT trên source code Khai báo các thông tin như Token, host, các tham số cần truyền
#Mã token truy cập vào thiết bị
ACCESS_TOKEN='r1NTs6vgP0ZD7z1Of6N6'
THINGSBOARD_HOST='192.168.1.6' client = mqtt.Client() client.username_pw_set(ACCESS_TOKEN)
#Các tham số cần gửi lên fire_data={'firerate': 0,'ViTri': 0 ,'Thong Bao' 'Chua gui Email : canh bao', 'FPS': , } 0
Bước 4: Tạo bảng Dashboard từ các thông số được gửi lên
Hình 4.6 Dashboard quản lý ứng dụng phát hiện lửa
Thiết lập Rule chain ( điều kiện để phát cảnh báo )
Input: Thông số FireRate ( khả năng xảy ra hỏa hoạn ) được lấy từ kết quả
Script: Xây dựng cấu trúc điều kiện để gửi cảnh báo Điều kiện là khả năng xảy ra hỏa hoạn trên 70%
Khi thiết lập điều kiện trong Rule chain, nếu điều kiện được thỏa mãn (True), cảnh báo sẽ được khởi tạo và gửi Email đến người dùng Ngược lại, nếu điều kiện không thỏa mãn (False), Rule chain sẽ bị hủy và quay lại bước Input ban đầu.
Đánh giá kết quả các mô hình
4.5.1 Chạy thử nghiệm các mô hình
Hiện nay, các mô hình Yolo như YOLOv3, YOLOv4 và YOLOv5 được ưa chuộng trong việc phát hiện vật thể Trong khi đó, các phiên bản cũ hơn như YOLOv2 và Yolo9000 đã không còn phổ biến do thời gian huấn luyện dài, thường trên 6 tiếng, để đạt được độ chính xác cao.
Mô hình YOLOv3 và YOLOv4 được triển khai trên nền tảng Darknet, trong khi YOLOv5 hoạt động trên nền tảng Pytorch Nhóm nghiên cứu đã xây dựng ba mô hình YOLOv3-tiny, YOLOv4-tiny và YOLOv5s để thực hiện so sánh và đánh giá hiệu suất trên cùng một khung hình Các thông số thử nghiệm đã được thiết lập để đảm bảo tính chính xác trong quá trình phân tích.
Dataset huấn luyện : 1346 hình ảnh
Số vòng huấn luyện : 10000 integration
Trong thử nghiệm đầu tiên, YOLOv3 đạt độ chính xác 75.7% với 10,000 lần tích hợp và thời gian huấn luyện khoảng 4 giờ Để nâng cao độ chính xác, cần tăng thời gian huấn luyện và mở rộng tập dữ liệu Tuy nhiên, do giới hạn của máy ảo Google Colab phiên bản miễn phí, nhóm không thể thực hiện các yếu tố này.
Hình 4.9 Kết quả huấn luyện của YOLOv3-tiny
Hình 4.10 Thử nghiệm YOLOv3-tiny
- Sau 10000 vòng huấn luyện, mô hình YOLOv3 chưa đạt được kết quả tốt Độ chính xác bé hơn 80%.
- Có khả năng phát hiện tất cả ngọn lửa trong khung hình nhưng độ khớp dữ liệu chỉ trung bình 45% như hình 54.
- Thời gian phản hồi kết quả nhận diện chưa nhan
YOLOv4 đạt được kết quả tốt nhất trong các mô hình thử nghiệm, với độ chính xác lên đến 98%, thời gian huấn luyện khoảng 150 phút
Hình 4.11 Kết quả huấn luyện của YOLOv4-tiny
Hình 4.12 Kết quả thử nghiệm YOLOv4-tiny
Mô hình YOLOv4 đạt hiệu suất cao trong việc nhận diện tất cả các loại vật thể, với tỷ lệ khớp dữ liệu vượt quá 80%, vượt trội hơn so với YOLOv3-tiny.
- Thời gian phản hồi kết quả nhận diện nhanh
Khác với hai phiên bản trước, YOLOv5 được xây dựng trên nền tảng Pytorch, với các tham số được cấu hình sẵn để huấn luyện mô hình Với chỉ số IoU 0.5, YOLOv5 đạt độ chính xác 95% chỉ sau khoảng hai giờ huấn luyện.
Hình 4.13 Kết quả huấn luyện YOLOv5
Hình 4.14 Kết quả thử nhiệm trên YOLOv5
- Mô hình có hiệu suất cao khi độ khớp dữ liệu trên các vật thể đều xấp xỉ 90% trở lên
- Xử lý các khung hình dưới 480p chưa tốt, mô hình phù hợp phát hiện trong điều kiện camera có độ phân giải cao
- Tiêu thụ lượng lớn tài nguyên máy tính
4.5.2 Thông số chi tiết các mô hình thử nghiệm Để đưa ra sự lựa chọn chính xác giữa các mô hình, nhóm đã thực hiện xây dựng nhiều mô hình, từ hiệu năng được biểu diễn, lựa chọn chính xác và cải thiện chất lượng sau đó tiến hành sử dụng trên thiết bị Jetson Nano Các mô hình ban đầu được xây dựng trên Laptop là YOLOv3, YOLOv4, YOLOv5, với kết quả sau đây:
Mô hình CPU GPU RAM
FPS trung bình Độ chính xác Độ mất mát
Bảng 4.1 Các thông số thu được trên Laptop
Mô hình được xây dựng trên Laptop có cấu hình:
CPU: AMD Ryzen 5 4600H with Radeon Graphics (12 CPUs),
GPU : NVIDIA GeForce GTX 1650 Ti, Memory: 13000MB VRAM
Mô hình CPU GPU RAM
FPS trung bình Độ chính xác Độ mất mát
Jetson Nano phiên bản 2Gb không thể hoạt động hiệu quả khi chỉ cần tải camera, vì hệ thống sẽ báo lỗi thiếu bộ nhớ và thường xuyên bị sập nguồn.
Bảng 4.2 Các thông số thu được trên Jetson Nano
Nhận xét kết quả và đánh giá các mô hình :
Cả hai mô hình đều sử dụng một lượng RAM tương đương do cùng nền tảng Darknet để chạy và đào tạo Khi thực hiện trên hai thiết bị là Laptop và Jetson Nano, số khung hình trên giây của cả hai mô hình không có sự chênh lệch đáng kể, vì vậy máy tính không cần thêm bộ nhớ để xử lý hình ảnh, dẫn đến việc lượng RAM sử dụng giữa hai phiên bản không khác biệt nhiều.
Sau 10,000 lần huấn luyện, YOLOv4 cho thấy hiệu suất vượt trội hơn YOLOv3 về độ chính xác, độ mất mát và FPS Nguyên nhân chính là do cấu hình của YOLOv3-tiny chỉ có 13 lớp Convolutional, trong khi YOLOv4-tiny sở hữu đến 21 lớp Convolutional Sự gia tăng số lượng lớp này giúp YOLOv4 xử lý hình ảnh hiệu quả hơn và nâng cao độ chính xác trong quá trình huấn luyện.
YOLOv4 có kích thước nhỏ hơn đáng kể so với YOLOv3 nhờ vào việc tối ưu hóa mô hình Pretrain ngay từ đầu Alexey, tác giả của YOLOv4, đã cải tiến thiết kế này, giúp mô hình sau khi huấn luyện tùy chỉnh không bị phình to như phiên bản trước đó.
Độ chính xác vượt trội của YOLOv4 cũng chính là nguyên nhân chính khiến mô hình sử dụng ít CPU và GPU hơn so mới
YOLOv4 cải thiện khả năng nhận diện ngọn lửa trong khung hình so với YOLOv3, sử dụng ít vòng lặp hơn nhưng vẫn đạt độ chính xác cao Điều này giúp tiết kiệm tài nguyên máy tính khi vẽ Bounding Box xung quanh các vật thể.
YOLOv5 là phiên bản cải tiến của mô hình phát hiện vật thể "You Only Look Once", mặc dù không được xem là phiên bản chính thức thứ 5 Mô hình này mang lại hiệu suất cao với tỷ lệ chính xác lên đến 95%, đánh dấu những bước tiến quan trọng trong công nghệ phát hiện đối tượng.
Khác với YOLOv3 và YOLOv4, YOLOv5 được phát triển trên nền tảng Pytorch, dẫn đến việc khởi động mô hình tiêu tốn nhiều RAM Điều này khiến thiết bị Jetson Nano phiên bản 2Gb không thể tải hình ảnh từ Camera.
YOLOv5s được thiết kế với 8 lớp Convolutional, giúp tối ưu hóa quá trình xử lý hình ảnh và tăng cường số khung hình trên mỗi giây Mặc dù số lớp hạn chế, nhưng việc sử dụng các lớp BottleneckCSP tiếp theo vẫn đảm bảo hiệu suất nhận diện vật thể hiệu quả.
YOLOv5 có ba phiên bản s/m/l, tương ứng với kích thước nhỏ, vừa và lớn Các phiên bản này được nhóm phát triển Ultralytics cấu hình sẵn và không cho phép thay đổi thông số như ở YOLOv3 và YOLOv4 Điều này mang lại độ ổn định cao cho mô hình, vì khi thực hiện hai lần huấn luyện khác nhau trên cùng một tập dữ liệu và số vòng huấn luyện giống nhau, YOLOv5 sẽ cho ra kết quả nhất quán.
Chạy thực nghiệm
Để sử dụng ứng dụng trên thiết bị Jetson Nano, trước tiên bạn cần SSH vào máy tính như hình minh họa Quan trọng là phải khởi động đồng thời ứng dụng lửa và hệ thống Streaming để đảm bảo hoạt động hiệu quả.
Sau khi khởi động hệ thống, bảng điều khiển trên Thingsboard sẽ hiển thị ngay lập tức các thông số quan trọng như hình ảnh trực tiếp từ camera, FPS, tình trạng hỏa hoạn và số lượng vị trí cháy được phát hiện.
Mô hình đã được đưa lên Streaming Server và vẫn duy trì khả năng phát hiện đầy đủ các vật thể, đồng thời đảm bảo FPS cao với mức trung bình đạt 20.
Hình ảnh 4.17 cho thấy kết quả kiểm thử trên ngọn lửa từ điện thoại di động, trong khi hình ảnh 4.18 thể hiện kiểm thử trên ngọn lửa thật Cả hai mẫu kiểm thử đều đạt kết quả tốt.
Hình 4.17 Kết quả thử nghiệm 1
Hình 4.18 Kết quả thử nghiệm 2
Hình 4.19 Thingsboard phát cảnh bảo Khi xuất hiện hỏa hoạn một Email sẽ được gửi đến nhằm cảnh báo người dùng