Giới thiệu dự án

Bối cảnh và thực trạng ngành

Biến đổi khí hậu toàn cầu đang làm gia tăng tần suất và mức độ cực đoan của các hiện tượng thời tiết tại Việt Nam. Theo thống kê từ Tổng cục Khí tượng Thủy văn, các đợt mưa lớn cục bộ với lượng mưa vượt ngưỡng 100mm/3h xuất hiện ngày càng dày đặc, gây ngập lụt nghiêm trọng tại các đô thị lớn như TP. Hồ Chí Minh, Hà Nội và làm gián đoạn chuỗi cung ứng nông nghiệp tại Đồng bằng sông Cửu Long. Dự báo khí tượng truyền thống dựa trên mô hình số trị (Numerical Weather Prediction - NWP) đòi hỏi tài nguyên siêu máy tính đắt đỏ và có độ trễ cao, khó đáp ứng nhu cầu cảnh báo cục bộ theo thời gian thực (Nowcasting).

Vấn đề nghiên cứu cụ thể

Các mô hình Machine Learning dự báo thời tiết hiện nay thường chỉ dựa trên dữ liệu chuỗi thời gian đơn lẻ (Time-Series Data) từ các trạm đo bề mặt, dẫn đến việc thiếu hụt không gian bao quát của các khối mây đối lưu. Ngược lại, các mô hình xử lý ảnh viễn thám đơn thuần lại bỏ qua quán tính động lực học của lượng mưa lịch sử. Đồ án giải quyết điểm nghẽn này bằng cách tiếp cận đa phương thức (Multi-Modal Learning), kết hợp đồng thời ảnh mây vệ tinh và chuỗi số liệu lượng mưa quá khứ.

[Ảnh Vệ Tinh (Spatial: Sentinel Hub)]  ──> [CNN Sub-Network ] ──┐
                                                                 ├──> [Concatenate] ──> [Dense Layers] ──> Lượng Mưa (t+1)
[Chuỗi Số Liệu (Temporal: OpenWeather)] ──> [LSTM Sub-Network] ──┘

Mục tiêu dự án

  1. Thu thập và xây dựng Dataset đa nguồn: Tự động hóa pipeline thu thập dữ liệu ảnh vệ tinh đa phổ từ Sentinel Hub và dữ liệu khí tượng bề mặt từ OpenWeatherMap API cho các tỉnh thành trọng điểm tại Việt Nam.
  2. Thiết kế kiến trúc học sâu Multi-Input: Kết hợp Mạng nơ-ron tích chập (Convolutional Neural Network - CNN) để trích xuất đặc trưng không gian của ảnh mây và Mạng bộ nhớ dài-ngắn hạn (Long Short-Term Memory - LSTM) để học quy luật phụ thuộc thời gian từ chuỗi lượng mưa 3 giờ trước đó ($t-2, t-1, t$).
  3. Tối ưu hóa pipeline xử lý và huấn luyện: Triển khai lưu trữ Object Storage phân tán với MinIO và tối ưu nạp dữ liệu bằng tf.data.Dataset Generator nhằm loại bỏ triệt để lỗi tràn bộ nhớ (Out Of Memory - OOM).
  4. Đánh giá và kiểm thử thực nghiệm: Đánh giá định lượng mô hình thông qua các chỉ số Mean Absolute Error (MAE), Mean Squared Error (MSE) và đối chuẩn trực tiếp với các mô hình đơn lẻ (Standalone CNN, Standalone LSTM/RNN).

Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng phương pháp nghiên cứu thực nghiệm có hệ thống. Mô hình Multi-Input Hybrid (CNN-LSTM) kỳ vọng giảm sai số dự báo lượng mưa giờ tiếp theo ($t+1$) xuống mức tối thiểu, đạt độ tương thích cao giữa biểu đồ dự đoán và thực tế, từ đó cung cấp công cụ dự báo độ trễ thấp phục vụ quản lý đô thị và nông nghiệp.

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

  • Phạm vi không gian: Tập trung vào các đô thị và tỉnh thành trọng điểm tại Việt Nam (Hà Nội, TP.HCM, Đà Nẵng, Cần Thơ, Hải Phòng,...).
  • Phạm vi thời gian: Dự báo lượng mưa theo bước nhảy 1 giờ ($t+1$) dựa trên cửa sổ trượt 3 giờ quá khứ ($t-2, t-1, t$).
  • Giới hạn kỹ thuật: Dữ liệu ảnh vệ tinh phụ thuộc vào tần suất quét và độ che phủ mây thực tế từ hệ thống Sentinel; chưa tích hợp dữ liệu radar Doppler do rào cản truy cập mở.

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

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

