"Product-Oriented Engineering: Focus on Architecture, Efficiency, and User Experience."
Dự án xây dựng hệ thống phân loại 6 loài hoa phổ biến sử dụng kiến trúc MobileNetV2 (Transfer Learning).
Điểm khác biệt của dự án này không nằm ở việc xây dựng một model khổng lồ, mà nằm ở Tư duy Giải quyết Vấn đề (Problem Solving): Làm thế nào để model hoạt động chính xác trên dữ liệu thực tế (ảnh méo, ảnh kém chất lượng) và tối ưu hóa quy trình huấn luyện trên môi trường giới hạn (Google Colab).
Dự án này được thực hiện theo quy trình AI-Assisted Development (Phát triển với sự hỗ trợ của AI).
- Tôi không tập trung vào việc gõ thủ công từng dòng code.
- Tôi tập trung vào việc:
- Kiến trúc hệ thống: Lựa chọn MobileNetV2 vì sự cân bằng giữa tốc độ và độ chính xác.
- Quản lý công nghệ: Phối hợp các công cụ (TensorFlow, OpenCV, Gdown) để tạo ra pipeline mượt mà.
- Xử lý điểm mù (Edge Cases): Phát hiện và xử lý vấn đề ảnh đầu vào bị méo tỷ lệ (Aspect Ratio Distortion).
- Vấn đề (The Pain Point): Các model CNN yêu cầu input vuông (224x224). Phương pháp
resizethông thường sẽ "ép" ảnh chữ nhật thành hình vuông, làm biến dạng đặc trưng của hoa (ví dụ: hoa hướng dương bị bóp dẹt). - Giải pháp của tôi: Viết thuật toán Smart Padding:
- Tính toán tỷ lệ khung hình gốc.
- Resize giữ nguyên tỷ lệ (Aspect Ratio Preservation).
- Tự động thêm viền đen (Padding) vào phần thừa.
- Kết quả: Model nhận diện tốt cả những ảnh Panorama cực đoan (Tỷ lệ 5:1, kích thước 2576x517).
- Vấn đề: Huấn luyện trên Google Colab thường bị nghẽn cổ chai (Bottleneck) khi đọc hàng nghìn file ảnh nhỏ trực tiếp từ Google Drive.
- Giải pháp:
- Sử dụng cơ chế Cloud-to-Local: Tự động tải file nén
.rartừ Cloud về ổ cứng SSD cục bộ của Colab. - Giải nén tại chỗ (Local Unzip) để loại bỏ độ trễ mạng.
- Sử dụng
tf.data.Datasetvới.cache()và.prefetch()để nạp dữ liệu song song vào GPU.
- Sử dụng cơ chế Cloud-to-Local: Tự động tải file nén
- Hiệu quả: Tăng tốc độ huấn luyện gấp ~40 lần so với đọc trực tiếp từ Drive.
- Code được thiết kế để bất kỳ ai cũng chạy được ngay mà không cần cấu hình phức tạp.
- Tự động tải Model và Data thông qua
gdown, loại bỏ bước Mount Drive thủ công phiền phức.
Biểu đồ dưới đây cho thấy quá trình hội tụ của mô hình qua 10 epochs.
- Training Accuracy: ~93%
- Validation Accuracy: ~91%
- Nhận xét: Đường biểu diễn Accuracy của tập Validation bám rất sát tập Training, và Loss giảm đều xuống mức thấp (~0.25). Điều này chứng minh mô hình không bị Overfitting và có khả năng tổng quát hóa tốt trên dữ liệu lạ.
Đây là bài kiểm tra áp lực (Stress Test) để minh chứng hiệu quả của Smart Padding.
📝 Technical Analysis:
- Ảnh gốc: Kích thước 2576 x 517 pixel (Tỷ lệ ~5:1).
- Resize thông thường (Trái): Ảnh bị biến dạng nặng, mất đặc trưng hình học của hoa.
- Smart Padding (Phải): Giữ nguyên tỷ lệ, thêm viền đen.
- Kết quả: Dù vùng thông tin hữu ích chỉ chiếm ~20% (còn lại là 80% viền đen), Model vẫn dự đoán CHÍNH XÁC loài hoa (Black-eyed Susan).
- Độ tin cậy (Confidence): Đạt ~55%. Con số này cao gấp 3 lần so với xác suất ngẫu nhiên (16%), chứng tỏ độ bền bỉ của thuật toán trong điều kiện nhiễu cao.
Flower-Classification-MobileNetV2/
├── Sample_images/ # Ảnh mẫu dùng để test (Đã phân loại sẵn)
│ ├── black_eyed_susan/ # Bao gồm cả ảnh Panorama
│ ├── calendula/
│ └── ...
├── 01_Flower_Training_MobileNetV2.ipynb # Code huấn luyện (Full Pipeline)
├── 02_Flower_Predictor.ipynb # Code dự đoán (Demo với Smart Padding)
├── LICENSE # Giấy phép MIT
└── README.md # Tài liệu dự án
Dự án được thiết kế để chạy trực tiếp trên Google Colab mà không cần cài đặt phức tạp:
-
[Dành cho người xem - Demo nhanh]:
(Sử dụng file này để tải Model có sẵn và test ảnh mẫu ngay lập tức)
-
[Dành cho nhà phát triển - Huấn luyện lại]:
(Sử dụng file này nếu muốn xem toàn bộ quá trình xử lý dữ liệu và huấn luyện model từ đầu)
- Sau khi nhấn nút Open in Colab, chọn menu Runtime -> Run all (hoặc nhấn
Ctrl + F9). - Hệ thống sẽ tự động tải trọng số Model (weights) và các thư viện cần thiết.
- Bạn có thể tải các ảnh trong thư mục
Sample_imagesvề máy để upload lên kiểm thử (bao gồm cả các trường hợp ảnh Panorama áp dụng Smart Padding).
Dự án sử dụng bộ dữ liệu hoa từ Kaggle. Xin gửi lời cảm ơn chân thành đến tác giả vì đã chia sẻ nguồn dữ liệu quý giá này cho cộng đồng nghiên cứu.
- Dataset: Flower Images by Zahra Aghapour
- Original Source: Kaggle
- Tools: TensorFlow, Keras, OpenCV.
- Developer: Bui Tien Phat
- Contact: higo.individual@gmail.com
- Role: AI Engineer / Computer Vision Researcher