Deteksi objek

Dengan adanya gambar atau aliran video, model deteksi objek dapat mengidentifikasi kumpulan objek mana yang mungkin ada dan memberikan informasi tentang posisinya dalam gambar.

Misalnya, tangkapan layar contoh aplikasi ini menunjukkan bagaimana dua objek dikenali dan posisinya dijelaskan:

Tangkapan layar contoh Android

Memulai

Untuk mempelajari cara menggunakan deteksi objek di aplikasi seluler, jelajahi Contoh aplikasi dan panduan .

Jika Anda menggunakan platform selain Android atau iOS, atau jika Anda sudah terbiasa dengan TensorFlow Lite API , Anda dapat mendownload model deteksi objek awal kami dan label yang menyertainya.

Unduh model pemula dengan Metadata

Untuk informasi lebih lanjut tentang Metadata dan bidang terkait (misalnya: labels.txt ) lihat Membaca metadata dari model

Jika Anda ingin melatih model deteksi kustom untuk tugas Anda sendiri, lihat Kustomisasi model .

Untuk kasus penggunaan berikut, Anda harus menggunakan jenis model yang berbeda:

  • Memprediksi label tunggal mana yang paling mungkin diwakili oleh gambar (lihat klasifikasi gambar )
  • Memprediksi komposisi suatu gambar, misalnya subjek versus latar belakang (lihat segmentasi )

Contoh aplikasi dan panduan

Jika Anda baru menggunakan TensorFlow Lite dan menggunakan Android atau iOS, sebaiknya jelajahi contoh aplikasi berikut yang dapat membantu Anda memulai.

Android

Anda dapat memanfaatkan API bawaan dari TensorFlow Lite Task Library untuk mengintegrasikan model deteksi objek hanya dalam beberapa baris kode. Anda juga dapat membuat pipeline inferensi kustom Anda sendiri menggunakan TensorFlow Lite Interpreter Java API .

Contoh Android di bawah ini mendemonstrasikan implementasi kedua metode menggunakan Task Library dan Interpreter API .

Lihat contoh Android

iOS

Anda dapat mengintegrasikan model menggunakan TensorFlow Lite Interpreter Swift API . Lihat contoh iOS di bawah.

Lihat contoh iOS

Deskripsi model

Bagian ini menjelaskan tanda tangan untuk model Single-Shot Detector yang dikonversi ke TensorFlow Lite dari TensorFlow Object Detection API .

Model deteksi objek dilatih untuk mendeteksi keberadaan dan lokasi beberapa kelas objek. Misalnya, suatu model mungkin dilatih dengan gambar yang berisi berbagai potongan buah, beserta label yang menentukan kelas buah yang diwakilinya (misalnya apel, pisang, atau stroberi), dan data yang menentukan di mana setiap objek muncul. foto.

Ketika suatu gambar kemudian diberikan kepada model, ia akan menampilkan daftar objek yang dideteksi, lokasi kotak pembatas yang berisi setiap objek, dan skor yang menunjukkan keyakinan bahwa deteksi tersebut benar.

Masukan Tanda Tangan

Model mengambil gambar sebagai masukan.

Anggaplah gambar yang diharapkan berukuran 300x300 piksel, dengan tiga saluran (merah, biru, dan hijau) per piksel. Ini harus dimasukkan ke model sebagai buffer rata dengan nilai 270.000 byte (300x300x3). Jika model dikuantisasi , setiap nilai harus berupa satu byte yang mewakili nilai antara 0 dan 255.

Anda dapat melihat contoh kode aplikasi kami untuk memahami cara melakukan pra-pemrosesan ini di Android.

Tanda Tangan Keluaran

Model mengeluarkan empat larik, dipetakan ke indeks 0-4. Array 0, 1, dan 2 mendeskripsikan N objek yang terdeteksi, dengan satu elemen di setiap array terkait dengan setiap objek.

Indeks Nama Keterangan
0 Lokasi Array multidimensi [N] [4] nilai floating point antara 0 dan 1, array bagian dalam mewakili kotak pembatas dalam bentuk [atas, kiri, bawah, kanan]
1 Kelas Array N bilangan bulat (output sebagai nilai floating point) masing-masing menunjukkan indeks label kelas dari file label
2 Skor Array N nilai floating point antara 0 dan 1 mewakili probabilitas bahwa suatu kelas terdeteksi
3 Jumlah deteksi Nilai bilangan bulat N

Misalnya, bayangkan sebuah model telah dilatih untuk mendeteksi apel, pisang, dan stroberi. Saat diberikan gambar, ia akan menampilkan sejumlah hasil deteksi - dalam contoh ini, 5.

Kelas Skor Lokasi
apel 0,92 [18, 21, 57, 63]
pisang 0,88 [100, 30, 180, 150]
Stroberi 0,87 [7, 82, 89, 163]
pisang 0,23 [42, 66, 57, 83]
apel 0,11 [6, 42, 31, 58]

Skor kepercayaan diri

Untuk menginterpretasikan hasil ini, kita dapat melihat skor dan lokasi setiap objek yang terdeteksi. Skor tersebut merupakan angka antara 0 dan 1 yang menunjukkan keyakinan bahwa objek tersebut benar-benar terdeteksi. Semakin mendekati angka 1, maka semakin percaya diri model tersebut.

Bergantung pada aplikasi Anda, Anda dapat menentukan ambang batas yang di bawahnya Anda akan membuang hasil deteksi. Untuk contoh saat ini, batas yang masuk akal adalah skor 0,5 (yang berarti probabilitas 50% bahwa deteksi tersebut valid). Dalam hal ini, dua objek terakhir dalam array akan diabaikan karena skor keyakinannya di bawah 0,5:

