Phần 2: Cài đặt và tối ưu hóa YOLOv8n cho Raspberry Pi 5
1. Giới thiệu về YOLOv8 và TensorFlow Lite, 2. Tải mô hình YOLOv8n INT8 từ kho lưu trữ, 3. Hướng dẫn chuyển đổi mô hình sang định dạng TensorFlow Lite, 4. Cài đặt tflite-runtime và cấu hình môi trường, 5. Tối ưu hóa mô hình để chạy trên Raspberry Pi 5, 6. Kiểm tra khả năng nhận diện của mô hình.
Phần 2: Cài đặt và tối ưu hóa YOLOv8n cho Raspberry Pi 5
1. Giới thiệu về YOLOv8 và TensorFlow Lite
YOLOv8 (You Only Look Once version 8) là một trong những mô hình học sâu nổi tiếng nhất cho nhận diện vật thể, được thiết kế để thực hiện nhiệm vụ này một cách nhanh chóng và hiệu quả. Với khả năng phát hiện nhiều đối tượng trong một khung hình, YOLOv8 đã trở thành lựa chọn phổ biến trong các ứng dụng thời gian thực.
TensorFlow Lite (TFLite) là một phiên bản nhẹ của TensorFlow, được tối ưu hóa cho các thiết bị di động và nhúng. TFLite giúp giảm kích thước mô hình và tăng tốc độ thực thi, cho phép chạy các mô hình học sâu trên các thiết bị có tài nguyên hạn chế như Raspberry Pi.
2. Tải mô hình YOLOv8n INT8 từ kho lưu trữ
Trước tiên, bạn cần tải mô hình YOLOv8n INT8 từ kho lưu trữ chính thức. Mô hình này đã được tối ưu hóa cho kiến trúc INT8, giúp tăng tốc độ xử lý mà không làm giảm đáng kể độ chính xác.
git clone https://github.com/ultralytics/yolov8.git
cd yolov8
pip install -r requirements.txt
python export.py --weights yolov8n.pt --img-size 640 --batch-size 1 --include tflite
Sau khi hoàn tất, bạn sẽ có tệp mô hình yolov8n.tflite trong thư mục xuất.
3. Hướng dẫn chuyển đổi mô hình sang định dạng TensorFlow Lite
Để chuyển đổi mô hình YOLOv8 sang định dạng TensorFlow Lite, bạn cần sử dụng công cụ chuyển đổi có sẵn trong thư viện TensorFlow. Quy trình này bao gồm việc tải mô hình đã huấn luyện và sau đó chuyển đổi nó sang định dạng TFLite.
import tensorflow as tf
# Tải mô hình YOLOv8
model = tf.keras.models.load_model('yolov8n.h5')
# Chuyển đổi sang TFLite
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_LATENCY]
tflite_model = converter.convert()
# Lưu mô hình TFLite
with open('yolov8n.tflite', 'wb') as f:
f.write(tflite_model)
4. Cài đặt tflite-runtime và cấu hình môi trường
Để chạy mô hình TFLite trên Raspberry Pi 5, bạn cần cài đặt thư viện tflite-runtime. Thực hiện theo hướng dẫn dưới đây để cài đặt:
pip install tflite-runtime
Đảm bảo rằng bạn đã cài đặt các thư viện cần thiết khác như OpenCV và Flask để hỗ trợ cho quá trình phát triển ứng dụng.
5. Tối ưu hóa mô hình để chạy trên Raspberry Pi 5
Để tối ưu hóa mô hình YOLOv8n cho Raspberry Pi 5, bạn cần thực hiện một số bước sau:
- Giảm kích thước hình ảnh đầu vào: Sử dụng kích thước hình ảnh nhỏ hơn (ví dụ: 320x320) để giảm thời gian xử lý.
- Sử dụng quantization: Điều này đã được thực hiện khi xuất mô hình sang định dạng TFLite.
- Chạy trên CPU: Đảm bảo rằng mô hình được chạy trên CPU thay vì GPU để tiết kiệm năng lượng và tài nguyên.
6. Kiểm tra khả năng nhận diện của mô hình
Sau khi hoàn tất các bước trên, bạn có thể kiểm tra khả năng nhận diện của mô hình bằng cách sử dụng đoạn mã dưới đây:
import cv2
import numpy as np
import tflite_runtime.interpreter as tflite
# Khởi tạo mô hình TFLite
interpreter = tflite.Interpreter(model_path='yolov8n.tflite')
interpreter.allocate_tensors()
# Lấy thông tin về đầu vào và đầu ra
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Khởi tạo camera
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# Tiền xử lý hình ảnh
input_data = cv2.resize(frame, (320, 320))
input_data = np.expand_dims(input_data, axis=0)
# Chạy mô hình
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
# Lấy kết quả
boxes = interpreter.get_tensor(output_details[0]['index'])
classes = interpreter.get_tensor(output_details[1]['index'])
scores = interpreter.get_tensor(output_details[2]['index'])
# Hiển thị kết quả
for i in range(len(scores[0])):
if scores[0][i] > 0.5: # Chỉ hiển thị nếu độ tin cậy lớn hơn 0.5
box = boxes[0][i]
cv2.rectangle(frame, (int(box[1]), int(box[0])), (int(box[3]), int(box[2])), (255, 0, 0), 2)
cv2.imshow('YOLOv8 Real-time Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Lưu ý: Đảm bảo bạn đã kết nối camera với Raspberry Pi và cài đặt driver cần thiết trước khi chạy đoạn mã trên.
Với những bước trên, bạn đã hoàn tất việc cài đặt và tối ưu hóa mô hình YOLOv8n cho Raspberry Pi 5. Bây giờ bạn có thể bắt đầu thực hiện các dự án nhận diện vật thể thời gian thực của riêng mình!
