Contents
Pengantar
Pembelajaran mesin menggunakan pengenalan gambar secara ekstensif. Ada banyak opsi dan pendekatan, tetapi tidak ada yang memenuhi persyaratan kami. Untuk mengirim hasil pengenalan ke layanan cloud, kami memerlukan solusi lokal yang beroperasi di komputer kecil. Artikel ini menjelaskan cara kami menggunakan TensorFlow untuk membuat solusi pengenalan objek.
YOLO
Sistem deteksi objek real-time mutakhir yang dikenal sebagai YOLO, Anda dapat menemukan model SSD300, SSD500, YOLOv2, dan Tiny YOLO yang dilatih masing-masing pada set data VOC 2007+2012 dan COCO trainval. Selain itu, Anda dapat menemukan variasi tambahan set data pelatihan dan konfigurasi secara online, seperti YOLO9k.
Memungkinkan untuk memilih versi yang paling sesuai dengan kebutuhan Anda karena banyaknya varian yang tersedia. misalnya, adalah varian terkecil yang dapat berfungsi dengan cepat bahkan di smartphone dan Raspberry Pis. Kami menggunakan varian ini di proyek kami karena kami menyukainya.
DarkNet dan TensorFlow
Kerangka kerja DarkNet adalah inspirasi untuk model YOLO. Ada beberapa aspek kerangka kerja ini yang membuat kami tidak nyaman. Kerangka kerja ini menyimpan bobot data terlatih dalam format yang dapat dikenali dalam berbagai cara di berbagai platform. Masalah ini dapat berupa masalah karena sebagian besar waktu, Anda ingin melatih model Anda pada perangkat keras “cepat” sebelum menggunakannya di tempat lain. DarkNet ditulis dalam C dan tidak memiliki antarmuka pemrograman lain. Jika Anda perlu menggunakan bahasa pemrograman yang berbeda karena persyaratan platform atau preferensi pribadi, Anda harus bekerja lebih keras untuk mengintegrasikannya. Selain itu, ini hanya tersedia dalam format kode sumber, dan proses kompilasi mungkin sulit pada beberapa platform.
TensorFlow, di sisi lain, adalah platform komputasi yang berguna dan mudah beradaptasi. Dapat digunakan di sebagian besar platform dan dapat ditransfer. Python, C++, Java, Go, dan bahasa pemrograman lain yang didukung komunitas semuanya didukung oleh API TensorFlow. Kerangka kerja dapat diinstal hanya dengan satu klik dengan konfigurasi default, tetapi jika Anda membutuhkan lebih banyak, seperti dukungan untuk instruksi prosesor tertentu, Anda dapat dengan mudah merakitnya dari sumber dengan deteksi otomatis perangkat keras. TensorFlow juga dapat dengan mudah dijalankan di GPU. Anda hanya memerlukan tensorflow-gpu, paket pendukung GPU khusus, dan NVIDIA CUDA. Skalabilitas adalah kekuatan terbesar TensorFlow. TensorFlow dapat menggunakan pengelompokan untuk komputasi terdistribusi dan beberapa GPU untuk meningkatkan kinerja. Kami memutuskan untuk mengadaptasi model YOLO untuk TensorFlow guna mendapatkan yang terbaik dari kedua dunia.
YOLO adaptif untuk TensorFlow
Jadi tugas kami adalah mentransfer model YOLO ke TensorFlow. Kami ingin menghindari ketergantungan pihak ketiga dan menggunakan YOLO secara langsung dengan TensorFlow. Pada awalnya kami perlu port definisi model. Satu-satunya cara untuk melakukannya adalahh dengan mengulang definisi model lapis demi lapis. Beruntung bagi kami, ada banyak konverter open source yang dapat melakukan ini. Untuk tujuan kami, solusi yang paling cocok adalah DarkFlow. Ini menjalankan DarkNet di dalam tetapi kami tidak benar-benar membutuhkan bagian itu.
Sebagai gantinya, kami membuat fungsi DarkFlow langsung yang memungkinkan kami menyimpan pos pemeriksaan TensorFlow dengan grafik meta. Inti dari fungsi ini dapat ditemukan di sini. Anda dapat melakukannya dengan sendiri, tetapi jika Anda ingin mencoba model yang berbeda, akan jauh lebih mudah untuk mengubahnya daripada melakukannya lagi dengan sendiri. Model YOLO yang kami pilih memerlukan ukuran input yang sangat kecil : 608 x 608 piksel Kami membutuhkan antarmuka yang dapat menormalkan gambar sebelum memasukkannya ke dalam jaringan. Jadi, kami menulisnya. TensorFlow digunakan untuk normalisasi karena bekerja lebih cepat daripada model YOLO. opsi lain yang kami coba (openCV, Python asli, dan numpy).
Lapisan terakhir model YOLO mengembalikan fitur yang harus diproses menjadi sesuatu yang dapat dibaca oleh manusia. Untuk mendapatkan kotak pembatas, kami menambahkan beberapa operasi setelah lapisan terakhir. Pada akhirnya, kami mengembangkan modul Python yang memungkinkan kami untuk memulihkan model dari file, menormalkan data input, dan pasca-proses fitur model untuk mendapatkan kotak pembatas untuk kelas yang diprediksi.
Mengajarkan Model
Kami memutuskan untuk menggunakan model yang telah dilatih untuk tujuan kami. Situs web resmi YOLO menawarkan data terlatih. Mengimpor bobot DarkNet ke TensorFlow adalah tugas kami berikutnya. Prosedurnya adalah sebagai berikut :
- Baca info lapisan dari file konfigurasi DarkNet
- Baca data terlatih dari file bobot DarkNet sesuai dengan definisi lapisan
- Siapkan lapisan TensorFlow berdasarkan info lapisan DarkNet
- Tambahkan bias ke layer baru
- ulangi untuk setiap lapisan
Kami menggunakan DarkFlow untuk mencapai ini.
Arsitektur Model dan Aliran Data
Dengan setiap iterasi, pengklasifikasi membuat prediksi jenis objek apa yang ada di jendela. Ia melakukan ribuan prediksi per gambar, Karena proses sliding ini bekerja cukup lambat. Nama model YOLO, You Only Look Once, adalah keuntungan terbesarnya. Sebuah gambar dibagi menjadi grid sel oleh model ini. Dengan skor kepercayaan dan probabilitas kelas untuk kotak pembatas, setiap sel mencoba memprediksinya. Deteksi kelas akhir skor dihasilkan dengan mengalikan skor kepercayaan kotak pembatas individu dengan peta probabilitas kelas.
Penerapan
Anda dapat menemukan proyek pengujian kami di sini. Model TensorFlow YOLO2 yang sudah terlatih disediakan olehnya. 80 kelas dikenali oleh YOLO2. Instal beberapa dependensi tambahan yang diperlukan untuk tujuan demonstrasi untuk menjalankan ini (antarmuka model hanya memerlukan TensorFlow). Cukup jalankan python eval.py setelah instalasi, dan itu akan mengevaluasi aliran video dari webcam Anda, menampilkan hasilnya di jendela langsung, dan membuat prediksinya.
Tergantung pada perangkat keras yang menjalankan evaluasi, mungkin diperlukan beberapa waktu untuk menyelesaikan setiap frame. Satu frame mungkin memerlukan beberapa detik untuk dievaluasi pada Raspberry Pi. Selama evaluasi, skrip akan mengambil bingkai berikutnya yang tersedia setelah langkah evaluasi sebelumnya selesai. Skrip tidak akan melewatkan bingkai apa pun dalam video yang direkam. Agar proses tetap berjalan dalam waktu nyata, dapat diterima untuk melewatkan beberapa bingkai untuk sebagian besar aplikasi.
Integrasi IoT
Dan tentu saja, akan menyenangkan untuk mengintegrasikan layanan IoT ke dalam proyek ini serta memberikan hasil pengenalan di suatu tempat di mana layanan lain dapat mengaksesnya. Ada satu skrip demo lagi, python daemon.py, yang akan menjalankan server sederhana yang akan menampilkan aliran video dari webcam dengan prediksi di http://127.0.0.1:8000/events/.
Kesimpulan
Anda dapat melihat bahwa ada banyak proyek open source siap pakai untuk hampir semua masalah, semua yang perlu Anda lakukan adalah menggunakannya dengan benar. beberapa perubahan perlu dilakukan, tetapi itu jauh lebih mudah daripada membuat model baru dari awal. Fakta bahwa alat ini bekerja di seluruh platform adalah fitur yang hebat. Kita dapat membuat solusi pada PC desktop dan menggunakan kode yang sama pada papan ARM dengan Linux tertanam.Kami sangat berharap bahwa Anda akan menemukan proyek kami berguna dan kreatif, dan bahwa Anda akan open source itu.