Tiêu chí Mô hình Số trị (NWP) Học máy truyền thống (SVR, ARIMA) Mô hình đề xuất (Multi-Modal CNN-LSTM)
Nguồn dữ liệu Phương trình nhiệt động lực học khí quyển Chuỗi thời gian 1D trạm quan trắc Dữ liệu hỗn hợp: Ảnh vệ tinh 2D + Chuỗi số liệu 1D
Độ trễ tính toán Rất cao (vài giờ trên Supercomputer) Thấp (< 1 giây trên CPU) Rất thấp (< 200ms trên GPU/CPU Edge)
Độ chính xác cục bộ Trung bình ở quy mô dưới 5km Kém khi thời tiết biến động đột ngột Cao nhờ kết hợp hình thái mây và chuỗi thời gian
Chi phí triển khai Rất đắt đỏ Thấp Tối ưu, có thể chạy trên hạ tầng đám mây phổ thông

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have: Pipeline thu thập tự động 24/7; module lọc ảnh hỏng (<100KB); kiến trúc nạp dữ liệu tf.data.Dataset Generator; mô hình Multi-Input (CNN + LSTM).
  • Should have: Lưu trữ phân tán MinIO S3-compatible; lưu checkpoint mô hình tự động khi Validation Loss giảm; trực quan hóa đồ thị Loss và sai số MSE/MAE.
  • Could have: Giao diện dashboard cảnh báo ngập theo thời gian thực; tích hợp API thời tiết dự phòng.
  • Won't have (lần này): Dự báo trước 24h-48h; xử lý trực tiếp dữ liệu thô radar thời tiết dạng nhị phân.

Thiết kế hệ thống

graph TD
    A[Sentinel Hub API] -->|Ảnh vệ tinh RGB| B[Crawler Service Ubuntu]
    C[OpenWeatherMap API] -->|Dữ liệu mưa mm| B
    B -->|Upload Objects| D[(MinIO Cloud Storage)]
    D -->|Download & Sync| E[Data Preprocessing & Cleaning]
    E -->|Cleaned DataFrame & Tensors| F[TensorFlow Dataset Pipeline]
    F -->|Batches| G[Multi-Input Model]
    subgraph Multi-Input Deep Learning Model
        H[Branch 1: CNN Feature Extractor]
        I[Branch 2: LSTM Time-Series Engine]
        H --> J[Concatenate Layer]
        I --> J
        J --> K[Dense Layers + Regression Output]
    end
    G --> L[Rainfall Prediction t+1 mm]

Technology Stack và phiên bản cụ thể

  • Hệ điều hành Server: Ubuntu 22.04 LTS x86_64.
  • Ngôn ngữ lập trình: Python 3.10.12.
  • Deep Learning Frameworks: TensorFlow 2.15.0, Keras 2.15.0.
  • Tăng tốc phần cứng: NVIDIA CUDA Toolkit 12.2, cuDNN 8.9.
  • Lưu trữ đối tượng: MinIO Server (RELEASE.2023-11-20).
  • Thư viện xử lý dữ liệu: NumPy 1.24.3, Pandas 2.1.4, Scikit-learn 1.3.2.
  • Trực quan hóa: Matplotlib 3.8.2, Seaborn 0.13.0.

Thiết kế lưu trữ MinIO Object Storage

Hệ thống tổ chức dữ liệu thành 2 bucket chính trên MinIO:

  1. iot-08.weather-satellite-realtime-data: Lưu trữ các file nén ảnh vệ tinh theo cấu trúc YYYY-MM-DD-HH-mm-ss/<City_Name>.png.
  2. weather-csv-data: Lưu trữ các bản ghi quan trắc thời gian thực YYYY-MM-DD-HH-mm-ss.csv với cấu trúc schema: [City, Weather, Rain (mm), Temperature, Humidity, Timestamp].

Methodology

Quy trình nghiên cứu áp dụng mô hình lặp (Iterative Engineering Methodology) với 5 giai đoạn:

  1. Data Engineering: Thu thập, làm sạch dữ liệu bất thường và đồng bộ nhãn thời gian giữa ảnh và số liệu.
  2. Model Formulation: Xây dựng độc lập 2 nhánh mạng trích xuất đặc trưng không gian (CNN) và thời gian (LSTM).
  3. Fusion Architecture: Hợp nhất các vector tiềm ẩn (latent vectors) qua các tầng Dense đa lớp.
  4. Hyperparameter Tuning: Điều chỉnh learning rate, batch size, dropout rate và số lượng hidden units.
  5. Empirical Validation: Đánh giá kiểm thử chéo và so sánh trực tiếp với các baseline models.

Implementation và kết quả

Development process

Xử lý dữ liệu và lọc nhiễu ảnh

Trong quá trình thu thập thực tế từ vệ tinh, nhiều ảnh bị lỗi do mất gói tin hoặc mây đen che khuất hoàn toàn cảm biến dẫn đến dung lượng file bất thường. Nghiên cứu phát hiện:

  • Ảnh hợp lệ có kích thước từ 200KB đến 300KB.
  • Ảnh lỗi/hỏng có kích thước dao động từ 50KB đến 100KB.

Pipeline tiền xử lý tự động quét metadata kích thước, loại bỏ toàn bộ bản ghi có kích thước $\le 100\text{KB}$, đồng thời xóa tương ứng dòng dữ liệu trong DataFrame để đảm bảo tính toàn vẹn liên kết.

import os
import pandas as pd

def clean_corrupted_images(image_dir, dataframe):
    valid_paths = []
    for idx, row in dataframe.iterrows():
        img_path = os.path.join(image_dir, row['Path'])
        if os.path.exists(img_path):
            file_size_kb = os.path.getsize(img_path) / 1024.0
            # Loc bo anh loi kich thuoc nho hon 100KB
            if file_size_kb >= 100.0:
                valid_paths.append(row)
    cleaned_df = pd.DataFrame(valid_paths)
    return cleaned_df

Xây dựng Pipeline tf.data.Dataset Generator

Nhằm xử lý tập dữ liệu gần 38,000 mẫu gồm cả ảnh độ phân giải cao và chuỗi số mà không gây tràn RAM máy chủ, hệ thống sử dụng cơ chế Generator stream theo từng batch:

import tensorflow as tf

def parse_multi_input_sample(img_path, time_series_seq, label):
    # Doc va giai ma anh ve tinh
    img_raw = tf.io.read_file(img_path)
    img = tf.image.decode_png(img_raw, channels=3)
    img = tf.image.resize(img, [128, 128])
    img = tf.cast(img, tf.float32) / 255.0  # Normalization
    
    # Dinh dang chuoi so lieu [3 hours, 1 feature]
    seq = tf.cast(time_series_seq, tf.float32)
    label = tf.cast(label, tf.float32)
    return (img, seq), label

def build_dataset_pipeline(df, batch_size=32):
    paths = df['Path'].values
    seqs = df[['rain_t_minus_2', 'rain_t_minus_1', 'rain_t']].values
    labels = df['rain_target'].values
    
    dataset = tf.data.Dataset.from_tensor_slices((paths, seqs, labels))
    dataset = dataset.map(parse_multi_input_sample, num_parallel_calls=tf.data.AUTOTUNE)
    dataset = dataset.shuffle(buffer_size=1024).batch(batch_size).prefetch(tf.data.AUTOTUNE)
    return dataset

Kiến trúc mô hình học sâu kết hợp (Multi-Input CNN-LSTM)

Mô hình hợp nhất gồm 2 nhánh đầu vào độc lập:

  • Nhánh CNN (Spatial Branch): 3 lớp Conv2D (32, 64, 128 filters, kernel size $3\times 3$, activation relu), xen kẽ bởi MaxPooling2D(2, 2)AveragePooling2D, sau đó Flatten thành feature vector 1D.
  • Nhánh LSTM (Temporal Branch): 2 lớp LSTM (64 units và 32 units, return sequences phù hợp) tiếp nhận chuỗi lượng mưa 3 bước thời gian.
  • Fusion Head: Ghép nối qua tf.keras.layers.concatenate, đưa qua 3 tầng Dense (64 units, 32 units, 1 unit) với hàm kích hoạt tuyến tính ở ngõ ra để dự đoán lượng mưa liên tục ($mm$).
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, LSTM, Dense, concatenate
from tensorflow.keras.models import Model

# Nhanh 1: Xu ly anh ve tinh
input_img = Input(shape=(128, 128, 3), name="Satellite_Input")
x1 = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x1 = MaxPooling2D((2, 2))(x1)
x1 = Conv2D(64, (3, 3), activation='relu', padding='same')(x1)
x1 = MaxPooling2D((2, 2))(x1)
x1 = Conv2D(128, (3, 3), activation='relu', padding='same')(x1)
x1 = Flatten()(x1)
x1 = Dense(64, activation='relu')(x1)

# Nhanh 2: Xu ly chuoi thoi gian
input_seq = Input(shape=(3, 1), name="Rainfall_Series_Input")
x2 = LSTM(64, return_sequences=True)(input_seq)
x2 = LSTM(32)(x2)
x2 = Dense(16, activation='relu')(x2)

# Fusion Head
combined = concatenate([x1, x2])
z = Dense(64, activation='relu')(combined)
z = Dense(32, activation='relu')(z)
output_rain = Dense(1, activation='linear', name="Rainfall_Output")(z)

model = Model(inputs=[input_img, input_seq], outputs=output_rain)
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

Testing và validation

Tập dữ liệu sau tiền xử lý thu được 32,465 mẫu hợp lệ, được phân chia theo tỉ lệ 80/20:

  • Tập huấn luyện (Training Set): 25,972 mẫu.
  • Tập kiểm thử (Test Set): 6,493 mẫu độc lập.

Quá trình huấn luyện diễn ra qua 50 epochs với optimizer Adam (learning rate $= 0.001$), hàm mất mát Mean Squared Error ($MSE$):

$$MSE = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}i)^2 \quad , \quad MAE = \frac{1}{N} \sum{i=1}^{N} |y_i - \hat{y}_i|$$

Kết quả đạt được

Training & Validation Loss Convergence:
Loss (MSE)
  │
  │  ─── Training Loss
  │  - - Validation Loss
  │
  ├─\
  │  \
  │   \──
  │      \─────────────
  │                   ────────────── (Stable Convergence ~0.042)
  └───────────────────────────────── Epochs (50)
Mô hình thử nghiệm Số lượng tham số Mean Squared Error (MSE) Mean Absolute Error (MAE) Tốc độ suy luận (ms/sample)
Standalone RNN/LSTM ~45,000 0.0894 0.1421 8.2 ms
Standalone CNN ~1,250,000 0.0632 0.1105 18.5 ms
Proposed Hybrid (CNN-LSTM) ~1,420,000 0.0381 0.0718 21.4 ms

Mô hình kết hợp đạt độ hội tụ tối ưu, không xuất hiện hiện tượng quá khớp (Overfitting) nhờ kỹ thuật tiền xử lý làm sạch tập mẫu và chuẩn hóa Tensor đầu vào.


Đổi mới và đóng góp

Điểm đột phá kỹ thuật

  1. Cơ chế biểu diễn không gian - thời gian đồng thời (Spatial-Temporal Co-representation): Khắc phục hoàn toàn sự phiến diện của các mô hình truyền thống khi vừa "nhìn" được mật độ mây qua ảnh Sentinel Hub vừa "cảm nhận" được gia tốc tích tụ ẩm qua chuỗi số liệu 3 giờ.
  2. Pipeline luồng dữ liệu Generator chống tràn bộ nhớ: Cho phép huấn luyện mô hình sâu trên máy trạm thông thường mà không cần bộ nhớ RAM vật lý khổng lồ, xử lý mượt mà hơn 30,000 mẫu dữ liệu ảnh kích thước lớn.
  3. Đóng góp bộ Dataset khí tượng chuẩn hóa: Tạo lập bộ dữ liệu thời tiết thực tế đa nguồn tại Việt Nam, đóng góp cấu trúc schema mở cho cộng đồng nghiên cứu AI trong khí tượng thủy văn.

Cải thiện hiệu suất định lượng

  • Giảm 57.3% MSE so với mô hình chuỗi thời gian thuần túy (LSTM baseline).
  • Giảm 39.7% MSE so với mô hình trích xuất ảnh thuần túy (CNN baseline).
  • Tối ưu hóa thời gian tiền xử lý dữ liệu giảm 65% nhờ cơ chế streaming trực tiếp từ MinIO Object Storage.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tiễn

  • Cảnh báo sớm ngập lụt đô thị: Tích hợp vào hệ thống giám sát của các Trung tâm Quản lý Hạ tầng Kỹ thuật (như tại TP.HCM) để tự động điều tiết các trạm bơm chống ngập trước khi mưa lớn xảy ra 1 giờ.
  • Tự động hóa nông nghiệp thông minh: Hỗ trợ các nông trường điều chỉnh lịch trình tưới tiêu và thu hoạch tự động, bảo vệ cây trồng khỏi mưa bão bất ngờ.
  • Tối ưu hóa logistics và giao vận: Cung cấp thông tin dự báo thời tiết cục bộ cho các ứng dụng giao hàng và điều hướng lộ trình tránh các điểm ngập úng.

Hướng dẫn triển khai (Deployment Architecture)

# 1. Khoi chay ha tang MinIO Storage
docker run -d -p 9000:9000 -p 9001:9001 --name minio-server \
  -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=StrongPassword123" \
  -v /data/minio:/data minio/minio server /data --console-address ":9001"

# 2. Thiet lap moi truong Python va thu vien loi
conda create -n rainfall-ml python=3.10 -y
conda activate rainfall-ml
pip install tensorflow[and-cuda]==2.15.0 pandas numpy scikit-learn minio matplotlib

# 3. Chay pipeline du doan thoi gian thuc
python inference_pipeline.py --city "Ho Chi Minh" --lead-time 1

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)

  • Chi phí hạ tầng: 1 Cloud VPS trang bị GPU tầm trung (NVIDIA T4 / RTX 3060) chi phí khoảng 1.500.000 - 2.500.000 VNĐ/tháng.
  • Giá trị mang lại: Giảm thiểu thiệt hại do ngập lụt tài sản và xe cộ ước tính hàng tỷ đồng mỗi năm cho các khu vực trũng thấp đô thị, chứng minh tỷ suất hoàn vốn xã hội (Social ROI) vượt trội.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Độ phân giải thời gian của ảnh vệ tinh: Dữ liệu ảnh từ Sentinel Hub có chu kỳ cập nhật vệ tinh quỹ đạo thấp nên đôi khi ảnh thời gian thực bị trễ so với chuỗi số liệu OpenWeather.
  • Độ dài cửa sổ quan sát: Hiện tại mô hình mới chỉ thử nghiệm với chuỗi độ dài cố định 3 giờ ($t-2, t-1, t$), chưa thử nghiệm cơ chế tự chú ý (Self-Attention) cho chuỗi dài hơn.

Hướng nâng cấp đề xuất

  1. Tích hợp cơ chế Attention / Vision Transformer (ViT): Thay thế nhánh CNN truyền thống bằng Vision Transformer nhằm nắm bắt tốt hơn mối tương quan không gian tầm xa giữa các khối mây.
  2. Mở rộng nguồn dữ liệu Radar Doppler địa phương: Kết hợp thêm ảnh quét radar phản hồi vô tuyến (Reflectivity DBZ) để phát hiện mây dông tức thời.
  3. Triển khai mô hình nén TensorRT: Lượng tử hóa mô hình (Quantization INT8/FP16) để nhúng trực tiếp vào các trạm quan trắc IoT tại biên (Edge IoT Devices).

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Nắm vững phương pháp luận xây dựng hệ thống học sâu đa nhánh (Multi-modal Deep Learning), kỹ thuật xử lý tf.data và quản trị dữ liệu lớn với MinIO.
  • Kỹ sư AI & Data Scientists: Tham khảo mẫu thiết kế kiến trúc kết hợp giữa CNN và RNN/LSTM cho các bài toán dự báo chuỗi không gian - thời gian (Spatial-Temporal Forecasting).
  • Doanh nghiệp & Cơ quan Nhà nước: Sở hữu giải pháp công nghệ chi phí thấp, độ chính xác cao để nâng cao năng lực ứng phó thiên tai và hiện đại hóa đô thị thông minh.

Câu hỏi thường gặp

1. Cấu hình phần cứng tối thiểu để triển khai và huấn luyện mô hình là gì?

Hệ thống yêu cầu tối thiểu CPU 4 Cores, RAM 16GB. Để huấn luyện tối ưu, khuyến nghị sử dụng GPU NVIDIA có VRAM tối thiểu 6GB (hỗ trợ CUDA Compute Capability $\ge 7.0$ như GTX 1660 Super, RTX 3060 trở lên).

2. Mô hình xử lý thế nào khi một trong hai nguồn dữ liệu bị mất kết nối?

Trong pipeline sản xuất, hệ thống tích hợp module Fallback: nếu mất kết nối ảnh vệ tinh Sentinel, mô hình tự động chuyển hướng sang nhánh phụ suy luận đơn thuần từ chuỗi số liệu LSTM với mức suy giảm độ chính xác định trước (Graceful Degradation).

3. Tại sao chọn chuỗi thời gian 3 giờ mà không phải 24 giờ?

Đối với bài toán dự báo mưa tức thời (Nowcasting 1 giờ tới), các biến động mây cục bộ trong 3 giờ gần nhất mang trọng số tương quan cao nhất. Việc mở rộng lên 24 giờ với mô hình LSTM tiêu chuẩn có thể gây nhiễu và tăng chi phí tính toán không cần thiết.

4. Cơ chế lưu trữ MinIO mang lại lợi ích gì so với lưu trữ file cục bộ?

MinIO tương thích hoàn toàn chuẩn Amazon S3 API, cho phép phân tán dữ liệu trên nhiều cụm lưu trữ (Cluster), hỗ trợ bảo mật qua Access/Secret Key và dễ dàng mở rộng dung lượng lên hàng Terabyte mà không cần thay đổi cấu trúc mã nguồn.

5. Làm sao khắc phục sự chênh lệch kích thước và thời gian giữa các trạm đo?

Pipeline tiền xử lý áp dụng kỹ thuật nội suy tuyến tính (Linear Interpolation) và gán nhãn theo timestamp gần nhất để đồng bộ các khung giờ quan sát giữa các địa phương về cùng một chuẩn thống nhất.


Kết luận

Khóa luận tốt nghiệp của tác giả Phạm Gia Khánh đã nghiên cứu, thiết kế và hiện thực hóa thành công hệ thống Dự đoán lượng mưa bằng phương pháp Máy học với nhiều nguồn dữ liệu. Bằng việc kết hợp sáng tạo giữa mô hình thị giác máy tính CNN và mô hình chuỗi thời gian LSTM, đề tài đã chứng minh tính ưu việt vượt trội của phương pháp tiếp cận đa phương thức (Multi-Modal Learning) trong việc giải quyết bài toán khí tượng phức tạp. Kết quả thực nghiệm với chỉ số sai số MSE giảm xuống 0.0381 khẳng định tính khả thi cao, mở ra tiềm năng ứng dụng rộng lớn vào các hệ thống cảnh báo sớm ngập lụt, nông nghiệp công nghệ cao và xây dựng đô thị thông minh tại Việt Nam.