Jaringan saraf real-time untuk pelacakan tangan

Baru-baru ini, peneliti GoogleAI menunjukkan pendekatan mereka pada tugas melacak tangan dan menentukan gerakan secara real time. Saya terlibat dalam tugas yang sama dan karena itu memutuskan untuk mencari tahu bagaimana mereka mendekati solusi, teknologi apa yang mereka gunakan, dan bagaimana mereka mencapai akurasi yang baik selama bekerja secara real-time pada perangkat seluler. Juga meluncurkan model di android dan diuji dalam kondisi nyata.


Mengapa ini penting?


Pengenalan tangan adalah tugas yang agak sepele, yang pada saat yang sama banyak diminati. Teknologi ini dapat digunakan dalam aplikasi realitas tambahan untuk berinteraksi dengan objek virtual. Ini juga bisa menjadi dasar untuk memahami bahasa isyarat atau untuk membuat antarmuka kontrol berbasis gesture.

gambar

Apa kesulitannya?


Persepsi alami tangan secara real time merupakan tantangan nyata bagi penglihatan komputer, tangan seringkali tumpang tindih satu sama lain (jari bersilang atau berjabat tangan). Sementara wajah memiliki pola kontras tinggi, misalnya, di daerah mata dan mulut, tidak adanya tanda-tanda seperti itu di tangan membuat deteksi yang dapat diandalkan hanya dengan tanda-tanda visual mereka.

Tangan terus bergerak, mengubah sudut kemiringan dan saling tumpang tindih. Untuk pengalaman pengguna yang dapat diterima, pengakuan harus bekerja dengan FPS tinggi (25+). Selain itu, semua ini harus bekerja pada perangkat seluler, yang menambah persyaratan kecepatan, serta batas sumber daya.

Apa yang dilakukan GoogleAI?


Mereka menerapkan teknologi untuk pelacakan tangan dan jari secara tepat menggunakan pembelajaran mesin (ML). Program ini menentukan 21 titik kunci tangan dalam ruang 3D (tinggi, panjang dan kedalaman) dan berdasarkan data ini mengklasifikasikan gerakan yang ditunjukkan tangan. Semua ini berdasarkan hanya satu bingkai video, bekerja secara real time pada perangkat seluler dan timbangan dengan beberapa tangan.

Bagaimana mereka melakukannya?


Pendekatan ini diimplementasikan menggunakan MediaPipe , sebuah kerangka kerja lintas-platform open-source untuk membangun pipa pemrosesan data (video, audio, seri waktu). Sesuatu seperti Deepstream dari Nvidia, tetapi dengan banyak fitur dan lintas platform.

Solusinya terdiri dari 3 model utama yang bekerja bersama:

Palm Detector (BlazePalm)

  • mengambil gambar penuh dari video
  • mengembalikan kotak pembatas berorientasi (kotak pembatas)

Model untuk menentukan titik-titik kunci di tangan

  • mengambil gambar tangan yang dipotong
  • mengembalikan 21 poin kunci tangan dalam ruang 3D + indikator kepercayaan diri (detail lebih lanjut di artikel)

Algoritma pengenalan gerakan

  • mengambil poin kunci dari tangan
  • mengembalikan nama gerakan yang ditunjukkan tangan

Arsitekturnya mirip dengan yang digunakan dalam tugas estimasi pose . Dengan memberikan gambar tangan yang dipotong dan disejajarkan dengan tepat, kebutuhan untuk augmentasi data (rotasi, terjemahan, dan penskalaan) berkurang secara signifikan, dan sebagai gantinya model dapat berkonsentrasi pada akurasi prediksi koordinat.

Detektor telapak tangan


Untuk menemukan telapak tangan, model yang disebut BlazePalm digunakan - model detektor tembakan tunggal (SSD) yang dioptimalkan untuk bekerja pada perangkat seluler secara real time.

Sebuah studi GoogleAI melatih pendeteksi telapak tangan dan bukannya pendeteksi lengan keseluruhan (telapak tangan adalah dasar telapak tangan tanpa jari). Keuntungan dari pendekatan ini adalah bahwa lebih mudah untuk mengenali telapak tangan atau kepalan tangan daripada seluruh tangan dengan jari-jari yang bergerak, dan telapak tangan juga dapat dipilih menggunakan kotak pembatas kotak (jangkar), mengabaikan aspek rasio, dan dengan demikian mengurangi jumlah jangkar yang dibutuhkan oleh 3-5 kali

