Giới thiệu dự án

Trong bối cảnh chuyển đổi số của ngành nông nghiệp và chuỗi cung ứng thực phẩm toàn cầu, việc tự động hóa khâu kiểm soát chất lượng đóng vai trò sống còn. Theo báo cáo của Tổ chức Lương thực và Nông nghiệp Liên Hợp Quốc (FAO), tỷ lệ thất thoát trái cây sau thu hoạch do phân loại chậm trễ và bảo quản không đúng cách dao động từ 20% đến 40% tại các nước đang phát triển. Phương thức phân loại thủ công truyền thống bộc lộ nhiều điểm nghẽn: phụ thuộc lớn vào kinh nghiệm chủ quan của nhân công, tốc độ xử lý thấp (trung bình 1-2 quả/giây đối với công nhân lành nghề), chi phí vận hành tăng cao và dễ dẫn đến sai sót khi xử lý khối lượng lớn tại các vựa nông sản hoặc hệ thống siêu thị.

Đồ án tốt nghiệp "Phát hiện loại trái cây (Cam, Táo, Lê, Đào, Xoài, Chuối, Nho, Ổi, Dưa hấu...)" của sinh viên Nguyễn Tuấn Hùng (chuyên ngành Công nghệ Thông tin, Trường Đại học Quản lý và Công nghệ Hải Phòng, dưới sự hướng dẫn của TS. Hồ Thị Hương Thơm) đã giải quyết trực tiếp bài toán này thông qua việc ứng dụng mô hình thị giác máy tính tiên tiến YOLOv8.

graph LR
    A[Thu thập dữ liệu 7 loại quả] --> B[Gán nhãn & Augmentation qua Roboflow]
    B --> C[Huấn luyện mô hình YOLOv8 Anchor-Free]
    C --> D[Tối ưu hóa tham số Hyperparameters]
    D --> E[Inference thời gian thực trên Ảnh & Video]
    E --> F[Tích hợp hệ thống phân loại tự động]

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

  1. Xây dựng bộ dữ liệu đa dạng: Thu thập, làm sạch và gán nhãn tập dữ liệu gồm 7 nhóm trái cây phổ biến với tổng số 6.759 hình ảnh chất lượng cao.
  2. Cấu hình và tối ưu hóa mô hình học sâu: Triển khai kiến trúc YOLOv8 (You Only Look Once phiên bản 8) với cơ chế phát hiện không neo (Anchor-free) để đạt sự cân bằng giữa độ chính xác và độ trễ suy luận.
  3. Phát triển ứng dụng thực nghiệm: Xây dựng pipeline xử lý hình ảnh tĩnh và luồng video thời gian thực phục vụ bài toán nhận diện đa đối tượng trong môi trường ánh sáng phức tạp.
  4. Đánh giá benchmark định lượng: Đo lường hiệu năng thông qua các chỉ số Precision, Recall, mAP@0.5 và mAP@0.5:0.95.

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

  • Phạm vi đối tượng: Tập trung vào 7 lớp đối tượng trái cây nhiệt đới và ôn đới (Cam, Chuối, Nho, Dưa hấu, Xoài, Ổi, Táo).
  • Môi trường hoạt động: Hệ thống được tối ưu hóa cho điều kiện ánh sáng tự nhiên và ánh sáng nhân tạo trong nhà xưởng/siêu thị; xử lý đối tượng đơn lẻ hoặc cụm trái cây có hiện tượng chồng lấn (occlusion) ở mức độ vừa phải.

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

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

Trước khi chọn lựa mạng nơ-ron tích chập một giai đoạn (One-Stage Detector), đồ án đã khảo sát các hướng tiếp cận chính trong thị giác máy tính:

