Mục lục:

Nhận dạng hình ảnh với bo mạch K210 và Arduino IDE / Micropython: 6 bước (có hình ảnh)
Nhận dạng hình ảnh với bo mạch K210 và Arduino IDE / Micropython: 6 bước (có hình ảnh)

Video: Nhận dạng hình ảnh với bo mạch K210 và Arduino IDE / Micropython: 6 bước (có hình ảnh)

Video: Nhận dạng hình ảnh với bo mạch K210 và Arduino IDE / Micropython: 6 bước (có hình ảnh)
Video: Xử lý ảnh AI Face Detection với mạch Sipeed Maix Bit RISC-V K210 2024, Tháng mười hai
Anonim
Image
Image

Tôi đã viết một bài viết về cách chạy các bản trình diễn OpenMV trên Sipeed Maix Bit và cũng đã làm một video về bản trình diễn phát hiện đối tượng với bảng này. Một trong những câu hỏi mà mọi người đã đặt ra là - làm thế nào tôi có thể nhận ra một đối tượng mà mạng nơ-ron không được đào tạo? Nói cách khác, làm thế nào để tạo bộ phân loại hình ảnh của riêng bạn và chạy nó với tăng tốc phần cứng.

Đây là một câu hỏi dễ hiểu, vì đối với dự án của bạn, bạn có thể không cần phải nhận ra một số đối tượng chung chung, như chó mèo và máy bay. Bạn muốn nhận ra một cái gì đó cụ thể, chẳng hạn như một giống chó để làm cửa tự động cho vật nuôi đó, hoặc một loài thực vật để phân loại hoặc bất kỳ ứng dụng thoát nào khác mà bạn có thể nghĩ đến!

Tôi có bạn! Trong bài viết này, tôi sẽ hướng dẫn bạn cách tạo bộ phân loại hình ảnh tùy chỉnh của riêng bạn với việc học truyền trong Keras, chuyển đổi mô hình được đào tạo sang định dạng.kmodel và chạy nó trên bảng Sipeed (có thể là bất kỳ bảng nào, Bit / Dock hoặc Go) bằng Micropython hoặc Arduino IDE. Và chỉ có trí tưởng tượng của bạn mới là giới hạn cho những nhiệm vụ bạn có thể làm với kiến thức này.

CẬP NHẬT THÁNG 5/2020: Thấy bài viết và video của tôi về Nhận dạng hình ảnh với bảng K210 vẫn rất phổ biến và nằm trong số các kết quả hàng đầu trên YouTube và Google, tôi quyết định cập nhật bài viết để bao gồm thông tin về aXeleRate, khung dựa trên Keras cho AI trên Cạnh tôi phát triển.

aXeleRate, về cơ bản, dựa trên bộ sưu tập các tập lệnh mà tôi đã sử dụng để đào tạo các mô hình nhận dạng hình ảnh / phát hiện đối tượng - được kết hợp thành một khuôn khổ duy nhất và được tối ưu hóa cho quy trình làm việc trên Google Colab. Nó thuận tiện hơn để sử dụng và cập nhật nhiều hơn.

Đối với phiên bản cũ của bài viết, bạn vẫn có thể xem trên steemit.com.

Bước 1: CNN và Chuyển giao Học tập: Một số lý thuyết

CNN và Chuyển giao Học tập: Một số lý thuyết
CNN và Chuyển giao Học tập: Một số lý thuyết

Mạng nơ-ron Convolutional hay CNN là một lớp mạng nơ-ron sâu, được áp dụng phổ biến nhất để phân tích hình ảnh trực quan. Có rất nhiều tài liệu trên internet về chủ đề này và tôi sẽ đưa ra một số liên kết trong phần cuối của bài viết. Nói tóm lại, bạn có thể coi CNN như một loạt các bộ lọc, được áp dụng cho hình ảnh, mỗi bộ lọc tìm kiếm một đặc điểm cụ thể trong hình ảnh - ở các lớp phức hợp thấp hơn, các đối tượng địa lý thường là các đường và hình dạng đơn giản và trên các lớp cao hơn là các đối tượng địa lý có thể cụ thể hơn, ví dụ: các bộ phận cơ thể, kết cấu cụ thể, các bộ phận của động vật hoặc thực vật, v.v. Sự hiện diện của một số đặc điểm nhất định có thể cho chúng ta manh mối về đối tượng trong ảnh có thể là gì. Râu, hai mắt và mũi đen? Phải là con mèo! Lá xanh, thân cây? Trông giống như một cái cây!

Tôi hy vọng bạn có được ý tưởng về nguyên tắc làm việc của CNN bây giờ. Thông thường, một mạng nơ-ron sâu cần hàng nghìn hình ảnh và thời gian đào tạo hàng giờ (phụ thuộc vào phần cứng bạn đang sử dụng để đào tạo) để "phát triển" các bộ lọc hữu ích cho việc nhận dạng các loại đối tượng bạn muốn. Nhưng có một con đường tắt.

