Giới thiệu dự án

Hỏa hoạn là một trong những hiểm họa nghiêm trọng gây thiệt hại nặng nề về tính mạng, tài sản và môi trường sinh thái. Theo thống kê từ Cục Cảnh sát Phòng cháy chữa cháy và Cứu nạn cứu hộ, phần lớn các vụ cháy lớn tại các khu dân cư, nhà xưởng công nghiệp và rừng tự nhiên gây hậu quả thảm khốc đều do phát hiện muộn và xử lý đám cháy trong "thời gian vàng" (3-5 phút đầu tiên) không hiệu quả.

Các giải pháp cảnh báo truyền thống như đầu báo khói/nhiệt quang điện, cảm biến khí MQ-135 thường gặp nhược điểm cố hữu: phạm vi bao phủ hẹp, dễ báo động giả khi gặp bụi bẩn hoặc độ ẩm cao, và chỉ kích hoạt khi nồng độ khói/nhiệt đã lan rộng tới vị trí lắp đặt. Các phương pháp theo dõi qua ảnh vệ tinh lại có chu kỳ quét dài, độ phân giải thấp và không đáp ứng được tính thời gian thực (Real-time). Trong khi đó, việc quan sát bằng mắt thường qua hệ thống camera giám sát thông thường đòi hỏi nhân lực túc trực liên tục, dễ xảy ra sai sót do mệt mỏi thị giác.

                  +-----------------------------------+
                  |  Camera Thu Thập Khung Hình Video |
                  +-----------------+-----------------+
                                    | (Frames)
                                    v
                  +-----------------------------------+
                  |       Edge AI: Jetson Nano        |
                  |  (Tiền xử lý -> YOLOv4-tiny trt)  |
                  +--------+-----------------+--------+
                           |                 |
          (H.264 Web Stream|                 | (MQTT Telemetry)
                           v                 v
           +---------------+---+         +---+---------------+
           |    Flask Server   |         | ThingsBoard Cloud |
           |  (Web Dashboard)  |         | (Rule Chain Alarm)|
           +-------------------+         +-------------------+

Đề tài "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" (Fire Detection Application Based on Deep Learning for Jetson Nano) được nghiên cứu và hiện thực hóa nhằm giải quyết bài toán phát hiện ngọn lửa tức thì ngay tại biên mạng (Edge Computing). Bằng cách khai thác sức mạnh của mạng nơ-ron tích chập (Convolutional Neural Networks - CNN) thuộc họ thuật toán YOLO kết hợp bộ công cụ tăng tốc phần cứng NVIDIA TensorRT, hệ thống cung cấp giải pháp cảnh báo sớm có chi phí thấp, độ chính xác cao và khả năng định vị chính xác tọa độ đám cháy.

Mục tiêu của dự án

  1. Thu thập và xây dựng tập dữ liệu (Dataset) chuyên biệt: Chuẩn hóa hình ảnh ngọn lửa đa dạng về quy mô, màu sắc, góc chụp và bổ sung các mẫu âm bản (đèn điện, ánh nắng mặt trời phản chiếu) nhằm triệt tiêu tối đa hiện tượng dương tính giả (False Positive).
  2. Nghiên cứu, đánh giá và lựa chọn mô hình học sâu: Phân tích thực nghiệm hiệu năng giữa các kiến trúc nhận diện vật thể tiên tiến: YOLOv3-tiny, YOLOv4-tiny và YOLOv5s.
  3. Tối ưu hóa mô hình cho thiết bị nhúng: Sử dụng framework NVIDIA TensorRT để lượng tử hóa và biên dịch mô hình sang định dạng engine tính toán hiệu năng cao trên vi xử lý có tài nguyên hạn chế.
  4. Xây dựng hệ thống giám sát và truyền tải dữ liệu IoT: Tích hợp máy chủ streaming video nền web bằng Python Flask và kết nối giao thức MQTT để đẩy dữ liệu telemetries lên bảng điều khiển ThingsBoard, tự động phát cảnh báo theo chuỗi quy tắc (Rule Chain).

Phạm vi và giới hạn

  • Phạm vi triển khai: Giám sát thời gian thực qua camera đơn kênh (USB Webcam hoặc CSI Camera) kết nối trực tiếp với mạch máy tính nhúng NVIDIA Jetson Nano 2GB.
  • Giới hạn hệ thống: Tập trung phát hiện ngọn lửa nhìn thấy được (flame detection); chưa tích hợp phân tích phổ nhiệt hồng ngoại chuyên dụng hoặc phát hiện làn khói mờ phân tán rộng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Thị trường giám sát và cảnh báo cháy nổ hiện nay tồn tại khoảng trống lớn giữa các thiết bị cảm biến phần cứng rời rạc và các hệ thống phân tích video AI đắt đỏ đòi hỏi máy chủ cấu hình mạnh.

Tiêu chí so sánh Cảm biến khói/nhiệt (MQ-135 / Sensor hạt) Giám sát qua vệ tinh Mô hình CNN Cổ điển (Toby Breckon, 2018) Mô hình FireNet YOLOv3 (Moses, 2019) Giải pháp Đề tài (YOLO-Tiny + TensorRT)
Bản chất kỹ thuật Phản ứng hóa học / Quang học Chụp quét viễn thám đa phổ Phân loại ảnh (Image Classification) Nhận diện vật thể (Object Detection) Nhận diện vật thể tối ưu hóa biên (Edge AI)
Độ trễ phát hiện Cao (30s - vài phút khi khói tới đầu dò) Rất cao (chu kỳ quét theo giờ/ngày) Trung bình (~200ms trên GPU rời) Cao trên thiết bị nhúng (>500ms) Cực thấp (< 45ms trên Jetson Nano)
Định vị tọa độ lửa Không (chỉ biết vùng đặt sensor) Có (tọa độ địa lý vĩ mô) Không (chỉ báo có/không có lửa trong ảnh) Có (Bounding Box) Có (Bounding Box chuẩn hóa, mAP cao)
Khả năng chạy nhúng Rất cao (MCU đơn giản) Không áp dụng Khá (TensorFlow 1.5 Lite) Kém (Keras/ImageAI ngốn RAM) Tối ưu tuyệt đối (Chạy mượt trên RAM 2GB)
Tỷ lệ báo động giả Cao (bụi, khói nấu ăn, sương) Trung bình (mây che, phản xạ) Trung bình (nhầm lẫn đèn vàng) Trung bình Rất thấp (Huấn luyện với Hard Negative samples)

Yêu cầu người dùng đối với hệ thống được chuẩn hóa theo mô hình MoSCoW:

  • Must have (Bắt buộc): Nhận diện ngọn lửa thời gian thực (tối thiểu 15-20 FPS trên Jetson Nano); đóng khung Bounding Box quanh ngọn lửa; truyền tín hiệu cảnh báo cháy về Server qua mạng không dây.
  • Should have (Nên có): Giao diện Web streaming trực quan; Dashboard quản trị tập trung ThingsBoard với biểu đồ trạng thái; cơ chế tự động gửi cảnh báo thời gian thực qua MQTT.
  • Could have (Có thể có): Chế độ ghi lại log hình ảnh khi phát hiện cháy để truy xuất bằng chứng; tinh chỉnh độ nhạy ngưỡng kích hoạt còi báo.
  • Won't have (Chưa thực hiện ở giai đoạn này): Phân luồng xử lý đồng thời 8-16 kênh camera 4K; phân biệt các chất cháy hóa học đặc thù.

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế phân tầng theo mô hình Điện toán biên (Edge-to-Cloud Architecture):

graph TD
    subgraph EdgeDevice["Thiết bị nhúng (NVIDIA Jetson Nano 2GB)"]
        Cam["Camera (USB/CSI 720p)"] -->|"Capture frames"| Pre["Image Preprocessing (Resize 416x416, Normalize)"]
        Pre -->|"Input Tensor"| TRT["TensorRT Engine (YOLOv4-tiny.trt)"]
        TRT -->|"Raw Output"| Post["Post-processing (NMS, Threshold Filter)"]
        Post -->|"Render Boxes"| Flask["Flask Web Server (/video_feed)"]
        Post -->|"Trigger Alert"| MQTTClient["Paho-MQTT Publisher Client"]
    end

    subgraph MonitoringNetwork["Hệ thống Giám sát & Quản trị"]
        Flask -->|"HTTP MJPEG Stream"| WebUI["Web Browser Client"]
        MQTTClient -->|"Publish JSON Telemetry"| Broker["ThingsBoard MQTT Broker (Port 1883)"]
        Broker -->|"Rule Engine"| RuleChain["Rule Chain Processing"]
        RuleChain -->|"Telemetry Data"| Dashboard["ThingsBoard Telemetry Dashboard"]
        RuleChain -->|"Critical Alarm"| Alarm["Alarm Notification Module"]
    end

Ngăn xếp công nghệ (Technology Stack)

  • Hệ điều hành & Nền tảng: NVIDIA JetPack 4.5.1 (Linux Ubuntu 18.04 LTS, nhân ARM64 aarch64).
  • Trình điều khiển & Tăng tốc: NVIDIA CUDA Toolkit 10.2, cuDNN 8.0.0, TensorRT 7.1.3.
  • Ngôn ngữ & Thư viện lõi: Python 3.6.9, OpenCV 4.5.1 (biên dịch hỗ trợ CUDA/GStreamer), PyCUDA 2020.1, NumPy 1.19.4.
  • Framework đào tạo: Darknet (AlexeyAB), PyTorch 1.7.0, ONNX 1.8.0.
  • Truyền thông & Giao diện: Flask 2.0.1 (Web Server), Eclipse Paho MQTT Python Client 1.5.1, Nền tảng ThingsBoard Community Edition v3.2.

Thiết kế giao thức truyền thông (API / MQTT Telemetry)

Thiết bị Jetson Nano kết nối tới ThingsBoard Broker qua cổng 1883 với Access Token định danh thiết bị. Dữ liệu cảnh báo được định dạng theo cấu trúc JSON:

{
  "device_id": "JETSON_NANO_FIRE_NODE_01",
  "status": "CRITICAL_ALARM",
  "fire_detected": true,
  "confidence_score": 0.912,
  "bbox_coordinates": {
    "x_min": 145,
    "y_min": 210,
    "x_max": 280,
    "y_max": 395
  },
  "timestamp": 1625298412000
}

Methodology

Quy trình nghiên cứu áp dụng mô hình lặp theo hướng tiếp cận Kỹ thuật Hệ thống thực nghiệm (Experimental Engineering Methodology) gồm 4 giai đoạn:

  1. Giai đoạn 1 (Thu thập dữ liệu & Đào tạo cơ bản): Tổng hợp 4.500 ảnh chứa ngọn lửa từ các bộ dữ liệu mở (Kaggle, Roboflow, Flickr Fire Dataset) và bổ sung 1.200 ảnh chụp thực tế. Tiến hành gán nhãn định dạng YOLO (class x_center y_center width height) bằng công cụ LabelImg. Đào tạo đối sánh trên máy trạm (Workstation GPU NVIDIA GTX 1080Ti).
  2. Giai đoạn 2 (Tối ưu hóa & Đóng gói nhúng): Xuất trọng số .weights / .pt, chuyển đổi đồ thị tính toán sang chuẩn .onnx, sử dụng trình biên dịch trtexec của NVIDIA TensorRT để tạo file .engine (lượng tử hóa FP16).
  3. Giai đoạn 3 (Tích hợp Web & Nền tảng IoT): Xây dựng luồng đa luồng (Multi-threading) đọc camera, giải mã frame, inference TensorRT, dựng HTTP MJPEG streaming và publish gói tin MQTT không chặn (non-blocking).
  4. Giai đoạn 4 (Kiểm thử thực nghiệm & Đánh giá): Thử nghiệm tại phòng lab với nhiều vật mang lửa (bật lửa, nến, ngọn lửa cồn, giấy cháy) và vật gây nhiễu (đèn halogen, đèn sợi đốt, màn hình hiển thị ảnh lửa).

Implementation và kết quả

Development process

Cơ sở toán học của thuật toán YOLO

Mô hình YOLO phân chia ảnh đầu vào thành lưới $S \times S$. Mỗi ô lưới chịu trách nhiệm dự đoán $B$ Bounding Boxes cùng độ tin cậy $Pr(\text{Object}) \times \text{IoU}_{\text{pred}}^{\text{truth}}$ và xác suất các lớp $P(\text{Class}_i | \text{Object})$.

Chỉ số giao trên hợp (Intersection over Union - IoU) được tính toán:

$$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} = \frac{\text{Area}(B_{\text{pred}} \cap B_{\text{ground_truth}})}{\text{Area}(B_{\text{pred}} \cup B_{\text{ground_truth}})}$$

Tổng hàm mất mát (Total Loss Function) trong quá trình huấn luyện:

$$\mathcal{L}{\text{total}} = \lambda{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb{I}{ij}^{\text{obj}} \left[ (x_i - \hat{x}i)^2 + (y_i - \hat{y}i)^2 \right] + \lambda{\text{coord}} \sum{i=0}^{S^2} \sum{j=0}^B \mathbb{I}_{ij}^{\text{obj}} \left