Feature Pyramid Networks for Object Detection (FPN) extractor fitur juga digunakan untuk lebih memahami konteks gambar bahkan untuk objek kecil.

Sebagai fungsi kerugian, focal loss diambil, yang mengatasi dengan baik ketidakseimbangan kelas yang terjadi saat menghasilkan sejumlah besar jangkar.

Entropi Lintas Klasik: CE (pt) = -log (pt)
Kehilangan Fokus: FL (pt) = - (1-pt) log (pt)

Informasi lebih lanjut tentang kehilangan panggilan dapat ditemukan di pager yang sangat baik dari Facebook AI Research (bacaan yang disarankan)

Dengan menggunakan teknik di atas, akurasi rata-rata 95,7% tercapai. Saat menggunakan cross-entropy sederhana dan tanpa FPN - 86,22%.

Menentukan Poin Kunci


Setelah detektor telapak tangan menentukan posisi telapak tangan di seluruh gambar, wilayah tersebut menggeser faktor tertentu ke atas dan mengembang untuk menutupi seluruh tangan. Selanjutnya pada gambar yang dipangkas, masalah regresi diselesaikan - posisi tepat 21 titik dalam ruang 3D ditentukan.

Untuk pelatihan, 30.000 gambar nyata ditandai secara manual. Model 3D tangan yang realistis juga dibuat dengan bantuan contoh buatan yang lebih banyak dihasilkan pada latar belakang yang berbeda.


Atas: Gambar tangan asli dengan titik kunci yang ditandai. Bawah: gambar buatan tangan yang dibuat menggunakan model 3D

Pengenalan gerakan


Untuk pengenalan gerakan, digunakan algoritma sederhana yang menentukan keadaan masing-masing jari (misalnya, melengkung atau lurus) oleh titik-titik kunci tangan. Maka semua kondisi ini dibandingkan dengan gerakan yang ada. Metode sederhana namun efektif ini memungkinkan Anda mengenali gerakan dasar dengan kualitas yang baik.

Optimalisasi


Rahasia utama dari inferensi cepat waktu-nyata tersembunyi dalam satu optimasi penting. Pendeteksi telapak tangan, yang paling memakan waktu, dimulai hanya jika diperlukan (sangat jarang). Ini dicapai dengan menghitung posisi tangan dalam bingkai berikutnya berdasarkan poin-poin kunci tangan sebelumnya.

Untuk keberlanjutan pendekatan ini, jalan keluar lain ditambahkan ke model untuk menentukan poin-poin penting - skalar yang menunjukkan seberapa percaya diri model adalah bahwa tangan hadir pada gambar yang dipangkas dan bahwa itu ditempatkan dengan benar. Ketika nilai kepercayaan jatuh di bawah ambang batas tertentu, detektor telapak tangan diluncurkan dan diterapkan ke seluruh bingkai.


Tes realitas


Saya meluncurkan solusi ini pada perangkat android (Xiaomi Redmi Note 5) untuk pengujian dalam kondisi nyata. Model ini berperilaku baik, memetakan kerangka tangan dengan benar dan menghitung kedalaman dengan jumlah bingkai yang layak per detik.


Dari minus, dimungkinkan untuk mencatat bagaimana akurasi dan kecepatan mulai tenggelam dengan gerakan tangan yang konstan di sepanjang bingkai. Hal ini disebabkan oleh kenyataan bahwa model terus menerus harus me-restart detektor, karena kehilangan posisi tangan ketika bergerak. Jika kecepatan menemukan tangan yang bergerak lebih penting bagi Anda daripada definisi gerakan, Anda harus mencari pendekatan lain.


Beberapa masalah juga terjadi ketika tangan bersinggungan dengan wajah atau latar belakang kompleks yang serupa. Kalau tidak, kerja bagus dari GoogleAI, ini merupakan kontribusi besar bagi pengembangan teknologi di masa depan.

Artikel Blog GoogleAI
Github pelacakan tangan mediapipe

Source: https://habr.com/ru/post/id466781/


All Articles