Mục lục:
- Bước 1: CNN và Chuyển giao Học tập: Một số lý thuyết
- Bước 2: Chuẩn bị môi trường của bạn
- Bước 3: Cài đặt AXeleRate và Chạy thử nghiệm
- Bước 4: Đào tạo lại Mô hình, Chuyển đổi Mô hình Keras thành.kmodel
- Bước 5: Chạy mô hình trên Sipeed Maix Bit
- Bước 6: Kết luận
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)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:31
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
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
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 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
Đố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
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:
Trí tuệ nhân tạo và nhận dạng hình ảnh bằng HuskyLens: 6 bước (có hình ảnh)
Trí tuệ nhân tạo và nhận dạng hình ảnh sử dụng HuskyLens: Này, có chuyện gì vậy, các bạn! Akarsh ở đây từ CETech.Trong dự án này, chúng ta sẽ xem xét các HuskyLens từ DFRobot. Đây là một mô-đun máy ảnh được hỗ trợ bởi AI có khả năng thực hiện một số hoạt động Trí tuệ nhân tạo như Face Recognitio
Cảm biến tầm nhìn Micro: bit MU cho người mới bắt đầu - Nhận dạng thẻ I2C và thẻ hình dạng: 8 bước
Cảm biến tầm nhìn Micro: bit MU dành cho người mới bắt đầu - I2C và Nhận dạng thẻ hình dạng: Tôi đã sử dụng cảm biến tầm nhìn MU cho Micro: bit. Nó dường như là một công cụ tuyệt vời cho phép tôi thực hiện rất nhiều dự án dựa trên tầm nhìn khác nhau. Đáng buồn thay, dường như không có nhiều hướng dẫn về nó và trong khi tài liệu thực sự là
Nhận dạng và Nhận dạng khuôn mặt - Arduino Face ID sử dụng OpenCV Python và Arduino.: 6 bước
Nhận dạng và Nhận dạng khuôn mặt | Arduino Face ID Sử dụng OpenCV Python và Arduino: Nhận dạng khuôn mặt ID khuôn mặt AKA là một trong những tính năng quan trọng nhất trên điện thoại di động hiện nay. Vì vậy, tôi đã có một câu hỏi " liệu tôi có thể có id khuôn mặt cho dự án Arduino của mình không " và câu trả lời là có … Hành trình của tôi bắt đầu như sau: Bước 1: Truy cập vào chúng tôi
Bắt đầu với Esp 8266 Esp-01 Với Arduino IDE - Cài đặt Bo mạch Esp trong Arduino Ide và Lập trình Esp: 4 bước
Bắt đầu với Esp 8266 Esp-01 Với Arduino IDE | Cài đặt bo mạch Esp-01 trong Arduino Ide và Lập trình Esp: Trong phần hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt bo mạch esp8266 trong Arduino IDE và cách lập trình esp-01 và tải lên mã trong đó. điều này và hầu hết mọi người đều phải đối mặt với vấn đề
Nhận diện khuôn mặt + nhận dạng: 8 bước (có hình ảnh)
Nhận diện khuôn mặt + nhận dạng: Đây là một ví dụ đơn giản về việc chạy tính năng nhận diện và nhận diện khuôn mặt với OpenCV từ máy ảnh. LƯU Ý: TÔI ĐÃ THỰC HIỆN DỰ ÁN NÀY CHO CUỘC THI CẢM BIẾN VÀ TÔI ĐÃ SỬ DỤNG MÁY ẢNH LÀM CẢM BIẾN ĐỂ THEO DÕI VÀ CÁC MẶT CẢNH NHẬN. Vì vậy, Mục tiêu của chúng tôi Trong phiên này, 1. Cài đặt Anaconda