Một mô hình được đào tạo để nhận ra nhiều vật thể thông thường khác nhau (mèo, chó, đồ gia dụng, phương tiện giao thông, v.v.) đã có rất nhiều bộ lọc hữu ích được "phát triển", vì vậy chúng ta không cần nó học nhận dạng các hình dạng và bộ phận cơ bản của các đối tượng một lần nữa. Chúng ta chỉ có thể đào tạo lại một vài lớp cuối cùng của mạng để nhận ra các lớp đối tượng cụ thể, điều này rất quan trọng đối với chúng ta. Đây được gọi là "chuyển giao học tập". Bạn cần ít dữ liệu đào tạo hơn đáng kể và thời gian tính toán với quá trình học chuyển giao, vì bạn chỉ đào tạo một vài lớp cuối cùng của mạng, bao gồm có thể bao gồm vài trăm nơ-ron.

Nghe có vẻ tuyệt vời, phải không? Hãy xem làm thế nào để thực hiện nó.

Bước 2: Chuẩn bị môi trường của bạn

Chuẩn bị môi trường của bạn
Chuẩn bị môi trường của bạn

Có hai cách để sử dụng aXeleRate: chạy cục bộ trên máy Ubuntu hoặc trong Google Colab. Để chạy trong Google Colab, hãy xem ví dụ sau:

Phân loại hình ảnh Colab Notebook

Việc đào tạo cục bộ mô hình của bạn và xuất nó để sử dụng với khả năng tăng tốc phần cứng cũng dễ dàng hơn nhiều.

Môi trường làm việc của tôi là Ubuntu 16.04, 64bit. Bạn có thể sử dụng Máy ảo để chạy hình ảnh Ubuntu vì chúng tôi sẽ không sử dụng GPU để đào tạo. Với một số sửa đổi, bạn cũng có thể chạy tập lệnh đào tạo trên Windows, nhưng để chuyển đổi mô hình, bạn sẽ cần sử dụng hệ thống Linux. Vì vậy, môi trường thích hợp để bạn thực hiện hướng dẫn này là Ubuntu 16.04, chạy nguyên bản hoặc trong máy ảo.

Hãy bắt đầu bằng cách cài đặt Miniconda, là trình quản lý môi trường cho Python. Chúng tôi sẽ tạo môi trường biệt lập, vì vậy chúng tôi sẽ không vô tình thay đổi bất kỳ điều gì trong môi trường Python hệ thống của bạn.

Tải xuống trình cài đặt tại đây

Sau khi cài đặt xong, hãy tạo một môi trường mới:

conda tạo -n ml python = 3,7

Hãy kích hoạt môi trường mới

conda kích hoạt ml

Một tiền tố trước trình bao bash của bạn sẽ xuất hiện với tên của môi trường, cho biết rằng bạn hiện đang làm việc trong môi trường đó.

Bước 3: Cài đặt AXeleRate và Chạy thử nghiệm

Cài đặt AXeleRate và Chạy thử nghiệm
Cài đặt AXeleRate và Chạy thử nghiệm

Cài đặt aXeleRate trên máy cục bộ của bạn với

pip cài đặt git +

Để tải xuống các ví dụ, hãy chạy:

git clone

Bạn có thể chạy các bài kiểm tra nhanh với tests_training.py trong thư mục aXeleRate. Nó sẽ chạy đào tạo và suy luận cho từng loại mô hình, lưu và chuyển đổi các mô hình được đào tạo. Vì nó chỉ được đào tạo trong 5 kỷ nguyên và tập dữ liệu rất nhỏ, bạn sẽ không thể có được các mô hình hữu ích, nhưng tập lệnh này chỉ có nghĩa là để kiểm tra xem không có lỗi.

Bước 4: Đào tạo lại Mô hình, Chuyển đổi Mô hình Keras thành.kmodel

Đào tạo lại Mô hình, Chuyển đổi Mô hình Keras thành.kmodel
Đào tạo lại Mô hình, Chuyển đổi Mô hình Keras thành.kmodel

Đối với ví dụ đồ chơi này, chúng tôi sẽ đào tạo mô hình để nhận ra ông già Noel và Arduino Uno. Rõ ràng là bạn có thể chọn các lớp khác. Tải xuống bộ dữ liệu từ đây. Tạo một bản sao của tệp classifier.json trong thư mục cấu hình, sau đó thay đổi nó cho phù hợp, tương tự như tệp cấu hình trong ảnh chụp màn hình - hãy đảm bảo đường dẫn đến các thư mục đào tạo và xác thực là chính xác!

