Phần 3: Phát triển mô hình AI cho phân loại rác
1. Giới thiệu về các mô hình AI có thể sử dụng; 2. Hướng dẫn thu thập và chuẩn bị dữ liệu; 3. Cách tạo và huấn luyện mô hình AI với TensorFlow; 4. Xuất mô hình sang định dạng TensorFlow Lite; 5. Kiểm tra độ chính xác của mô hình; 6. Lưu mô hình và chuẩn bị cho Raspberry Pi.
Phần 3: Phát triển mô hình AI cho phân loại rác
1. Giới thiệu về các mô hình AI có thể sử dụng
Các mô hình AI phổ biến cho bài toán phân loại rác bao gồm:
MobileNetV2 / MobileNetV3: Nhẹ và tối ưu cho thiết bị edge như Raspberry Pi.
EfficientNet-Lite: Độ chính xác cao hơn, vẫn giữ được kích thước nhỏ gọn.
YOLOv8n: Phù hợp cho việc phát hiện nhiều đối tượng trong một khung hình.
TensorFlow Lite INT8: Tối ưu hóa cho hiệu suất chạy trên Raspberry Pi, nhưng cần lưu ý rằng không phải tất cả các mô hình đều có thể được lượng tử hóa sang INT8 mà không mất độ chính xác hoặc cần thêm bước hiệu chỉnh.
2. Hướng dẫn thu thập và chuẩn bị dữ liệu
Để huấn luyện mô hình, cần thu thập dữ liệu hình ảnh của các loại rác khác nhau. Bạn có thể sử dụng các nguồn dữ liệu công khai như TACO hoặc tự chụp ảnh trong môi trường kiểm soát.
Tip: Đảm bảo ảnh được gán nhãn chính xác và nhất quán để tăng độ chính xác của mô hình.
Chia dữ liệu thành các tập huấn luyện, xác thực và kiểm tra với tỷ lệ 70:15:15. Tập huấn luyện dùng để huấn luyện mô hình, tập xác thực để điều chỉnh tham số, và tập kiểm tra để đánh giá độ chính xác cuối cùng của mô hình.
3. Cách tạo và huấn luyện mô hình AI với TensorFlow
Sử dụng TensorFlow để tạo và huấn luyện mô hình:
import tensorflow as tf
from tensorflow.keras import layers, models
# Tạo mô hình
model = models.Sequential([
layers.Input(shape=(224, 224, 3)),
layers.Conv2D(32, (3, 3), activation='relu'),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(4, activation='softmax') # 4 nhóm rác
])
# Biên dịch mô hình
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Huấn luyện mô hình
# Lưu ý: train_data, train_labels, val_data, val_labels cần được tiền xử lý và chia thành các lô dữ liệu
model.fit(train_data, train_labels, epochs=10, validation_data=(val_data, val_labels))
4. Xuất mô hình sang định dạng TensorFlow Lite
Sau khi huấn luyện, xuất mô hình sang định dạng TensorFlow Lite để sử dụng trên Raspberry Pi:
# Xuất mô hình
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# Lưu mô hình
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
5. Kiểm tra độ chính xác của mô hình
Đánh giá độ chính xác của mô hình bằng cách sử dụng tập dữ liệu kiểm tra:
test_loss, test_acc = model.evaluate(test_data, test_labels)
print(f"Độ chính xác: {test_acc * 100:.2f}%")
6. Lưu mô hình và chuẩn bị cho Raspberry Pi
Sau khi kiểm tra, lưu mô hình đã được chuyển đổi sang định dạng TensorFlow Lite và chuyển nó vào Raspberry Pi. Sử dụng thư viện TensorFlow Lite để chạy mô hình trên thiết bị. Đối với tăng tốc phần cứng như Hailo-8L, cần cài đặt SDK của nhà cung cấp và sử dụng API chạy mô hình của họ, không chỉ đơn thuần là TensorFlow Lite.
Cảnh báo: Đảm bảo Raspberry Pi có đủ tài nguyên để chạy mô hình AI một cách hiệu quả. Nên sử dụng tflite_runtime thay vì TensorFlow đầy đủ do hạn chế về hiệu suất và bộ nhớ.