Đưa ra một hình ảnh hoặc một luồng video, một mô hình phát hiện đối tượng có thể xác định tập đố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 hình ảnh.
Ví dụ: ảnh chụp màn hình này của ứng dụng ví dụ 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:
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á Hướng dẫn và ứng dụng mẫu .
Nếu bạn đang sử dụng một nền tảng không phải Android hoặc iOS hoặc nếu bạn đã quen thuộc với API TensorFlow Lite , thì 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 độ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 được liên kết (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ộ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 một loại mô hình khác:
- Dự đoán nhãn đơn nào mà hình ảnh có 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ụ như đối tượng so với nền (xem phân đoạn )
Các ứng dụng và hướng dẫn ví dụ
Nếu bạn là người 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 ví dụ sau 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ụ về Android bên dưới minh họa việc triển khai cho cả hai phương pháp bằng cách sử dụng Thư viện tác vụ và API trình thông dịch tương ứng.
iOS
Bạn có thể tích hợp mô hình bằng cách sử dụng API Swift phiên dịch TensorFlow Lite . Xem ví dụ iOS bên dưới.
Mô tả về mô hình
Phần này mô tả chữ ký cho các mô hình Máy dò một lần được chuyển đổi thành 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 chứa nhiều loại 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í xuất hiện của từng đối tượng trong bức hình.
Sau đó, khi một hình ảnh được cung cấp cho mô hình, nó sẽ xuất ra một danh sách các đối tượng mà nó phát hiện, vị trí của hộp giới hạn chứa từng đối tượng và điểm số cho biết độ tin cậy của việc phát hiện đó là chính xác.
Nhập chữ ký
Mô hình lấy một hình ảnh làm đầu vào.
Giả sử hình ảnh dự kiến 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 bộ đệm phẳng có giá trị 270.000 byte (300x300x3). Nếu mô hình được lượng tử hóa , thì 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 tiền xử lý 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 mỗi đối tượng.
Mục lục | Tên | Sự miêu tả |
---|---|---|
0 | Vị trí | Mảng đa chiều của [N][4] giá trị dấu phẩy động 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 gồm N số nguyên (đầu ra dưới dạng giá trị dấu phẩy động) mỗi số chỉ ra chỉ mục của nhãn lớp từ tệp nhãn |
2 | Điểm số | Mảng gồm N giá trị dấu phẩy động trong khoảng từ 0 đến 1 biểu thị xác suất mà một lớp được phát hiện |
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ẽ xuất 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 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 tự tin.
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 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ì những điểm tin cậy đó thấp hơn 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] |
Điểm giới hạn bạn sử dụng phải dựa trên việc bạn có cảm thấy thoải mái hơn với các kết quả dương tính giả (đối tượng được xác định sai hoặc các khu vực của hình ảnh được xác định nhầm là đối tượng trong khi thực tế không phải vậy) hay âm tính giả (đối tượng thực sự được bỏ lỡ vì sự tự tin của họ thấp).
Ví dụ: trong hình ảnh sau đây, một quả lê (không phải là đối tượng 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ề dương tính giả có thể bỏ qua bằng cách chọn một 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ẽ dễ dàng loại trừ 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 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ùng 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 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ác cạnh dưới cùng và bên phải theo cách tương tự.
Điểm chuẩn hiệu suất
Các số điểm chuẩn hiệu suất cho mẫu máy khởi động của chúng tôi được tạo bằng công cụ được mô tả tại đâ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) | 22ms | 46 mili giây* |
Pixel 4 (Android 10) | 20ms | 29 mili giây* | ||
iPhone XS (iOS 12.4.1) | 7,6 mili giây | 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 độ trễ và độ chính xác khác nhau trong Sở thú phát hiện . Mỗi người trong số họ 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 Detection Zoo cũng có thể được chuyển đổi thành TensorFlow Lite bằ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 cách sử dụng Bộ chuyển đổi TensorFlow Lite 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ả 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 quá trình xử lý hậu kỳ 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à 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 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 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ý 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 các 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ột mô hình để 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 tập hợp các hình ảnh đào tạo cho mỗi nhãn mới mà bạn muốn đào tạo. Cách được đề xuất là sử dụng thư viện TensorFlow Lite Model Maker giúp đơn giản hóa quy trình đào tạo mô hình TensorFlow Lite bằng tập dữ liệu tùy chỉnh, với một vài dòng mã. Nó sử dụng học chuyển đổi để giảm lượng dữ liệu và thời gian đào tạo cần thiết. Bạn cũng có thể tìm hiểu từ Colab Phát hiện ít ảnh 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