Kelas Skor Lokasi
apel 0,92 [18, 21, 57, 63]
pisang 0,88 [100, 30, 180, 150]
Stroberi 0,87 [7, 82, 89, 163]
pisang 0,23 [42, 66, 57, 83]
apel 0,11 [6, 42, 31, 58]

Batasan yang Anda gunakan harus didasarkan pada apakah Anda lebih nyaman dengan hasil positif palsu (objek yang salah diidentifikasi, atau area gambar yang salah diidentifikasi sebagai objek padahal sebenarnya bukan), atau negatif palsu (objek asli yang terlewatkan karena kepercayaan diri mereka rendah).

Misalnya, pada gambar berikut, buah pir (yang bukan merupakan objek yang dilatih untuk dideteksi oleh model) salah diidentifikasi sebagai "orang". Ini adalah contoh positif palsu yang dapat diabaikan dengan memilih batas yang sesuai. Dalam kasus ini, batas 0,6 (atau 60%) akan mengecualikan positif palsu.

Tangkapan layar contoh Android menunjukkan positif palsu

Lokasi

Untuk setiap objek yang terdeteksi, model akan mengembalikan array empat angka yang mewakili persegi panjang pembatas yang mengelilingi posisinya. Untuk model starter yang disediakan, urutan nomornya sebagai berikut:

[ atas, kiri, dasar, Kanan ]

Nilai teratas mewakili jarak tepi atas persegi panjang dari bagian atas gambar, dalam piksel. Nilai kiri mewakili jarak tepi kiri dari kiri gambar masukan. Nilai lainnya mewakili tepi bawah dan kanan dengan cara yang sama.

Tolok ukur kinerja

Angka tolok ukur kinerja untuk model pemula kami dihasilkan dengan alat yang dijelaskan di sini .

Nama model Ukuran model Perangkat GPU CPU
COCO SSD MobileNet v1 27 Mb Piksel 3 (Android 10) 22 md 46 md*
Piksel 4 (Android 10) 20 md 29 md*
iPhone XS (iOS 12.4.1) 7,6 md 11 md**

* 4 benang digunakan.

** 2 thread digunakan di iPhone untuk hasil performa terbaik.

Kustomisasi Model

Model terlatih

Model deteksi yang dioptimalkan untuk seluler dengan beragam karakteristik latensi dan presisi dapat ditemukan di Detection Zoo . Masing-masing mengikuti tanda masukan dan keluaran yang dijelaskan di bagian berikut.

Sebagian besar zip unduhan berisi file model.tflite . Jika tidak ada, flatbuffer TensorFlow Lite dapat dibuat menggunakan petunjuk berikut . Model SSD dari TF2 Object Detection Zoo juga dapat dikonversi ke TensorFlow Lite menggunakan petunjuk di sini . Perlu diperhatikan bahwa model deteksi tidak dapat dikonversi secara langsung menggunakan TensorFlow Lite Converter , karena model tersebut memerlukan langkah perantara dalam menghasilkan model sumber yang ramah seluler. Skrip yang ditautkan di atas melakukan langkah ini.

Baik skrip pengekspor TF1 & TF2 memiliki parameter yang dapat mengaktifkan jumlah objek keluaran yang lebih besar atau pemrosesan pasca yang lebih lambat dan lebih akurat. Silakan gunakan --help dengan skrip untuk melihat daftar lengkap argumen yang didukung.

Saat ini, inferensi pada perangkat hanya dioptimalkan dengan model SSD. Dukungan yang lebih baik untuk arsitektur lain seperti CenterNet dan EfficientDet sedang diselidiki.

Bagaimana cara memilih model untuk disesuaikan?

Setiap model memiliki presisi (diukur berdasarkan nilai mAP) dan karakteristik latensinya sendiri. Anda harus memilih model yang paling sesuai dengan kasus penggunaan dan perangkat keras yang Anda inginkan. Misalnya, model Edge TPU ideal untuk inferensi pada Edge TPU Google di Pixel 4.

Anda dapat menggunakan alat tolok ukur kami untuk mengevaluasi model dan memilih opsi paling efisien yang tersedia.

Menyempurnakan model pada data khusus

Model terlatih yang kami sediakan dilatih untuk mendeteksi 90 kelas objek. Untuk daftar lengkap kelas, lihat file label di metadata model .

Anda dapat menggunakan teknik yang dikenal sebagai pembelajaran transfer untuk melatih ulang model agar dapat mengenali kelas yang tidak ada dalam rangkaian aslinya. Misalnya, Anda dapat melatih ulang model untuk mendeteksi beberapa jenis sayuran, meskipun hanya ada satu sayuran di data pelatihan asli. Untuk melakukan ini, Anda memerlukan sekumpulan gambar pelatihan untuk setiap label baru yang ingin Anda latih. Cara yang disarankan adalah menggunakan pustaka TensorFlow Lite Model Maker yang menyederhanakan proses pelatihan model TensorFlow Lite menggunakan kumpulan data khusus, dengan beberapa baris kode. Ini menggunakan pembelajaran transfer untuk mengurangi jumlah data dan waktu pelatihan yang diperlukan. Anda juga dapat belajar dari Colab deteksi beberapa jepretan sebagai contoh penyempurnaan model terlatih dengan beberapa contoh.

Untuk menyempurnakan kumpulan data yang lebih besar, lihat panduan berikut untuk melatih model Anda sendiri dengan TensorFlow Object Detection API: TF1 , TF2 . Setelah dilatih, mereka dapat dikonversi ke format ramah TFLite dengan instruksi di sini: TF1 , TF2