Tiêu chí Phương pháp truyền thống (HOG + SVM) Mạng hai giai đoạn (Faster R-CNN) Mạng một giai đoạn (YOLOv8)
Cơ chế trích xuất Gradient định hướng cục bộ thủ công Region Proposal Network (RPN) + CNN Backbone C2f + Detection Head không neo
Tốc độ suy luận (FPS) 5 - 12 FPS (Chậm) 10 - 18 FPS (Không đạt thời gian thực) 45 - 85 FPS (Thời gian thực mượt mà)
Độ chính xác (mAP@0.5) 40% - 55% 85% - 90% 88% - 94%
Xử lý chồng lấn Rất kém Tốt Rất tốt nhờ Loss CIoU & DFL
Tài nguyên phần cứng Thấp (chỉ cần CPU) Cao (Yêu cầu GPU dung lượng VRAM lớn) Linh hoạt (Có các bản Nano, Small đến Extra Large)

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

  • Must Have (Bắt buộc): Nhận diện chính xác 7 loại trái cây; vẽ bounding box chuẩn xác; phân loại thời gian thực trên video với độ trễ < 35ms.
  • Should Have (Nên có): Tăng cường dữ liệu (Data Augmentation) đa dạng (Mosaic, Flip, Color Jitter); giao diện GUI hiển thị trực quan tỷ lệ tin cậy (Confidence score).
  • Could Have (Có thể có): Khả năng xuất tọa độ bounding box qua cổng API cho cánh tay robot phân loại.
  • Won't Have (Chưa thực hiện): Ước lượng khối lượng quả và phát hiện vết nứt vi mô bên trong vỏ.

Thiết kế kiến trúc hệ thống

Kiến trúc triển khai gồm 3 khối module chính: Backbone, Neck, và Head.

flowchart TD
    Input[Ảnh đầu vào 640x640x3] --> Backbone[Backbone: Modified CSPDarknet với các khối C2f]
    Backbone --> SPPF[Spatial Pyramid Pooling - Fast SPPF]
    SPPF --> Neck[Neck: PAN-FPN Feature Fusion]
    Neck --> Head[Anchor-Free Decoupled Head]
    Head --> Loss[Hàm mất mát: CIoU + DFL + BCE]
    Loss --> NMS[Non-Maximum Suppression]
    NMS --> Output[Tọa độ Bounding Box + Tên loại quả + Confidence]

Công nghệ và Thư viện sử dụng

  • Ngôn ngữ lập trình: Python 3.10+
  • Framework học sâu: PyTorch 2.1.0, Ultralytics YOLOv8 (v8.1.0)
  • Xử lý ảnh: OpenCV 4.8.0, PIL (Pillow 10.0.0)
  • Môi trường phát triển: PyCharm Professional, Google Colaboratory (GPU NVIDIA Tesla T4 16GB VRAM)
  • Gán nhãn & Quản lý dữ liệu: Roboflow Platform (Hỗ trợ chuẩn định dạng YOLO Darknet/PyTorch TXT)

Implementation và kết quả

Quy trình chuẩn bị dữ liệu (Data Pipeline)

Tập dữ liệu được phân chia cân đối giữa các lớp nhằm tránh hiện tượng chệch mô hình (bias):

Loại trái cây Tên lớp (Class Name) Số lượng ảnh gốc Số lượng sau Augmentation
Táo apple 1.189 3.567
Cam orange 1.087 3.261
Chuối banana 985 2.955
Xoài mango 935 2.805
Dưa hấu watermelon 878 2.634
Nho grape 875 2.625
Ổi guava 810 2.430
Tổng cộng 7 Classes 6.759 20.277

Bộ dữ liệu được phân chia theo tỷ lệ tiêu chuẩn: 70% Training, 20% Validation, và 10% Testing.

Triển khai mã nguồn huấn luyện

Mã nguồn sử dụng API chính thức từ thư viện ultralytics kết hợp điều chỉnh các siêu tham số (hyperparameters):

import os
from ultralytics import YOLO

def train_fruit_detector():
    # 1. Khởi tạo mô hình pre-trained YOLOv8s (Small)
    model = YOLO('yolov8s.pt')
    
    # 2. Cấu hình tham số huấn luyện
    training_args = {
        'data': 'data/fruit_dataset.yaml',
        'epochs': 100,
        'imgsz': 640,
        'batch': 16,
        'workers': 4,
        'optimizer': 'AdamW',
        'lr0': 0.001,
        'lrf': 0.01,
        'momentum': 0.937,
        'weight_decay': 0.0005,
        'warmup_epochs': 3.0,
        'mosaic': 1.0,           # Kỹ thuật ghép 4 ảnh tăng cường bối cảnh
        'mixup': 0.15,          # Pha trộn ảnh tăng tính khái quát
        'device': 0,             # Chạy trên GPU 0 (Tesla T4)
        'project': 'runs/train',
        'name': 'fruit_yolov8s_exp1'
    }
    
    # 3. Tiến hành huấn luyện
    results = model.train(**training_args)
    
    # 4. Đánh giá mô hình trên tập kiểm thử độc lập
    metrics = model.val(split='test')
    print(f"mAP@0.5: {metrics.box.map50:.4f}")
    print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")

if __name__ == '__main__':
    train_fruit_detector()

Pipeline suy luận trên luồng Video thực tế

import cv2
from ultralytics import YOLO

def run_video_inference(video_source=0):
    # Load model đã được fine-tune tốt nhất
    model = YOLO('runs/train/fruit_yolov8s_exp1/weights/best.pt')
    cap = cv2.VideoCapture(video_source)
    
    while cap.isOpened():
        success, frame = cap.read()
        if not success:
            break
            
        # Inference với ngưỡng tin cậy 0.5 và IOU threshold 0.45
        results = model.predict(source=frame, conf=0.5, iou=0.45, verbose=False)
        
        # Render kết quả trực tiếp lên khung hình
        annotated_frame = results[0].plot()
        
        cv2.imshow("Fruit Detection System - YOLOv8", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
            
    cap.release()
    cv2.destroyAllWindows()

Đánh giá định lượng kết quả thực nghiệm

Mô hình được thử nghiệm qua các mốc Epoch khác nhau để đánh giá sự hội tụ của hàm mất mát và độ chính xác:

Mốc thử nghiệm Precision (P) Recall (R) mAP@0.5 mAP@0.5:0.95 Thời gian huấn luyện (Tesla T4)
Epoch = 30 0.812 0.764 0.795 0.542 ~ 42 phút
Epoch = 50 0.884 0.831 0.867 0.628 ~ 1 giờ 10 phút
Epoch = 100 0.936 0.912 0.928 0.715 ~ 2 giờ 18 phút
Epoch = 150 0.938 0.915 0.930 0.718 ~ 3 giờ 25 phút

[!NOTE] Kết quả từ Epoch 100 cho thấy mô hình đạt điểm bão hòa tối ưu. Sự gia tăng mAP từ Epoch 100 lên 150 chỉ đạt 0.2% nhưng tốn thêm hơn 1 giờ tính toán, do đó trọng số ở Epoch 100 được chọn làm phiên bản triển khai chính thức.

pie title Tỷ lệ nhận diện chính xác theo từng lớp quả tại Epoch 100
    "Táo (95.2%)" : 95.2
    "Dưa hấu (94.8%)" : 94.8
    "Chuối (93.5%)" : 93.5
    "Cam (92.7%)" : 92.7
    "Xoài (91.4%)" : 91.4
    "Nho (91.2%)" : 91.2
    "Ổi (90.8%)" : 90.8

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

  1. Ứng dụng cấu trúc Decoupled Head không neo (Anchor-Free): Khác với YOLOv5 hoặc YOLOv7 sử dụng các hộp neo cố định (Priors), YOLOv8 dự đoán trực tiếp tọa độ tâm và khoảng cách tới 4 cạnh của vật thể. Cải tiến này giúp tốc độ xử lý Non-Maximum Suppression (NMS) tăng 22%, đồng thời giảm tỷ lệ gán nhãn sai đối với các chùm quả phức tạp như Nho hoặc Chuối.
  2. Tối ưu hóa hàm mất mát kết hợp: Sử dụng sự kết hợp giữa CIoU (Complete Intersection over Union)DFL (Distribution Focal Loss) cho nhánh hồi quy tọa độ (Bounding Box Regression), cùng BCE (Binary Cross-Entropy) cho nhánh phân loại: $$\mathcal{L}{total} = \lambda{box} \mathcal{L}{CIoU} + \lambda{cls} \mathcal{L}{BCE} + \lambda{dfl} \mathcal{L}_{DFL}$$ Giúp mô hình xác định biên bao chính xác ngay cả khi quả bị khuất một phần (Occlusion rate lên tới 40%).
  3. Hiệu năng vượt trội so với các giải pháp tiền nhiệm:
    • Tăng 14.2% mAP so với phương pháp HOG + SVM truyền thống.
    • Tốc độ phản hồi đạt 58.5 FPS trên GPU tầm trung (nhanh gấp 3.2 lần so với Faster R-CNN).

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

graph TD
    subgraph Thu Thập & Xử Lý
        Cam[Camera Công Nghiệp / Webcam] --> Stream[RTSP / USB Video Stream]
        Stream --> Edge[Thiết bị Edge: Jetson Orin / PC Công Nghiệp]
    end
    subgraph Phân Tích & Điều Khiển
        Edge --> YOLO[YOLOv8 Inference Engine]
        YOLO --> Decision{Phân loại thành công?}
        Decision -- Có --> PLC[Gửi tín hiệu Modbus/TCP tới PLC]
        Decision -- Không --> Reject[Đẩy vào khay kiểm tra lại]
        PLC --> Actuator[Tay gắp khí nén / Cần gạt phân luồng]
    end

Kịch bản ứng dụng (Use Cases)

  • Hệ thống phân loại nông sản tự động tại nhà đóng gói: Tích hợp camera gắn trên băng chuyền vận tốc 0.5 m/s, tự động nhận diện và kích hoạt cần gạt khí nén để phân luồng trái cây vào thùng tương ứng.
  • Hệ thống thanh toán tự động (Smart Self-Checkout) tại siêu thị: Camera nhận diện loại quả khi khách hàng đặt lên bàn cân, tự động tính tiền mà không cần quét mã vạch thủ công.
  • Robot thu hoạch thông minh: Gắn module thị giác máy tính lên xe tự hành (AGV) giúp xác định vị trí quả chín trong nông trại.

Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis & ROI)

  • Chi phí đầu tư: Khoảng 35 - 50 triệu VNĐ cho một trạm kiểm soát (Bao gồm Camera công nghiệp, máy tính mini nhúng NVIDIA Jetson Orin Nano, hệ thống cơ khí gạt phân loại).
  • Lợi ích kinh tế: Thay thế 2 nhân công phân loại mỗi ca; giảm tỷ lệ sót quả hỏng xuống dưới 3%; thời gian hoàn vốn đầu tư (ROI) ước tính chỉ từ 4 đến 6 tháng.

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

Hạn chế kỹ thuật

  • Hiện tượng nhầm lẫn giữa các lớp có đặc điểm tương đồng: Trái ổi xanh bóng và xoài non xanh có hình dạng bầu dục gần giống nhau đôi khi bị gán nhãn chéo khi góc quay bị thiếu sáng (Tỷ lệ False Positive đạt ~4.8%).
  • Phụ thuộc vào độ bao phủ của góc chụp: Trường hợp quả bị che khuất vượt quá 70% diện tích bề mặt, mô hình gặp khó khăn trong việc nhận diện điểm tâm đối tượng.

Hướng phát triển trong tương lai

  • Tích hợp kỹ thuật Instance Segmentation (YOLOv8-seg) để tách chính xác đường viền quả, phục vụ tính toán thể tích và phát hiện dị tật hình thái.
  • Tối ưu hóa mô hình sang định dạng TensorRT hoặc OpenVINO để triển khai trên các vi điều khiển giá rẻ như Raspberry Pi 5 hoặc camera thông minh AI-on-Chip.
  • Kết hợp cảm biến quang phổ (Hyperspectral Imaging) để kiểm tra độ ngọt (Brix) và chất lượng thịt quả bên trong.

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

mindmap
  root((Hệ thống Nhận diện Trái cây))
    Sinh viên & Nghiên cứu sinh
      Bộ dữ liệu mẫu chuẩn hóa
      Mã nguồn tham khảo hoàn chỉnh
      Kinh nghiệm xử lý Overfitting
    Kỹ sư AI & Developer
      Pipeline triển khai YOLOv8
      Kỹ thuật tối ưu hóa Inference
      Mô hình tích hợp OpenCV
    Chủ vựa & Doanh nghiệp
      Cắt giảm 60% chi phí nhân công
      Tăng tốc độ đóng gói gấp 3 lần
      Chuẩn hóa chất lượng đầu ra
  • Sinh viên & Nghiên cứu sinh: Tiếp cận mã nguồn mẫu chuẩn hóa về Computer Vision, hiểu rõ quy trình từ tiền xử lý dữ liệu đến fine-tune siêu tham số.
  • Kỹ sư AI & Lập trình viên: Tận dụng kiến trúc Pipeline suy luận thời gian thực để tích hợp vào các hệ sinh thái IoT công nghiệp hoặc ứng dụng di động.
  • Doanh nghiệp & Hộ sản xuất: Có giải pháp khả thi về mặt chi phí để tự động hóa dây chuyền đóng gói, nâng cao năng lực cạnh tranh nông sản xuất khẩu.

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

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

Để chạy suy luận (Inference) thời gian thực ở độ phân giải 640x640:

  • Môi trường Edge/GPU: NVIDIA Jetson Nano 4GB (đạt ~18-25 FPS với bản YOLOv8n) hoặc máy tính có card đồ họa từ GTX 1050 trở lên (đạt > 50 FPS).
  • Môi trường thuần CPU: CPU Intel Core i5 thế hệ 8 trở lên có thể đạt 12-20 FPS khi tối ưu hóa qua OpenVINO/ONNX Runtime.

2. Mô hình xử lý thế nào khi các quả nằm đè lên nhau thành chùm?

Nhờ cơ chế Decoupled Head kết hợp thuật toán Non-Maximum Suppression (NMS) với ngưỡng IoU = 0.45 và hàm mất mát CIoU, mô hình có khả năng phân tách ranh giới các quả nằm sát nhau hoặc đè lên nhau (như chùm nho, buồng chuối) tốt hơn 28% so với kiến trúc Anchor-based cũ.

3. Làm sao để mở rộng hệ thống sang nhận diện các loại quả mới (ví dụ: Thanh long, Sầu riêng)?

Chỉ cần thu thập thêm 300 - 500 hình ảnh của loại quả mới, gán nhãn bounding box, cập nhật file fruit_dataset.yaml và tiến hành kỹ thuật Transfer Learning (đóng băng các lớp Backbone đầu và chỉ huấn luyện lại Head) trong khoảng 30 - 50 Epochs.

4. Hệ thống có hoạt động tốt trong điều kiện ban đêm hoặc nhà kho tối không?

Mô hình đã được huấn luyện với các kỹ thuật Augmentation đổi màu (HSV Hue/Saturation) và tăng giảm độ tương phản giả lập. Tuy nhiên, để đảm bảo độ chính xác trên 90% trong thực tế, trạm camera cần được trang bị dải đèn LED chiếu sáng vòng tròn (Ring Light) với độ rọi tối thiểu 300 Lux.

5. Chi phí bản quyền phần mềm để vận hành hệ thống là bao nhiêu?

Hệ thống được xây dựng hoàn toàn trên nền tảng mã nguồn mở (Python, PyTorch, OpenCV, kiến trúc YOLOv8 mã nguồn mở cho mục đích học thuật và nghiên cứu), giúp tiết kiệm 100% chi phí bản quyền phần mềm so với các giải pháp thị giác máy tính thương mại độc quyền.


Kết luận

Đồ án "Phát hiện loại trái cây" của sinh viên Nguyễn Tuấn Hùng đã chứng minh tính hiệu quả và tiềm năng ứng dụng to lớn của mạng nơ-ron tích chập YOLOv8 trong lĩnh vực nông nghiệp thông minh. Bằng cách kết hợp giữa tập dữ liệu đa dạng 6.759 mẫu ảnh với kiến trúc phát hiện không neo tiên tiến, hệ thống đạt độ chính xác ấn tượng mAP@0.5 đạt 92.8% và tốc độ xử lý thời gian thực > 55 FPS.

Công trình không chỉ hoàn thành xuất sắc các yêu cầu học thuật của một khóa luận tốt nghiệp ngành Công nghệ Thông tin mà còn mở ra hướng phát triển rõ ràng cho việc thương mại hóa các hệ thống phân loại nông sản tự động, góp phần thúc đẩy hiện đại hóa ngành nông nghiệp công nghệ cao tại Việt Nam.