Orange Pi 3B, như các bạn đã biết, là một sản phẩm nâng cấp mới của dòng Orange Pi 3 với việc sử dụng chip RK3566 mới nhất 4 lõi Cortex-A55, RAM lên tới 8GB và Wifi5 + BT5 đã khiến cho bo mạch này trở thành một trong những bo mạch có giá tiền hợp lý nhưng lại có cấu hình tốt nhất hiện nay. Tuy nhiên, còn một điểm nữa mà tôi chắc chắn rằng nhiều người cũng chưa biết là chip RK3566 còn tích hợp thêm NPU 0.8Tops@INT8 trong SoC này và khiến nó trở thành bo mạch chạy AI giá rẻ nhất trên thị trường hiện nay.
NPU của Orange Pi 3B là NPU tích hợp trong chip RK3655, với giá trị là 0.8TOPS@INT8, hỗ trợ đầy đủ các các kiến trúc model phổ biến trong AI hiện nay là Caffe/TensorFlow/TFLite/ONNX/PyTorch/Keras/Darknet , bằng cách chuyển đổi (convert) sang model riêng của Rockchip gọi là RKNN.
“TOPS” là viết tắt của “Trillion Operations Per Second,” và nó đo lường khả năng tính toán của một Neural Processing Unit (NPU) hoặc một bộ vi xử lý (CPU) trong việc thực hiện các phép tính liên quan đến mạng nơ-ron sâu (deep neural network). TOPS là một đơn vị đo lường hiệu năng tính toán cho các mạng nơ-ron sâu vì chúng thường có số lượng phép tính cực kỳ lớn.
Khi một NPU có nhiều TOPS, nó có khả năng thực hiện nhiều phép tính nhanh hơn, cho phép xử lý và phân loại dữ liệu hình ảnh hoặc âm thanh nhanh chóng hơn. Ví dụ, trong lĩnh vực trí tuệ nhân tạo và thị giác máy tính, một NPU có nhiều TOPS có thể xử lý các tác vụ như nhận dạng đối tượng, phát hiện khuôn mặt, hay dự đoán vị trí đối tượng trong thời gian thực với hiệu suất cao.
Nếu Orange Pi 5 có tới 6TOPS trong NPU thì có thể bạn sẽ nghĩ rằng 0.8TOPS của Orange Pi 3B là hơi ít. Tuy nhiên, cần lưu ý rằng việc chỉ sử dụng TOPS để so sánh hiệu suất giữa các NPU không phản ánh hoàn toàn sức mạnh thực sự của một NPU, và các yếu tố khác như kiến trúc, bộ nhớ, và phần mềm cũng quan trọng trong việc đánh giá hiệu suất tổng thể của một hệ thống thị giác máy tính hoặc trí tuệ nhân tạo.
Trong bài viết hôm nay, tôi sẽ hướng dẫn các bạn sử dụng Orange Pi 3B trong thị giác máy tính bằng một đoạn code mẫu sử dụng RKNN-Toolkit và mã nguồn mở YOLOv5
YOLO là gì?
YOLO là viết tắt của “You Only Look Once,” và đó là một mô hình mạng nơ-ron sâu (deep neural network) được sử dụng để nhận dạng đối tượng trong hình ảnh và video. Mô hình YOLO đã trở nên phổ biến trong lĩnh vực thị giác máy tính và thị giác máy tính sâu rộng, như trong các ứng dụng như giám sát an ninh, xe tự lái, phân loại đối tượng, và nhiều ứng dụng khác.
Một trong những điểm mạnh của YOLO so với các phương pháp truyền thống là khả năng thực hiện phát hiện đối tượng và phân loại đối tượng trong một lần duy nhất (You Only Look Once), thay vì phải thực hiện nhiều lần quét ảnh và phân loại đối tượng. Điều này làm cho YOLO nhanh chóng và hiệu quả, và nó thường được sử dụng trong các ứng dụng thời gian thực.
YOLO sử dụng một mạng nơ-ron sâu để chia hình ảnh thành một lưới ô vuông và sau đó dự đoán các hộp giới hạn (bounding boxes) và các nhãn (labels) cho các đối tượng có trong từng ô vuông. Mô hình này sử dụng một hàm mất mát (loss function) để cải thiện việc dự đoán hộp giới hạn và nhãn sao cho chúng thật chính xác.
Với phiên bản và biến thể khác nhau của YOLO đã phát triển theo thời gian, YOLO đã trở thành một công cụ mạnh mẽ cho việc nhận dạng đối tượng trong thời gian thực và nhiều ứng dụng trong thị giác máy tính. Hiện tại YOLO đã phát triển tới v8, tuy nhiên tốc độ của YOLOv5 cũng đã là khá đáng kể rồi.
Các nguồn thông tin tham khảo
- https://github.com/ultralytics/yolov5
- https://github.com/rockchip-linux/rknn-toolkit2
- https://github.com/airockchip/rknn_model_zoo
- https://github.com/leafqycc/rknn-multi-threaded
Bắt đầu cài đặt
Bước 1: Đầu tiên bạn cần cài hệ điều hành (OS) cho Orange Pi, bạn có thể cài Ubuntu/Debian của hãng, hay kể cả Raspberry-pi-OS cho Orange Pi 3B cũng được. Hoặc bạn có thể cài các bản build của Armbian cho Orange Pi 3B nhưng các bản build này hiện tại chưa có maintainer nên cũng chưa ổn định. Tôi khuyến cáo cài HDH của hãng. Ngoài ra, Orange Pi 3B còn cài được Orange Pi OS (Arch), đây là 1 HDH trên nền Arch Linux, tôi không có nhiều kinh nghiệm trong bản Linux này nên cũng không dùng.
- Ubuntu: https://drive.google.com/drive/folders/1hWsiaEmjiRFjGMrOw6Z3UoyxGz97Tgve
- Debian: https://drive.google.com/drive/folders/1-mcXPDx1QpE9ZI8oTivmJ1Nd5HfU5nFv
Về cách cài hệ điều hành, tôi cũng không hướng dẫn lại nữa vì đã có quá nhiều bài hướng dẫn cài, cài trên thẻ nhớ SD, hay trên eMMC hay kể cả trên ổ cứng NVME gắn ổ M2 của Orange Pi 3B đều được. Cài trên eMMC thì tốc độ nhanh hơn trên NVME và đương nhiên tốc độ trên thẻ SD là chậm nhất và thậm chí còn dễ hỏng
Bước 2: Cài đặt các phần mềm cần thiết
Chạy cập nhật cho hệ điều hành của bạn bằng câu lệnh sudo apt update && sudo apt upgrade -y
Tiếp đến có thể HDH của bạn sẽ có 2 bản Python, chỉ dùng Python3 bằng cách cài như sau sudo apt install python-is-python3
Cài Python PIP: sudo apt install python3-pip python3-dev
Cài các phần mềm khác phòng khi HDH bạn chưa có sudo apt install gcc build-essential
Bước 3: Chuẩn bị cho việc test nhận diện đồ vật (object-detection)
- Bạn cần Camera nhận diện, hãy sử dụng 1 webcam có chất lượng tốt. Nếu như Orange Pi 5 Plus bạn có thể sử dụng hẳn 1 camera chất lượng cao cho đầu vào HDMI IN lên tới 4K, thì Orange Pi 3B bạn chỉ có thể dùng webcam, hãy chọn 1 webcam chất lượng tốt.
- Một đường mạng internet tốt để tải về mã nguồn và các thư viện python, việc này rất cần thiết vì khi cài các phần mềm python, chúng sẽ tự tải về các thư viện phụ thuộc (dependencies). Tôi đã nhiều lần bị cài không được vì không kết nối được tới máy chủ thư viện để tải về, mà cứ nghĩ rằng mình sai ở đâu đó. Trên thực tế, chỉ là đường truyền quá kém 🙁
- Màn hình bàn phím thao tac trên Orange Pi 3B, bạn không thể chạy việc này qua màn hình câu lệnh CLI, vì vậy hãy cắm màn hình vào HDMI trên Orange Pi 3B, thêm bàn phím và sử dụng nó cho các thao tác sau này. Bạn cũng có thể VNC vào Orange Pi 3B bằng cách cài X11VNC trên Orange Pi, cách nào thuận tiện thì bạn sử dụng.
Mở terminal trên hệ điều hành, tải về mã nguồn này trên github
git clone https://github.com/thanhtantran/rknn-single-thread-3566
Trên thư mục này đã có đủ công cụ cho bạn. Chúng ta sẽ sử dụng thư viện RKNN Toolkit Lite trên github này của Rockchip https://github.com/rockchip-linux/rknn-toolkit2
Trên thư mục rknn-single-thread-3566
bạn cài RKNN Toolkit Lite bằng câu lệnh sau
pip install rknn_toolkit_lite2-1.5.0-cp39-cp39-linux_aarch64.whl
Tiếp đó cài openCV trên Python
pip install opencv-python
Trong quá trình cài, PIP sẽ cài luôn cho bạn các thư viện cần thiết như numpy, psutils hay ruamel. Nếu không chắc bạn có thể cài riêng lẻ.
Trên github của tôi, cũng đã có sẵn 1 model tạo sẽ và convert sang dạng rknn là yolov5s.rknn. Việc trainning model và convert model là một quá trình phức tạp khác, chúng ta sẽ nghiên cứu sau.
Tiếp đến, tìm xem Webcam của bạn được cài trên HDH nằm ở đâu, thông thường nó sẽ là /dev/video0 hoặc /dev/video1. Bạn chỉ cần sửa file main.py bằng trình soạn thảo nào đó (ví dụ nano) rồi sửa dòng cap = cv2.VideoCapture(0)
thành số tương ứng.
Cuối cùng hãy test thử RKNN Toolkit Lite và model bằng lệnh
python deploy.py
Nếu kết quả trả ra ảnh như này, là thư viện và model đã được cài đặt thành công
Việc tiếp theo đơn giản hơn, chạy file nhận biết đồ vật thời gian thực. Quá trình này trên máy tính gọi là Inference – hay gọi là suy đoán.
python camera.py
Bạn sẽ thấy cửa sổ camera hiện lên và Orange Pi 3B đang nhận diện các đồ vật trong camera theo thời gian thực lên tới 28 frames / giây theo thư viện đã training sẵn.
Bạn băn khoăn rằng liệu Orange Pi 3B có chạy quá nóng như các sản phẩm máy tính Pi khác không có NPU không? hãy xem thử bằng 1 cửa sổ CLI khác với lệnh htop
, CPU chỉ chạy khoảng đâu đó 20%.
Thế còn NPU? Tôi đã để sẵn file rkcat.sh trong thư mục mã nguồn, chạy trên 1 cửa sổ CLI khác lệnh bash rkcat.sh
, bạn sẽ thấy rằng Orange Pi 3B chỉ chạy đâu đó tầm 50-60% NPU của nó.
Bạn muốn tăng mức độ sử dụng lên? Trong file camera.py có 2 hằng số là
OBJ_THRESH = 0.25
NMS_THRESH = 0.45
Chỉnh sửa các con số này để xem điều kì diệu nào xảy ra 🙂
Video demo của tôi: