Trả lời cho sự kiện TensorFlow Everywhere tại địa phương của bạn ngay hôm nay!
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

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

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

Ảnh chụp màn hình của ví dụ 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 hướng dẫn và ứng dụng 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 thuộc với các API TensorFlow Lite , bạn có thể tải xuống mô hình phát hiện đối tượng bắt đầu của chúng tôi và các nhãn đi kèm.

Tải xuống mô hình khởi động 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 đào tạo 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 một 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 bố cục của hình ảnh, ví dụ chủ thể so với hậu cảnh (xem phân đoạn )

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

Nếu bạn chưa quen với 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 đây có thể giúp bạn bắt đầu.

Android

Bạn có thể tận dụng API có sẵn 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 đường dẫn 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 việc triển khai cho cả hai phương thức là lib_task_apilib_interpreter , 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 của Trình thông dịch TensorFlow Lite Swift . 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 kiểu Máy dò một lần chụp đượ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 đào tạo để 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 có chứa các miếng trái cây khác nhau, cùng với nhãn chỉ định 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í của mỗi đối tượng bức hình.

Sau đó, khi một hình ảnh được cung cấp cho mô hình, nó sẽ xuất 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 số cho biết mức độ 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 một hình ảnh làm đầu vào.

Giả sử hình ảnh mong đợi là 300x300 pixel, với ba kênh (đỏ, xanh dương và xanh lục) trên mỗi pixel. Điều này sẽ được cung cấp cho mô hình dưới dạng một bộ đệm phẳng gồm cá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 đại diện cho giá trị từ 0 đến 255.

Bạn có thể xemmã ứng dụng mẫu của chúng tôi để hiểu cách thực hiện 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 [N] [4] giá trị dấu phẩy động từ 0 đến 1, các mảng bên trong đại diện cho các hộp giới hạn ở dạng [trên cùng, trái, dưới, phải]
1 Các lớp học Mảng gồm N số nguyên (đầu ra dưới dạng giá trị dấu chấm động), mỗi số cho biết chỉ số của nhãn lớp từ tệp nhãn
2 Điểm Mảng gồm N giá trị dấu phẩy động từ 0 đến 1 thể hiện xác suất phát hiện một lớp
3 Số lượng phát hiện Giá trị nguyên của N

Ví dụ, hãy tưởng tượng một người mẫu đã được huấn luyện để 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ẽ xuất ra một số kết quả phát hiện - trong ví dụ này là 5.

Lớp học Ghi bàn Vị trí
táo 0,92 [18, 21, 57, 63]
Trái chuối 0,88 [100, 30, 180, 150]
dâu 0,87 [7, 82, 89, 163]
Trái chuối 0,23 [42, 66, 57, 83]
táo 0,11 [6, 42, 31, 58]

Điểm tin cậy

Để diễn giải các 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 số là một số từ 0 đến 1 thể hiện sự tin cậy rằng đối tượng đã được phát hiện thực sự. Con số càng gần 1 thì người mẫu càng tự tin.

Tùy thuộc vào ứng dụng của mình, bạn có thể quyết định ngưỡng giới hạn dưới ngưỡng mà 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 phát hiện hợp lệ là 50%). Trong trường hợp đó, hai đối tượng cuối cùng trong mảng sẽ bị bỏ qua vì các điểm tin cậy đó dưới 0,5:

Lớp học Ghi bàn Vị trí
táo 0,92 [18, 21, 57, 63]
Trái chuối 0,88 [100, 30, 180, 150]
dâu 0,87 [7, 82, 89, 163]
Trái chuối 0,23 [42, 66, 57, 83]
táo 0,11 [6, 42, 31, 58]

Phần cắt bỏ 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 dương tính giả (đối tượng được xác định sai hoặc các vùng của hình ảnh được xác định nhầm là đối tượng khi chúng không phải) hay âm tính giả (đối tượng chính xác được trượt vì sự tự tin của họ thấp).

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

Ảnh chụp màn hình của ví dụ Android hiển thị 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ố đại diện cho một hình chữ nhật có 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:

[ hàng đầu, trái, dưới cùng, đúng ]

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

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

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

Tên Model Kích thước mô hình Thiết bị GPU CPU
COCO SSD MobileNet v1 27 Mb Pixel 3 (Android 10) 22ms 46ms *
Pixel 4 (Android 10) 20ms 29ms *
iPhone XS (iOS 12.4.1) 7.6ms 11ms **

* 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

Người mẫu đượ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 trong Detection Zoo . 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 model.tflite tải xuống đều chứa tệp model.tflite . Nếu không có, bạn có thể tạo bộ đệm phẳng TensorFlow Lite bằng cách sử dụng các hướng dẫn này . Các mẫu SSD từ Vườn thú phát hiện đối tượng TF2 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 một bước trung gian là 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ả hai 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ý hậu kỳ chậm hơn, chính xác hơn. Vui lòng sử dụng --help với các 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 kiểu SSD. Hỗ trợ tốt hơn cho các kiến ​​trúc khác như CenterNet và EfficientDet đ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 đi kèm với độ chính xác riêng (được định lượng bằng giá trị mAP) và đặc điểm độ trễ. Bạn nên chọn một mô hình hoạt động tốt nhất cho trường hợp sử dụng và phần cứng dự định của bạn. Ví dụ: các mẫu Edge TPU là 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ụ đ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 lớp đối tượng. Để có 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ột 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ể đào tạo lại mô hình để phát hiện nhiều loại rau, mặc dù chỉ có một loại rau trong dữ liệu đào tạo ban đầu. Để làm điều này, bạn sẽ cần một bộ hình ảnh đào tạo cho mỗi nhãn mới mà bạn muốn đào tạo. Vui lòng xem Colab phát hiện ít ảnh của chúng tôi như một ví dụ về tinh chỉnh mô hình được đào tạo trước với một vài ví dụ.

Để tinh chỉnh với các bộ dữ liệu lớn hơn, hãy xem các hướng dẫn này để đào tạo các mô hình của riêng bạn với 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