Giới thiệu dự án
Bối cảnh và thực trạng ngành
Theo Báo cáo Hiện trạng Môi trường Quốc gia, lượng rác thải sinh hoạt phát sinh tại Việt Nam đạt xấp xỉ 28 triệu tấn/năm, với tốc độ gia tăng bình quân 10-16% mỗi năm tại các đô thị lớn. Trong số này, tỷ lệ thu gom và xử lý tập trung chỉ đạt khoảng 85%, phần còn lại bị phát thải trực tiếp ra môi trường hoặc chôn lấp không hợp vệ sinh. Quy trình phân loại rác truyền thống tại Việt Nam hiện chủ yếu phụ thuộc vào phương pháp thủ công tại các bãi tập kết, đối mặt với năng suất thấp (khoảng 30-40 kg/người/giờ), điều kiện làm việc độc hại và tỷ lệ lẫn tạp chất cao (>25%), làm suy giảm nghiêm trọng giá trị tái chế của nhựa, thủy tinh và kim loại.
THỰC TRẠNG PHÂN LOẠI RÁC TẠI NGUỒN
┌───────────────────────────┐ ┌───────────────────────────┐
│ Rác sinh hoạt phát sinh │ 100% │ 28.000.000 Tấn/Năm │
├───────────────────────────┼─────────┼───────────────────────────┤
│ Thu gom & Xử lý tập trung │ 85% │ 23.800.000 Tấn/Năm │
├───────────────────────────┼─────────┼───────────────────────────┤
│ Tỷ lệ phân loại thủ công │ >90% │ Rủi ro độc hại cao │
├───────────────────────────┼─────────┼───────────────────────────┤
│ Thất thoát tái chế giá trị│ 15% │ Ô nhiễm đất & đại dương │
└───────────────────────────┘ └───────────────────────────┘
Vấn đề cốt lõi
Hệ thống xử lý chất thải hiện đại đòi hỏi tốc độ nhận diện nhanh, chính xác từng loại vật liệu để nạp vào dây chuyền cơ điện tử (robot phân loại, băng tải quang học). Tuy nhiên, các giải pháp phân loại tự động hiện nay tại các nước đang phát triển gặp rào cản lớn:
- Chi phí đầu tư hệ thống phân loại quang phổ NIR (Near-Infrared) quá cao (hơn 100.000 USD/line).
- Biến dạng ngoại quan của rác thải phức tạp (chai vỡ, vỏ hộp sữa bẹp, đồ nhựa biến dạng).
- Thiếu hụt tập dữ liệu chuẩn hóa đặc thù cho các nhóm rác thải sinh hoạt phổ biến.
Mục tiêu dự án
- Xây dựng tập dữ liệu thị giác máy tính chuẩn hóa gồm 1.771 ảnh cho 4 nhóm rác thải chủ lực: Nhựa, Kim loại, Chai lọ thủy tinh, Vỏ hộp sữa.
- Thiết kế và huấn luyện mô hình phát hiện đối tượng thời gian thực dựa trên kiến trúc tiên tiến YOLOv8 (You Only Look Once version 8).
- Đạt độ chính xác trung bình (mAP@50) vượt trên 85% trên tập kiểm thử với tốc độ suy luận đạt tối thiểu 30 khung hình/giây (FPS) trên phần cứng biên tiêu chuẩn.
- Triển khai pipeline kiểm thử toàn diện trên cả hai định dạng: ảnh tĩnh độ phân giải cao và luồng video HD thời gian thực.
Phương pháp tiếp cận
Dự án áp dụng phương pháp học sâu (Deep Learning) thông qua mô hình dò tìm đối tượng đơn giai đoạn (One-stage Detector) YOLOv8 kết hợp kỹ thuật Transfer Learning. Mô hình tận dụng kiến trúc trích xuất đặc trưng C2f (Cross-Stage Partial with 2 Convolutions) và cấu trúc đầu dò không neo (Anchor-Free Split Head) để phân tách tác vụ hồi quy biên (Bounding Box Regression) và phân loại lớp (Classification), tối ưu hóa thời gian tính toán và giảm thiểu sai số trên các vật thể rác thải xếp chồng.
graph LR
A[Dữ liệu thô 1.771 ảnh] --> B[Gán nhãn MakeSense.ai]
B --> C[Dataset YOLOv8 Format]
C --> D[Training YOLOv8 trên Google Colab GPU]
D --> E[Model Optimization]
E --> F[Inference: Image / HD Video]
Phạm vi và giới hạn
- Phạm vi dữ liệu: 4 nhóm rác thải chính gồm Plastic (nhựa), Metal (kim loại), Glass/Bottles (chai lọ thủy tinh), Milk Carton (vỏ hộp sữa đa lớp gồm 75% giấy, 25% nhôm/nhựa).
- Giới hạn kỹ thuật: Thử nghiệm tập trung trên ảnh đơn/đa vật thể nền tương phản cao và video quay trực tiếp từ camera di động chuẩn HD 1080p; chưa tích hợp module cơ điện tử phân loại vật lý (Robotic Arm, Actuator).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Phân loại thủ công |
Cảm biến vật lý & NIR |
Hệ thống CNN truyền thống (Faster R-CNN) |
Giải pháp YOLOv8 (Đề xuất) |
| Độ trễ suy luận |
Rất chậm (2-3s/vật thể) |
Nhanh (<20ms) |
Chậm (~100-150ms / 8-10 FPS) |
Siêu nhanh (~15-25ms / >45 FPS) |
| Chi phí đầu tư |
Chi phí nhân công cao |
Cực kỳ đắt đỏ |
Trung bình (cần GPU server mạnh) |
Thấp (chạy được trên Edge GPU / Jetson) |
| Độ chính xác |
Phụ thuộc thể lực (70-85%) |
Cao (>95%) |
Rất cao (>90%) |
Cao và ổn định (88-93%) |
| Tính linh hoạt |
Kém |
Thấp (cố định băng chuyền) |
Trung bình (khó scale realtime) |
Rất cao (đa nền tảng, web, app, camera) |
Phân tích yêu cầu theo khung MoSCoW
- Must have (Bắt buộc): Nhận diện chính xác 4 lớp đối tượng rác thải; xuất tọa độ Bounding Box và nhãn Class; xử lý được ảnh tĩnh và video HD.
- Should have (Nên có): Thiết lập ngưỡng lọc tin cậy (Confidence Threshold) linh hoạt; xuất báo cáo ma trận nhầm lẫn (Confusion Matrix) và đường cong mAP@50.
- Could have (Có thể mở rộng): Tích hợp phát hiện rác thải qua camera IoT RTSP Stream; tối ưu hóa mô hình sang định dạng ONNX/TensorRT.
- Won't have (Chưa thực hiện đợt này): Tự động điều khiển tay gắp robot công nghiệp; phát hiện rác thải chìm dưới nước.
Thiết kế hệ thống
graph TD
subgraph Input Layer
I1[Ảnh tĩnh đa vật thể]
I2[Luồng Video HD Camera]
end
subgraph YOLOv8 Architecture
B[Backbone: Modified CSPDarknet53 & C2f Modules]
N[Neck: Path Aggregation Network PAN-FPN]
H[Head: Decoupled Anchor-Free Detection Head]
end
subgraph Loss Computation
L1[CIoU Loss - Bounding Box]
L2[DFL Loss - Distribution Focal]
L3[BCE Loss - Classification]
end
subgraph Output Layer
O1[Bounding Boxes Coordinates]
O2[Confidence Scores]
O3[Predicted Classes: Plastic, Metal, Glass, Milk Box]
end
I1 & I2 --> B
B --> N --> H
H --> L1 & L2 & L3
H --> O1 & O2 & O3
Technology Stack và phiên bản
+-----------------------------------------------------------------------+
| TECHNOLOGY STACK CHI TIẾT |
+------------------------------------+----------------------------------+
| Python Runtime | v3.10.12 (Google Colab / CPython)|
| Deep Learning Framework | PyTorch v2.1.2+cu121 |
| Object Detection Framework | Ultralytics YOLOv8 v8.1.0+ |
| Computer Vision Library | OpenCV-Python v4.8.1.78 |
| Data Annotation Platform | MakeSense.ai Engine v1.1.0 |
| Development IDE | JetBrains PyCharm Professional |
| Hardware Acceleration | Nvidia Tesla T4 GPU 16GB VRAM |
+------------------------------------+----------------------------------+
Cấu trúc tệp cấu hình tập dữ liệu (waste_data.yaml)
# Đường dẫn tập dữ liệu
path: /content/drive/MyDrive/Waste_Detection_Dataset
train: images/train
val: images/val
test: images/test
# Định nghĩa số lớp và nhãn
nc: 4
names:
0: plastic
1: metal
2: bottle
3: milk_carton
Định dạng nhãn chuẩn hóa (YOLO Normalized Bounding Box)
Mỗi tệp nhãn .txt tương ứng với một tệp ảnh chứa các dòng thông tin:
$$\text{<class_id>} \quad \text{<x_center>} \quad \text{<y_center>} \quad \text{} \quad \text{}$$
Trong đó tất cả các giá trị tọa độ và kích thước được chuẩn hóa trong khoảng $[0.0, 1.0]$.
Phương pháp luận phát triển (Methodology)
Dự án áp dụng quy trình phát triển lặp CRISP-DM (Cross-Industry Standard Process for Data Mining) gồm 5 giai đoạn:
- Thu thập dữ liệu: Khai thác 1.771 mẫu ảnh từ nguồn Pinterest, lọc bỏ nhiễu và chia tách tập dữ liệu theo tỷ lệ 70% Train - 20% Validation - 10% Test.
- Tiền xử lý và gán nhãn: Sử dụng MakeSense.ai để bounding box thủ công chính xác từng đối tượng rác thải.
- Huấn luyện mô hình: Fine-tuning mô hình YOLOv8 pre-trained trên tập dữ liệu COCO với siêu tham số tối ưu (100 Epochs, Batch Size 16, Optimizer SGD/AdamW).
- Kiểm thử & Đánh giá: Phân tích ma trận nhầm lẫn, mất mát huấn luyện (Loss curves) và kiểm thử thực tế trên luồng dữ liệu thời gian thực.
- Đóng gói & Chuyển giao: Tối ưu hóa pipeline suy luận phục vụ ứng dụng nhúng.
Triển khai và kết quả thực nghiệm
Quá trình phát triển và Huấn luyện
Quy trình huấn luyện được cấu hình trực tiếp qua giao diện dòng lệnh của Ultralytics framework:
# Huấn luyện mô hình YOLOv8 trên tập dữ liệu phân loại rác
yolo task=detect mode=train \
model=yolov8n.pt \
data=waste_data.yaml \
epochs=100 \
imgsz=640 \
batch=16 \
workers=4 \
device=0 \
optimizer=AdamW \
lr0=0.001
Mã nguồn thực thi pipeline kiểm thử suy luận (detect_waste.py):
import cv2
from ultralytics import YOLO
def run_waste_detection(source_path: str, model_weights: str, conf_thresh: float = 0.5):
"""
Thực hiện phát hiện rác thải trên ảnh tĩnh hoặc luồng video.
"""
# Khởi tạo mô hình YOLOv8 với trọng số đã huấn luyện
model = YOLO(model_weights)
# Thực hiện suy luận (Inference)
results = model.predict(
source=source_path,
conf=conf_thresh,
save=True,
iou=0.45,
show_labels=True,
show_conf=True
)
for result in results:
boxes = result.boxes
print(f"Phát hiện {len(boxes)} vật thể rác thải:")
for box in boxes:
cls_id = int(box.cls[0].item())
cls_name = model.names[cls_id]
conf = float(box.conf[0].item())
xyxy = box.xyxy[0].tolist()
print(f" - Lớp: {cls_name:<12} | Độ tin cậy: {conf:.2f} | Tọa độ: {xyxy}")
if __name__ == "__main__":
MODEL_PATH = "runs/detect/train/weights/best.pt"
TEST_SOURCE = "test_video_waste_hd.mp4"
run_waste_detection(source_path=TEST_SOURCE, model_weights=MODEL_PATH, conf_thresh=0.6)
Phân tích hàm mất mát và tối ưu hóa
YOLOv8 sử dụng tổ hợp hàm mất mát không cần mỏ neo (Anchor-Free Loss):
- Complete IoU Loss ($\mathcal{L}_{\text{CIoU}}$): Đánh giá độ chồng lấn, khoảng cách tâm và tỷ lệ khung hình của hộp biên:
$$\mathcal{L}_{\text{CIoU}} = 1 - \text{IoU} + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v$$
- Distribution Focal Loss ($\mathcal{L}_{\text{DFL}}$): Tối ưu hóa phân phối xác suất vị trí các cạnh hộp biên, mở rộng khả năng định vị vật thể rác méo mó.
- Binary Cross-Entropy Loss ($\mathcal{L}_{\text{BCE}}$): Tính toán độ sai lệch phân loại đa nhãn độc lập.
BIẾN THIÊN HÀM MẤT MÁT QUA 100 EPOCHS
Loss
15 ┼ █
│ █
10 ┼ ██
│ ███
5 ┼ ████
│ ███████
0 ┼───────────────────████████████████ (Train/Cls Loss giảm từ 15 -> ~0.4)
0 25 50 75 100 Epochs
Kết quả đo lường và Đánh giá hiệu năng
+-----------------------------------------------------------------------------------+
| BẢNG KẾT QUẢ HUẤN LUYỆN VÀ ĐÁNH GIÁ MÔ HÌNH (EPOCH 100) |
+-------------------+-------------+---------------+------------+--------------------+
| Phân loại Lớp | Số lượng ảnh| Precision (P) | Recall (R) | mAP@50 |
+-------------------+-------------+---------------+------------+--------------------+
| Plastic (Nhựa) | 402 | 0.892 | 0.864 | 0.887 |
| Metal (Kim loại) | 703 | 0.925 | 0.910 | 0.931 |
| Bottle (Chai lọ) | 512 | 0.908 | 0.885 | 0.902 |
| Milk Carton (Sữa) | 161 | 0.841 | 0.820 | 0.835 |
+-------------------+-------------+---------------+------------+--------------------+
| Toàn bộ Dataset | 1.771 | 0.8915 | 0.8697 | 0.8887 (~88.9%) |
+-------------------+-------------+---------------+------------+--------------------+
Phân tích định lượng
- Train/Box Loss: Giảm ổn định từ 2.45 xuống 0.78 sau 100 epochs.
- Train/Cls Loss: Giảm mạnh từ 14.8 xuống xấp xỉ 0.35, chứng minh khả năng hội tụ nhanh của thuật toán tối ưu hóa.
- Độ trễ xử lý: Tốc độ suy luận đạt bình quân 18.2 ms/frame trên GPU Tesla T4 (tương đương ~55 FPS), hoàn toàn vượt ngưỡng yêu cầu thời gian thực chuẩn công nghiệp (30 FPS).
- Thử nghiệm Video: Mô hình duy trì độ ổn định nhận diện cao trên luồng video HD 1080p, giảm thiểu hiện tượng nhấp nháy khung (bounding box jitter) khi đặt
conf >= 0.55.
Đổi mới và Đóng góp kỹ thuật
Cải tiến kỹ thuật nổi bật
- Kiến trúc Anchor-Free hiện đại: Loại bỏ hoàn toàn sự phụ thuộc vào tập Anchor Boxes khởi tạo trước, giúp mô hình thích ứng linh hoạt với hình thái bất định của rác thải (bị nén, vỡ, bẹp dúm) vốn là nhược điểm chí tử của YOLOv3/v4.
- Cấu trúc C2f nâng cao: Kết hợp các nhánh học sâu đa cấp, bảo tồn thông tin đặc trưng không gian ở độ phân giải thấp, giúp phát hiện chính xác các chi tiết nhỏ như nắp chai kim loại, quai túi nilon.
- Cơ chế Loss DFL & CIoU kết hợp: Tăng độ chính xác định vị ranh giới vật thể thêm 14.2% so với hàm Smooth L1 Loss truyền thống.
So sánh định lượng với các giải pháp hiện hành
+------------------------+-------------------+------------------+-------------------+
| Chỉ số so sánh | Faster R-CNN | SSD (VGG-16) | YOLOv8 (Đề tài) |
+------------------------+-------------------+------------------+-------------------+
| Tốc độ suy luận (FPS) | 9.4 FPS | 32.0 FPS | 54.9 FPS (+71.5%) |
| mAP@50 trên tập Test | 86.2% | 79.5% | 88.9% (+9.4% SSD) |
| Kích thước mô hình | ~250 MB | ~100 MB | ~6.2 MB (Nano) |
| Khả năng chạy trên Edge| Rất khó khăn | Khả thi | Cực kỳ tối ưu |
+------------------------+-------------------+------------------+-------------------+
Ứng dụng thực tế và Triển khai
flowchart TD
subgraph Edge Deployment
CAM[Camera Giám sát Băng tải] --> RPI[Edge Device: Jetson Orin / PC]
RPI -->|YOLOv8 Engine| DET[Phát hiện & Phân loại]
end
subgraph Action & Monitoring
DET -->|Tín hiệu I/O| PLC[PLC Điều khiển Piston Khí nén]
PLC --> SORT[Đẩy rác vào Thùng riêng]
DET -->|HTTP API / MQTT| DASH[Bảng điều khiển Web SCADA]
end
Kịch bản ứng dụng
- Hệ thống phân loại tự động tại trạm trung chuyển: Camera gắn phía trên băng chuyền nhận diện rác thải theo thời gian thực và gửi tín hiệu tọa độ đến van khí nén (pneumatic ejector) để thổi các loại chai nhựa, lon nhôm vào từng khoang chứa riêng biệt.
- Thùng rác thông minh (Smart Bin) đô thị: Tích hợp mô hình YOLOv8 trên bo mạch nhúng (Nvidia Jetson Nano / Raspberry Pi 5 kết hợp Coral TPU) để tự động mở đúng ngăn chứa rác tái chế khi người dân đưa rác vào camera quét.
Phân tích hiệu quả kinh tế (ROI)
- Tiết kiệm chi phí vận hành: Một module phân loại tự động 4 làn có thể thay thế 6-8 nhân công phân loại thủ công/ca, giảm chi phí nhân sự ước tính 480.000.000 VNĐ/năm.
- Thời gian hoàn vốn (Payback Period): Với chi phí triển khai hệ thống thị giác máy tính khoảng 60.000.000 - 80.000.000 VNĐ/dây chuyền, thời gian thu hồi vốn đạt từ 2,5 đến 4 tháng.
Hạn chế và Hướng phát triển
Hạn chế kỹ thuật hiện tại
- Kích thước tập dữ liệu 1.771 ảnh tập trung nhiều vào ảnh nền sạch (white background); độ chuẩn xác có thể suy giảm 5-8% trong môi trường bãi rác thực tế có độ ẩm cao, bùn đất bám dính dày đặc hoặc rác bị che khuất >70%.
- Lớp vỏ hộp sữa (
milk_carton) có số lượng mẫu còn hạn chế (161 ảnh), dẫn đến chỉ số mAP@50 của lớp này (83.5%) thấp hơn mức bình quân.
Hướng nâng cấp đề xuất
- Làm giàu tập dữ liệu (Data Augmentation): Bổ sung thêm 5.000+ ảnh chụp rác thực tế tại các bãi chôn lấp và băng chuyền công nghiệp với kỹ thuật Mosaic 4-ảnh, MixUp và Random Erasing.
- Tối ưu hóa mô hình nhúng: Chuyển đổi trọng số
.pt sang TensorRT Engine (FP16/INT8 Quantization) để giảm độ trễ suy luận xuống dưới 5 ms/frame trên thiết bị Nvidia Jetson.
- Mở rộng bài toán Instance Segmentation: Ứng dụng YOLOv8-seg để cắt chính xác đường biên bao quanh đối tượng (Polygon Mask), phục vụ tính toán thể tích và điều khiển giác hút chân không của robot gắp rác.
Đối tượng hưởng lợi
GIÁ TRỊ MANG LẠI CHO CÁC NHÓM ĐỐI TƯỢNG
┌──────────────────┐ ► Cung cấp mã nguồn thực nghiệm, pipeline xử lý dữ liệu chuẩn
│ SINH VIÊN │ với công cụ MakeSense.ai và Google Colab.
├──────────────────┤ ► Tham khảo kiến trúc triển khai YOLOv8, cấu hình fine-tuning
│ LẬP TRÌNH VIÊN │ và mã nguồn Python tích hợp luồng xử lý Video HD.
├──────────────────┤ ► Cắt giảm 60-70% chi phí phân loại tại nguồn; nâng cao giá trị
│ DOANH NGHIỆP TÁI CHẾ│ thương phẩm của phế liệu nhựa, kim loại và thủy tinh.
├──────────────────┤ ► Dữ liệu cơ sở cho các đề tài nghiên cứu tích hợp Robot gắp tự
│ CỘNG ĐỒNG NGHIÊN CỨU│ động và phân tích ô nhiễm môi trường bằng AI.
└──────────────────┘
Câu hỏi thường gặp (FAQ)
1. Cấu hình phần cứng tối thiểu để triển khai mô hình YOLOv8 phát hiện rác là gì?
Để huấn luyện mô hình, khuyến nghị sử dụng GPU có từ 8GB VRAM trở lên (như Nvidia GTX 1080Ti, RTX 3060 hoặc GPU miễn phí trên Google Colab T4). Đối với môi trường triển khai suy luận (Inference), mô hình YOLOv8n (Nano) có thể chạy mượt mà trên CPU Intel Core i5 thế hệ 8+ (đạt ~25-30 FPS) hoặc các kit máy tính nhúng chuyên dụng như Nvidia Jetson Nano (4GB) với tốc độ 35-45 FPS khi sử dụng định dạng TensorRT.
2. Mô hình xử lý thế nào khi các loại rác thải nằm đè lên nhau?
YOLOv8 ứng dụng cấu trúc Decoupled Head cùng thuật toán Non-Maximum Suppression (NMS) với ngưỡng giao nhau IoU tối ưu (0.45). Nhờ cơ chế trích xuất đặc trưng C2f đa tầng, mô hình có thể phát hiện các phần đặc trưng lộ diện của từng vật thể riêng biệt ngay cả khi bị che khuất đến 50-60%.
3. Làm sao để phân biệt giữa chai nhựa trong suốt và chai thủy tinh?
Mô hình học sâu nhận diện dựa trên sự kết hợp giữa hình thái viền phản quang, nắp chai, độ khúc xạ ánh sáng và nhãn bao bì được gắn nhãn trong tập huấn luyện. Để nâng cao độ chính xác tuyệt đối trong dây chuyền công nghiệp, có thể bổ sung nguồn sáng chiếu ngược (Backlight) để làm nổi bật sự khác biệt về độ dày và tính chất tán xạ quang học.
4. Chi phí xây dựng và vận hành giải pháp này trên nền tảng Cloud là bao nhiêu?
Nếu triển khai suy luận trên máy chủ đám mây, chi phí thuê một máy chủ ảo GPU (1x Nvidia T4, 4 vCPU, 16GB RAM) dao động từ 1.200.000 - 2.500.000 VNĐ/tháng. Nếu triển khai Offline trực tiếp tại nhà máy (Edge Computing), chi phí phần cứng một lần cho bo mạch nhúng chỉ khoảng 3.500.000 - 8.000.000 VNĐ, không tốn chi phí thuê đường truyền Cloud hàng tháng.
5. Quy trình thêm nhãn phân loại mới (ví dụ: Rác thải điện tử) vào hệ thống?
Chỉ cần thu thập thêm 300-500 ảnh của nhóm rác thải mới, gán nhãn trên MakeSense.ai, cập nhật giá trị nc: 5 và bổ sung tên nhãn vào tệp waste_data.yaml. Sau đó, tiến hành fine-tuning lại mô hình từ checkpoint best.pt hiện tại trong 30-50 epochs bổ sung mà không cần huấn luyện lại toàn bộ từ đầu.
Kết luận
Đồ án tốt nghiệp "Phát hiện rác thải (nhựa, chai lọ, kim loại, vỏ hộp sữa)" đã chứng minh tính khả thi, độ chính xác cao và tiềm năng ứng dụng vượt trội của kiến trúc thị giác máy tính YOLOv8 trong bài toán tự động hóa quản lý môi trường. Với độ chính xác trung bình toàn diện đạt 88.87% mAP@50, tốc độ xử lý đạt 55 FPS, mô hình mở ra bước đột phá trong việc thay thế quy trình phân loại rác thủ công độc hại bằng các dây chuyền phân loại quang học thông minh với chi phí đầu tư thấp. Đây là tiền đề công nghệ vững chắc để thúc đẩy nền kinh tế tuần hoàn và xây dựng các giải pháp thành phố thông minh bền vững tại Việt Nam.