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

Với một hình ảnh hoặc luồng video, mô hình phát hiện đối tượng có thể xác định tập hợp đối tượng nào đã biết có thể xuất hiện và cung cấp thông tin về vị trí của chúng trong hình ảnh.

Ví dụ: ảnh chụp màn hình của ứng dụng mẫu này cho thấy cách nhận dạng hai đối tượng và chú thích vị trí của chúng:

Ảnh chụp màn hình của ví dụ về Android

Bắt đầu

Để tìm hiểu cách sử dụng tính năng phát hiện đối tượng trong ứng dụng dành cho thiết bị di động, hãy khám phá các ứng dụng và hướng dẫn Ví dụ .

Nếu bạn đang sử dụng nền tảng không phải Android hoặc iOS hoặc nếu bạn đã quen với API TensorFlow Lite , bạn có thể tải xuống mô hình phát hiện đối tượng ban đầu của chúng tôi và các nhãn đi kèm.

Tải xuống mô hình khởi đầu với Siêu dữ liệu

Để biết thêm thông tin về Siêu dữ liệu và các trường liên quan (ví dụ: labels.txt ), hãy xem Đọc siêu dữ liệu từ các mô hình

Nếu bạn muốn huấn luyện một mô hình phát hiện tùy chỉnh cho nhiệm vụ của riêng mình, hãy xem Tùy chỉnh mô hình .

Đối với các trường hợp sử dụng sau, bạn nên sử dụng loại mô hình khác:

  • Dự đoán nhãn đơn nào mà hình ảnh có nhiều khả năng đại diện nhất (xem phân loại hình ảnh )
  • Dự đoán thành phần của hình ảnh, ví dụ như chủ thể so với nền (xem phân đoạn )

Các ứng dụng và hướng dẫn mẫu

Nếu bạn mới sử dụng TensorFlow Lite và đang làm việc với Android hoặc iOS, chúng tôi khuyên bạn nên khám phá các ứng dụng mẫu sau để có thể giúp bạn bắt đầu.

Android

Bạn có thể tận dụng API sẵn dùng từ Thư viện tác vụ TensorFlow Lite để tích hợp các mô hình phát hiện đối tượng chỉ trong một vài dòng mã. Bạn cũng có thể xây dựng quy trình suy luận tùy chỉnh của riêng mình bằng cách sử dụng API Java của Trình thông dịch TensorFlow Lite .

Ví dụ Android bên dưới minh họa cách triển khai cho cả hai phương pháp bằng cách sử dụng thư viện Tác vụAPI trình thông dịch tương ứng.

Xem ví dụ về Android

iOS

Bạn có thể tích hợp mô hình bằng cách sử dụng API Swift của Trình thông dịch TensorFlow Lite . Xem ví dụ iOS bên dưới.

Xem ví dụ về iOS

Mô tả về mô hình

Phần này mô tả chữ ký cho các mô hình Trình phát hiện một lần được chuyển đổi sang TensorFlow Lite từ API phát hiện đối tượng TensorFlow .

Một mô hình phát hiện đối tượng được huấn luyện để phát hiện sự hiện diện và vị trí của nhiều lớp đối tượng. Ví dụ: một mô hình có thể được đào tạo với các hình ảnh chứa nhiều loại trái cây khác nhau, cùng với nhãn chỉ rõ loại trái cây mà chúng đại diện (ví dụ: táo, chuối hoặc dâu tây) và dữ liệu chỉ định vị trí mỗi đối tượng xuất hiện trong bức hình.

Sau đó, khi một hình ảnh được cung cấp cho mô hình, nó sẽ đưa ra danh sách các đối tượng mà nó phát hiện được, vị trí của hộp giới hạn chứa từng đối tượng và điểm cho biết độ tin cậy rằng việc phát hiện là chính xác.

Chữ ký đầu vào

Mô hình lấy hình ảnh làm đầu vào.

Giả sử hình ảnh mong muốn là 300x300 pixel, với ba kênh (đỏ, xanh lam và xanh lục) trên mỗi pixel. Điều này sẽ được đưa vào mô hình dưới dạng bộ đệm phẳng có giá trị 270.000 byte (300x300x3). Nếu mô hình được lượng tử hóa , mỗi giá trị phải là một byte đơn biểu thị giá trị trong khoảng từ 0 đến 255.

Bạn có thể xem mã ứng dụng mẫu của chúng tôi để hiểu cách thực hiện quá trình xử lý trước này trên Android.

Chữ ký đầu ra

Mô hình xuất ra bốn mảng, được ánh xạ tới các chỉ số 0-4. Mảng 0, 1 và 2 mô tả N đối tượng được phát hiện, với một phần tử trong mỗi mảng tương ứng với từng đối tượng.

Mục lục Tên Sự miêu tả
0 Địa điểm Mảng đa chiều gồm các giá trị dấu phẩy động [N] [4] trong khoảng từ 0 đến 1, các mảng bên trong biểu thị các hộp giới hạn ở dạng [trên, trái, dưới, phải]
1 Các lớp học Mảng N số nguyên (đầu ra dưới dạng giá trị dấu phẩy động), mỗi số biểu thị chỉ mục của nhãn lớp từ tệp nhãn
2 Điểm số Mảng N giá trị dấu phẩy động từ 0 đến 1 biểu thị xác suất phát hiện được một lớp
3 Số lần phát hiện Giá trị nguyên của N

Ví dụ, hãy tưởng tượng một mô hình đã được đào tạo để phát hiện táo, chuối và dâu tây. Khi được cung cấp một hình ảnh, nó sẽ đưa ra một số kết quả phát hiện đã đặt - trong ví dụ này là 5.

Lớp học Điểm Vị trí
Quả táo 0,92 [18, 21, 57, 63]
Chuối 0,88 [100, 30, 180, 150]
Quả dâu 0,87 [7, 82, 89, 163]
Chuối 0,23 [42, 66, 57, 83]
Quả táo 0,11 [6, 42, 31, 58]

Điểm tin cậy

Để diễn giải những kết quả này, chúng ta có thể xem điểm số và vị trí của từng đối tượng được phát hiện. Điểm là một số từ 0 đến 1 cho biết độ tin cậy rằng đối tượng đã được phát hiện thực sự. Con số càng gần 1 thì mô hình càng tin cậy.

Tùy thuộc vào ứng dụng của bạn, bạn có thể quyết định ngưỡng giới hạn mà dưới đó bạn sẽ loại bỏ kết quả phát hiện. Đối với ví dụ hiện tại, ngưỡng hợp lý là điểm 0,5 (nghĩa là xác suất 50% phát hiện là hợp lệ). Trong trường hợp đó, hai đối tượng cuối cùng trong mảng sẽ bị bỏ qua vì những điểm tin cậy đó dưới 0,5:

Lớp học Điểm Vị trí
Quả táo 0,92 [18, 21, 57, 63]
Chuối 0,88 [100, 30, 180, 150]
Quả dâu 0,87 [7, 82, 89, 163]
Chuối 0,23 [42, 66, 57, 83]
Quả táo 0,11 [6, 42, 31, 58]

Giới hạn mà bạn sử dụng phải dựa trên việc bạn cảm thấy thoải mái hơn với kết quả dương tính giả (đối tượng bị xác định sai hoặc các vùng của hình ảnh bị xác định nhầm là đối tượng trong khi thực tế không phải vậy) hay kết quả âm tính giả (đối tượng chính hãng được xác định sai). trượt vì độ tin cậy của họ thấp).

Ví dụ: trong hình ảnh sau đây, một quả lê (không phải là vật thể mà mô hình được đào tạo để phát hiện) đã bị xác định nhầm là "người". Đây là một ví dụ về kết quả dương tính giả có thể bị bỏ qua bằng cách chọn ngưỡng thích hợp. Trong trường hợp này, mức giới hạn 0,6 (hoặc 60%) sẽ loại trừ một cách thoải mái kết quả dương tính giả.

Ảnh chụp màn hình ví dụ về Android hiển thị kết quả dương tính giả

Vị trí

Đối với mỗi đối tượng được phát hiện, mô hình sẽ trả về một mảng gồm bốn số biểu thị một hình chữ nhật giới hạn bao quanh vị trí của nó. Đối với mô hình khởi động được cung cấp, các số được sắp xếp như sau:

[ đứng đầu, bên trái, đáy, Phải ]

Giá trị trên cùng biểu thị khoảng cách từ cạnh trên của hình chữ nhật đến đỉnh của hình ảnh, tính bằng pixel. Giá trị bên trái biểu thị khoảng cách của cạnh trái với bên trái của hình ảnh đầu vào. Các giá trị khác biểu thị cạnh dưới và cạnh phải theo cách tương tự.

Điểm chuẩn hiệu suất

Số điểm chuẩn hiệu suất cho mô hình khởi đầu của chúng tôi được tạo bằng công cụ được mô tả ở đây .

Tên mẫu Kích thước mô hình Thiết bị GPU CPU
COCO SSD MobileNet v1 27 Mb Pixel 3 (Android 10) 22 mili giây 46 mili giây*
Pixel 4 (Android 10) 20 mili giây 29 mili giây*
iPhone XS (iOS 12.4.1) 7,6 mili giây 11 mili giây**

* 4 chủ đề được sử dụng.

** 2 luồng được sử dụng trên iPhone để có kết quả hoạt động tốt nhất.

Tùy chỉnh mô hình

Các mô hình được đào tạo trước

Bạn có thể tìm thấy các mô hình phát hiện được tối ưu hóa cho thiết bị di động với nhiều đặc điểm về độ trễ và độ chính xác khác nhau trong Vườn thú phát hiện . Mỗi một trong số chúng tuân theo các chữ ký đầu vào và đầu ra được mô tả trong các phần sau.

Hầu hết các tệp zip tải xuống đều chứa tệp model.tflite . Nếu không có, bộ đệm phẳng TensorFlow Lite có thể được tạo bằng cách sử dụng các hướng dẫn này . Các mẫu SSD từ TF2 Object Development Zoo cũng có thể được chuyển đổi sang TensorFlow Lite bằng cách sử dụng hướng dẫn tại đây . Điều quan trọng cần lưu ý là không thể chuyển đổi trực tiếp các mô hình phát hiện bằng TensorFlow Lite Converter vì chúng yêu cầu bước trung gian để tạo mô hình nguồn thân thiện với thiết bị di động. Các tập lệnh được liên kết ở trên thực hiện bước này.

Cả tập lệnh xuất TF1 & TF2 đều có các tham số có thể cho phép số lượng đối tượng đầu ra lớn hơn hoặc xử lý bài đăng chậm hơn, chính xác hơn. Vui lòng sử dụng --help với tập lệnh để xem danh sách đầy đủ các đối số được hỗ trợ.

Hiện tại, suy luận trên thiết bị chỉ được tối ưu hóa với các mẫu SSD. Hỗ trợ tốt hơn cho các kiến ​​trúc khác như CenterNet và EfficiencyDet đang được nghiên cứu.

Làm thế nào để chọn một mô hình để tùy chỉnh?

Mỗi mô hình đều có độ chính xác riêng (được định lượng bằng giá trị mAP) và các đặc điểm độ trễ. Bạn nên chọn kiểu máy phù hợp nhất với trường hợp sử dụng và phần cứng dự định của mình. Ví dụ: các mẫu Edge TPU lý tưởng để suy luận về Edge TPU của Google trên Pixel 4.

Bạn có thể sử dụng công cụ đo điểm chuẩn của chúng tôi để đánh giá các mô hình và chọn tùy chọn hiệu quả nhất hiện có.

Tinh chỉnh mô hình trên dữ liệu tùy chỉnh

Các mô hình được đào tạo trước mà chúng tôi cung cấp được đào tạo để phát hiện 90 loại đối tượng. Để biết danh sách đầy đủ các lớp, hãy xem tệp nhãn trong siêu dữ liệu mô hình .

Bạn có thể sử dụng một kỹ thuật được gọi là học chuyển giao để đào tạo lại mô hình nhằm nhận ra các lớp không có trong tập hợp ban đầu. Ví dụ: bạn có thể huấn luyện lại mô hình để phát hiện nhiều loại rau, mặc dù dữ liệu huấn luyện ban đầu chỉ có một loại rau. Để làm điều này, bạn sẽ cần một bộ ảnh huấn luyện cho từng nhãn mới mà bạn muốn huấn luyện. Cách được khuyến nghị là sử dụng thư viện TensorFlow Lite Model Maker để đơn giản hóa quá trình đào tạo mô hình TensorFlow Lite bằng cách sử dụng tập dữ liệu tùy chỉnh, với một vài dòng mã. Nó sử dụng phương pháp học chuyển giao để giảm lượng dữ liệu và thời gian đào tạo cần thiết. Bạn cũng có thể học hỏi từ Colab tính năng phát hiện vài lần bắn như một ví dụ về việc tinh chỉnh mô hình được đào tạo trước bằng một vài ví dụ.

Để tinh chỉnh với các tập dữ liệu lớn hơn, hãy xem các hướng dẫn này để đào tạo mô hình của riêng bạn bằng API phát hiện đối tượng TensorFlow: TF1 , TF2 . Sau khi được đào tạo, chúng có thể được chuyển đổi sang định dạng thân thiện với TFLite với hướng dẫn tại đây: TF1 , TF2