Mục lục:

Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2: 16 bước (có hình ảnh)
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2: 16 bước (có hình ảnh)

Video: Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2: 16 bước (có hình ảnh)

Video: Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2: 16 bước (có hình ảnh)
Video: ĐỂ CHÚ LÀM BA CỦA CON #Shorts 2024, Tháng bảy
Anonim
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2
Đó có phải là một bàn tay? (Máy ảnh Raspberry Pi + Mạng thần kinh) Phần 1/2

Cách đây vài ngày, tôi bị thương ở cổ tay phải khi tập gym. Sau đó, mỗi lần tôi sử dụng chuột máy tính, nó gây ra rất nhiều đau đớn vì góc cổ tay quá dốc.

Đó là khi nó đánh tôi "sẽ không tuyệt vời nếu chúng tôi có thể chuyển đổi bất kỳ bề mặt nào thành bàn di chuột" và tôi không biết tại sao nhưng vì lý do nào đó tôi nghĩ về cô ấy, bộ phim HER, tôi sẽ để các bạn hình dung nó ngoài. Đó là một suy nghĩ thú vị nhưng tôi không biết mình có làm được không, tôi quyết định thử.

Bài báo này ghi lại những gì tạo ra từ nó.

Trước khi chúng tôi bắt đầu, tôi có một tuyên bố từ chối trách nhiệm-

'Vào cuối bài viết này, tôi không thể chuyển đổi bất kỳ bề mặt nào thành bàn di chuột nhưng tôi không học được nhiều và đã thêm các công cụ lớn vào kho vũ khí của mình. Tôi hy vọng điều đó cũng xảy ra với bạn '

Bắt đầu nào.

Bước 1: Video

Image
Image

Đây là một video nhỏ dài 5 phút bao gồm tất cả các bước. Hãy xem.

Bước 2: Phần cứng

Phần cứng
Phần cứng

Tôi thiết lập một máy ảnh mâm xôi pi cùng với máy ảnh mâm xôi pi ở độ cao khoảng 45 cm. Điều này cung cấp cho chúng tôi khu vực giám sát khoảng 25x25 cm bên dưới máy ảnh.

Raspberry pi và raspberry pi camera có sẵn dễ dàng, chỉ cần google nó và bạn sẽ có thể tìm thấy một cửa hàng địa phương.

Hãy xem Liên kết này hoặc một trong danh sách phát Raspberry pi của tôi để bắt đầu và chạy pi không cần đầu của bạn.

Sau thiết lập này, chúng tôi cần một đoạn mã quyết định xem có bàn tay nào trong khu vực mà camera đang theo dõi hay không và nếu có thì nó ở đâu.

Bước 3: Đoạn mã

Đoạn mã
Đoạn mã
Đoạn mã
Đoạn mã

Đoạn mã cho phép chúng tôi quyết định xem có một lĩnh vực quan tâm nào đó sử dụng một thứ gọi là Mạng thần kinh hay không. Chúng thuộc loại lập trình mà chúng tôi không xác định các quy tắc để đưa ra quyết định nhưng chúng tôi hiển thị mạng nơ-ron đủ dữ liệu để nó tự tìm ra các quy tắc.

Trong trường hợp của chúng tôi, thay vì mã hóa bàn tay trông như thế nào, chúng tôi hiển thị hình ảnh mạng nơ-ron được chụp từ pi mâm xôi có chứa bàn tay và không chứa bàn tay. Giai đoạn này được gọi là huấn luyện mạng nơ-ron và hình ảnh được sử dụng được gọi là tập dữ liệu huấn luyện.

Bước 4: Lấy hình ảnh

Lấy hình ảnh
Lấy hình ảnh

Tôi đã đăng nhập từ xa vào raspberry pi của mình và chụp một loạt ảnh bằng lệnh sau.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame% 04d.jpg

Tôi đã chụp 80 ảnh có tay và 80 ảnh không có tay. 160 hình ảnh không đủ để đào tạo một mạng nơ-ron đúng cách nhưng cũng đủ để làm bằng chứng cho khái niệm.

Bên cạnh 160 hình ảnh, tôi chụp thêm 20 hình ảnh nữa để kiểm tra mạng của chúng tôi sau khi nó được đào tạo.

Khi tập dữ liệu đã sẵn sàng, tôi bắt đầu viết mã cho mạng nơ-ron.

Bước 5: Công cụ và ngôn ngữ được sử dụng

Công cụ và ngôn ngữ được sử dụng
Công cụ và ngôn ngữ được sử dụng
Công cụ và ngôn ngữ được sử dụng
Công cụ và ngôn ngữ được sử dụng

Tôi đã viết mạng thần kinh của mình trong thư viện học sâu python tên là Keras và mã được viết trên sổ ghi chép jupyter từ trình điều hướng anaconda.

Bước 6: Chuẩn bị tập dữ liệu cho đào tạo

Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo
Chuẩn bị tập dữ liệu để đào tạo

Đầu tiên (Hình ảnh # 1) Tôi đã bao gồm tất cả các thư viện cần thiết cho dự án này, bao gồm PIL, matplotlib, numpy, os và Keras. Trong ô thứ hai của sổ ghi chép python (Hình ảnh # 2), tôi xác định đường dẫn đến tập dữ liệu và in ra số lượng mẫu. Bây giờ chúng ta cần tải tất cả các hình ảnh vào một mảng numpy, do đó, trong ô thứ ba (Hình ảnh số 2), tôi đã tạo một mảng numpy là 82 (số mẫu tay) +75 (số mẫu không phải tay) tức là 157x100x100x3. 157 là tổng số hình ảnh mà tôi có, 100x100 là kích thước hình ảnh đã thay đổi kích thước của chúng tôi và 3 là cho các lớp màu đỏ, xanh lá cây và xanh lam trong hình ảnh.

Trong ô thứ tư và thứ năm, chúng tôi tải các hình ảnh có chứa tay, theo sau là các hình ảnh không chứa tay trong mảng numpy. Trong ô thứ sáu, chúng tôi chia mỗi giá trị cho 255 do đó giới hạn phạm vi giá trị từ 0 đến 1. (Hình ảnh # 3)

Tôi xin lỗi nếu hình ảnh đính kèm không đủ tốt. Đây là liên kết đến kho lưu trữ GITHUB để bạn xem mã. Đừng quên thay thế tên đường dẫn thư mục bằng đường dẫn của bạn:).

Đang di chuyển.

Tiếp theo, chúng ta cần gắn nhãn cho mỗi hình ảnh, do đó, chúng ta tạo một mảng numpy một chiều có chiều dài 157. 82 mục đầu tiên được đặt thành 1 và 75 mục còn lại được đặt thành 0 mạng nơ-ron truyền tải mà 82 hình ảnh đầu tiên là từ một lớp và còn lại là từ lớp khác. (Hình # 4)

Bây giờ hãy tạo một mạng nơ-ron.

Bước 7: Mạng thần kinh

Mạng thần kinh
Mạng thần kinh
Mạng thần kinh
Mạng thần kinh

Trong ô thứ chín, chúng tôi xác định mạng nơ-ron của chúng tôi. Nó chứa ba lần lặp lại của lớp tích chập tiếp theo là các lớp maxpool với 8, 12 và 16 bộ lọc chập tương ứng. Theo sau đó chúng ta có hai mạng lưới thần kinh dày đặc. Đính kèm hai hình ảnh cho bước này. Đầu tiên là snap mã tạo ra mạng nơ-ron và thứ hai là biểu diễn bằng hình ảnh của mạng nơ-ron với kích thước đầu ra và các hoạt động được chú thích.

Bước 8: Đào tạo mạng thần kinh

Đào tạo mạng lưới thần kinh
Đào tạo mạng lưới thần kinh

Trong ô thứ mười, chúng tôi định cấu hình trình tối ưu hóa mạng thần kinh thành 'adam' và mất chức năng thành 'binary_crossentropy'. Chúng đóng vai trò quan trọng trong cách cập nhật trọng số mạng. Cuối cùng khi chúng ta chạy ô thứ mười một, mạng nơ-ron bắt đầu được đào tạo. Trong khi mạng đang đào tạo, hãy xem chức năng mất mát và đảm bảo rằng nó đang giảm.

Bước 9: Kiểm tra mạng thần kinh

Kiểm tra mạng thần kinh
Kiểm tra mạng thần kinh

Sau khi mạng nơ-ron được đào tạo, chúng ta cần chuẩn bị tập dữ liệu thử nghiệm. Chúng tôi lặp lại quy trình đã thực hiện để chuẩn bị tập huấn luyện trong ô thứ 3, 4, 5 và 6 trên dữ liệu thử nghiệm để tạo tập thử nghiệm. Chúng tôi cũng chuẩn bị nhãn cho tập thử nghiệm nhưng lần này chúng tôi chạy mô hình trên tập dữ liệu này để lấy dự đoán chứ không phải để đào tạo.

Bước 10: Kết quả và Phần tiếp theo…

Kết quả và Phần tiếp theo…
Kết quả và Phần tiếp theo…

Tôi nhận được độ chính xác của bài kiểm tra là 88% nhưng hãy xem điều này với một chút muối vì tập dữ liệu được sử dụng để đào tạo và kiểm tra mô hình này rất rất nhỏ và không đủ để đào tạo đúng mô hình này.

Dù sao tôi hy vọng bạn thích bài viết này. Ý định của tôi đằng sau bài tập này vẫn chưa hoàn thành và hãy chú ý đến phần thứ hai. Tôi sẽ tải nó lên ngay khi tôi có thể.

Trong phần tiếp theo, chúng ta sẽ đào tạo một mạng nơ-ron khác sẽ cho chúng ta biết vị trí của bàn tay trong một hình ảnh được phát hiện bằng tay.

Tất cả các câu hỏi đều được chào đón.

Nếu bất kỳ ai quan tâm đến việc sử dụng tập dữ liệu nhỏ của tôi, hãy cho tôi biết trong phần bình luận. Tôi sẽ làm cho nó có sẵn.

Cảm ơn vì đã đọc. Tôi sẽ gặp lại bạn sớm với phần thứ hai cho đến lúc đó, tại sao bạn không tạo và đào tạo một mạng nơ-ron.

Chỉnh sửa: - Các bước tiếp theo dành cho phần thứ hai.

Bước 11: Phát hiện đối tượng

Phát hiện đối tượng
Phát hiện đối tượng

Trong các bước trước, chúng tôi đã tạo một NN cho chúng tôi biết liệu hình ảnh thử nghiệm có chứa bàn tay hay không. Vậy tiếp theo là gì? Nếu NN phân loại hình ảnh là chứa bàn tay, chúng tôi muốn biết vị trí của bàn tay. Điều này được gọi là phát hiện đối tượng trong tài liệu thị giác máy tính. Vì vậy, hãy đào tạo NN làm chính xác như vậy.

Bước 12: Video

Image
Image

Một video dài 3 phút giải thích tất cả các bước còn lại. Hãy xem.

Bước 13: Dán nhãn

Ghi nhãn
Ghi nhãn
Ghi nhãn
Ghi nhãn
Ghi nhãn
Ghi nhãn

Nếu bạn muốn một mạng nơ-ron xuất ra vị trí của bàn tay, chúng ta cần đào tạo nó theo cách như vậy, tức là không giống như mạng nơ-ron trước đây, nơi mỗi hình ảnh được gắn nhãn là có tay và không có tay. Lần này tất cả các hình ảnh có bàn tay sẽ có bốn nhãn tương ứng với tọa độ đường chéo của hộp giới hạn xung quanh bàn tay trong hình ảnh đó.

Hình ảnh đính kèm của tệp csv có nhãn cho mỗi hình ảnh. Xin lưu ý rằng tọa độ được chuẩn hóa với kích thước hình ảnh, tức là nếu tọa độ X phía trên ở pixel thứ 320 trong hình ảnh có chiều rộng 640 pixel, chúng tôi sẽ gắn nhãn nó là 0,5.

Bước 14: Gắn nhãn GUI

GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn
GUI gắn nhãn

Bạn có thể tự hỏi làm thế nào tôi quản lý để gắn nhãn tất cả 82 hình ảnh, tôi đã viết một GUI trong python đã giúp tôi thực hiện nhiệm vụ này. Sau khi hình ảnh được tải trong GUI. Tôi nhấp chuột trái ở tọa độ trên và nhấp chuột phải ở tọa độ dưới của hộp giới hạn có thể xảy ra xung quanh bàn tay. Các tọa độ này sau đó được ghi vào một tệp sau đó tôi nhấp vào nút tiếp theo để tải hình ảnh tiếp theo. Tôi lặp lại quy trình này cho tất cả 82 hình ảnh đoàn tàu và 4 hình ảnh thử nghiệm. Khi nhãn đã sẵn sàng, đó là thời gian đào tạo.

Bước 15: Thư viện cần thiết

Thư viện cần thiết
Thư viện cần thiết
Thư viện cần thiết
Thư viện cần thiết
Thư viện cần thiết
Thư viện cần thiết

Đầu tiên chúng ta cần tải tất cả các thư viện cần thiết. Mà bao gồm

  • PIL để thao tác hình ảnh,
  • matplotlib để lập mưu,
  • numpy cho hoạt động ma trận,
  • hệ điều hành cho chức năng phụ thuộc vào hệ điều hành và
  • keras cho mạng nơ-ron.

Bước 16: Các ô còn lại

Tế bào còn lại
Tế bào còn lại
Các ô còn lại
Các ô còn lại
Các ô còn lại
Các ô còn lại
Các ô còn lại
Các ô còn lại

Trong ô thứ 2, 3, 4 và 5, chúng tôi tải hình ảnh vào mảng numpy và tạo mảng bốn chiều từ tệp csv để hoạt động như nhãn. Trong ô số 6, chúng tôi tạo mạng nơ-ron của chúng tôi. Kiến trúc của nó giống với mạng nơ-ron được sử dụng để phân loại ngoại trừ kích thước lớp đầu ra là 4 chứ không phải 1. Một sự khác biệt khác đến từ hàm mất mát được sử dụng, đó là lỗi bình phương trung bình. Trong ô số 8, chúng tôi bắt đầu đào tạo mạng nơ-ron của chúng tôi sau khi được đào tạo, tôi đã chạy mô hình này trên bộ thử nghiệm để nhận các dự đoán cho hộp giới hạn về tọa độ chồng lên của hộp giới hạn mà chúng trông khá chính xác.

Cảm ơn vì đã đọc.

Đề xuất: