Triển khai model Deep Learning trên Edge Computing phần I

Chào mừng các bạn đến với blog hướng dẫn triển khai model Deep Learning trên Edge Computing phần I. Trong bài này, mình sẽ hướng dẫn các bạn về các khái niệm và những bước cần thiết thực hiện được tiêu đề của Blog. Bắt đầu thôi nào.

Edge Computing

   Chúng ta đã nghe khá nhiều về Cloud Computing. Đó là hình thức tập trung dữ liệu và tính toán trên các Cloud. Tuy nhiên, với lượng dữ liệu khổng lồ và bùng nổ như hiện nay, việc xây dựng các Cloud đủ mạnh để xử lý được dữ liệu trong thời gian thực ngày càng khó khẳn và phức tạp hơn. Một khái niệm mới được đưa ra để hỗ trợ cho Cloud Computing và đó chính là Edge Computing. Edge Computing hay tính toán cạnh (hoặc tính toán biên) là việc dữ liệu sẽ được xử lý một phần ngay tại chỗ hoặc trong các cụm nhỏ trước khi được tập trung tại các trung tâm lớn hơn. Hãy xem hình dưới đây để hiểu về cách Edge Computing hoạt động.

Image result for edge computing architecture
Minh họa Edge Computing (nguồn).

Một xu hướng mới hiện nay trong việc áp dụng Deep Learning vào thực tế là triển khai các model Deep Learning trên các thiết bị Edge Computing. Một ví dụ đơn giản như sau: Trước kia, để phát hiện các đối tượng qua hình ảnh, phương pháp thông thường là thu thập ảnh từ các camera và đưa về các máy chủ xử lý. Nhưng hiện tại, các camera thường được thích hợp các phần cứng để có thể xử lý ngay tại chỗ trước khi đưa dữ liệu về trung tâm.

Raspberry Pi

   Đây là đại diện của một thiết bị Edge Computing. Có thể hiểu một cách đơn giản là Raspberry Pi là một dạng máy tính thu gọn, được trang bị các phần cứng để có thể thực hiện đầy đủ các tính năng của một máy tính thông thường. Điểm ưu việt của Raspberry chính là kích thước nhỏ gọn (chỉ bằng một chiếc thẻ ATM) và giá thành cực thấp so với hiệu năng thu được. Ngoài ra, Raspberry còn được tích hợp các cổng để giao tiếp với các cảm biến và thiết bị ngoại vi tốt hơn so với máy tính thông thường (ví dụ GPIO, camera...). Nhìn chung lại, đây là một thiết bị hoàn hảo và đang được sử dụng rộng rãi trong Edge Computing. Trong bài này, tôi sử dụng phiên bản Raspberry Pi 3 B+.

Image result for raspberry pi 3 b+
Cấu tạo chính của Raspberry Pi 3 B+.
Đây là một phiên bản khá mới của hệ máy Raspberry Pi. Bạn có thể tham khảo thêm về cấu hình của máy tại đây.

Cài đặt hệ điều hành và các thư viện python cần thiết

   Chúng ta hãy bắt đầu bằng việc cài hệ điều hành Raspbian cho Raspberry. Dung lượng nhẹ (tiết kiệm tài nguyên) và được hỗ trợ khá đầy đủ các thư viện cần thiết là lý do khiến tôi chọn hệ điều hành này. Để bắt đầu cài đặt, bạn cần có 1 máy Raspberry Pi (tất nhiên rồi), một thẻ SSD trống, đầu đọc thẻ và một máy tính. Hãy xem video hướng dẫn dưới đây.


Một mẹo nhỏ là bạn có thể thay đầu đọc thẻ bằng một máy điện thoại. Hãy cắm thẻ SSD và điện thoại và kết nối điện thoại với máy tính qua cổng USB. Khi đó, bạn có thể thực hiện việc format thẻ trên điện thoại và chỉ chuyển dữ liệu vào thẻ như bình thường. Tôi đã thử và thành công. 
Tiếp theo, chúng ta sẽ tải các thư viện cần thiết để chạy một model Deep Learning trên Raspberry. Bắt đầu bằng việc cài Conda để quản lý các môi trường của python. Bạn có thể tham khảo cách cài đặt tại đây. Các thư viện còn lại bao gồm Opencv, TensorFlow. Bạn có thể cài đặt chúng bằng lệnh "pip install". Trong trường hợp bị lỗi, bạn có thể tìm file wheel của chúng tại đây và cài trực tiếp. Một số mẹo nhỏ như sau:
  • Conda lúc mới cài chỉ có phiên bản mới nhất là 3.4. Bạn có thể chạy lệnh "conda config --add channels rpi" để có thể cài đặt các phiên bản mới hơn của python. RPI là một channel trên conda có khá nhiều thư viện python hỗ trợ cho Raspbian.
  • Hãy cài đủ các thư viện hỗ trợ cho opencv trước khi cài opencv bằng pip (theo hướng dẫn tại đây).
  • Tuy có đã có phiên bản python 3.6 trong conda nhưng tôi khuyên bạn chỉ nên sử dụng phiên bản 3.5 và hãy chọn đúng file wheel tương ứng với phiên bản python của bạn. Lý do là vì một số thư viện của bản 3.6 còn khá nhiều lỗi (ví dụ phiên bản Tensorflow của bản 3.6 trên link bị lỗi không load được file model .tflite).
  • Một số phiên bản mới của các thư viện trên link phía trên có thể bị lỗi. Bạn có thể thử cài lại bằng lệnh "conda install" hoặc tìm nguồn file wheel khác trên mạng.

Chạy thử và kiểm tra tốc độ

   Hãy tiếp tục bằng việc chạy thử một model trên con Raspberry đã chuẩn bị xong nào. Tôi đã chuẩn bị code để chạy thử và xem tốc độ tại đây. Ở đây tôi sử dụng mạng SSD Mobilenet v2 pre-train từ Tensorflow model zoo. Bạn có thể chạy thử và so sánh với kết quả tôi chạy được như sau:
  • Lần chạy đầu tiên: 2773.15 ms
  • Thời gian chạy trung bình: 1741.83 ms
Đến đây, bạn đã có thể chạy thử rất nhiều model khác với con Raspberry của mình. Dưới dây sẽ là một video demo kết quả tôi chạy 1 mạng phát hiện khuôn mặt trên con máy Raspberry của mình.


Chúng ta kết thúc phần một tại đây. Trong phần sau, tôi sẽ hướng dẫn các bạn triển khai model trên các phần cứng khác (nhanh hơn) cho Edge Computing. Tạm biệt và hẹn gặp lại tại số thứ 2 của blog hướng dẫn triển khai model Deep Learning trên Edge Computing. 

Comments

Popular posts from this blog

YOLO: You Only Look Once

Giới thiệu về Generative Adversarial Networks (GANs)

Intersection over Union (IoU) cho object detection