Chạy lệnh sau từ thư mục aXeleRate:

python axelerate / train.py - c configs / santa_uno.json

Khóa đào tạo sẽ bắt đầu. Nếu độ chính xác xác thực (chỉ số xác thực của chúng tôi) không cải thiện trong 20 kỷ, thì quá trình đào tạo sẽ ngừng sớm. Mỗi khi độ chính xác xác thực được cải thiện, mô hình sẽ được lưu trong thư mục dự án. Sau khi quá trình đào tạo kết thúc, aXeleRate tự động chuyển đổi mô hình tốt nhất sang các định dạng được chỉ định - bạn có thể chọn, "tflite", "k210" hoặc "edgetpu" kể từ bây giờ.

Bước 5: Chạy mô hình trên Sipeed Maix Bit

Chạy mô hình trên Sipeed Maix Bit
Chạy mô hình trên Sipeed Maix Bit
Chạy mô hình trên Sipeed Maix Bit
Chạy mô hình trên Sipeed Maix Bit
Chạy mô hình trên Sipeed Maix Bit
Chạy mô hình trên Sipeed Maix Bit

Có hai cách để chạy mô hình bạn hiện có trên phần cứng Sipeed Maix: vi chương trình cơ sở và Arduino IDE. Phần cứng micropython dễ sử dụng hơn, nhưng nó chiếm một phần đáng kể bộ nhớ khả dụng, vì vậy sẽ có ít dung lượng hơn cho mô hình. Arduino IDE về cơ bản là mã C, hiệu quả hơn nhiều và có dung lượng bộ nhớ nhỏ hơn. Mô hình của tôi chỉ là 1,9Mb, vì vậy cả hai tùy chọn đều phù hợp với nó. Bạn có thể sử dụng các mô hình lớn tới 2,9 Mb với Micropython, đối với bất kỳ mô hình lớn hơn nào bạn cần cân nhắc sử dụng Arduino IDE.

Tải xuống OpenMV IDE từ đây và phần sụn vi chạy tối thiểu từ đây.

Ghi phần sụn bằng công cụ kflash_gui. Bạn cũng có thể chọn ghi mô hình được đào tạo để flash, như thể hiện trong ảnh chụp màn hình. Hoặc sao chép nó vào thẻ SD (trong trường hợp đó, hãy sao chép.kmodel vào thư mục gốc của thẻ SD và lắp thẻ SD vào Sipeed Maix Bit)

Mở OpenMV IDE và nhấn nút kết nối. Mở tập lệnh santa_uno.py từ thư mục example_scripts và nhấn nút Bắt đầu. Bạn sẽ thấy một luồng trực tiếp từ máy ảnh và nếu bạn mở Serial Terminal, bạn sẽ nhận được kết quả nhận dạng hình ảnh hàng đầu với điểm số tin cậy!

Để sử dụng với Arduino IDE, trước tiên bạn cần làm theo quy trình thêm bo mạch Sipeed vào Arduino IDE, được nêu ở đây. Phiên bản Arduino IDE của bạn tối thiểu phải là 1.8.12. Sau khi bạn thêm các bảng, hãy mở bản phác thảo mobilenet_v1_transfer_learning.ino và tải nó lên Sipeed Maix Bit. Thay đổi tên của kiểu máy trên thẻ SD thành "kiểu máy" (hoặc tạo một bản sao với tên này). Bạn có thể thay đổi tên nhãn trong names.cpp. Nó sẽ hiển thị luồng camera trực tiếp trên màn hình Sipeed Maix cùng với kết quả nhận dạng hình ảnh hàng đầu.

Bước 6: Kết luận

Dưới đây là một số tài liệu khác để đọc về chủ đề CNNs và chuyển giao việc học:

Học Chuyển bằng Mobilenet và Keras Giải thích tuyệt vời về Học chuyển, hướng dẫn này sử dụng phiên bản sửa đổi của mã từ bài viết đó.

Mèo và chó và mạng nơ-ron phức hợp Giải thích những điều cơ bản đằng sau CNN và hình dung một số bộ lọc. Với mèo!

Đào tạo, chuyển đổi, chạy MobileNet trên Sipeed MaixPy và MaixDuino! Hướng dẫn từ nhóm Sipeed về cách đào tạo các lớp Mobilenet 1000 từ đầu (không học chuyển tiếp). Bạn có thể tải xuống mô hình được đào tạo trước của họ và dùng thử!

Hy vọng bạn có thể sử dụng kiến thức bạn có bây giờ để xây dựng một số dự án tuyệt vời với thị giác máy! Bạn có thể mua bảng Sipeed ở đây, chúng là một trong những lựa chọn rẻ nhất có sẵn cho ML trên hệ thống nhúng.

Đề xuất: