Penilaian pose manusia
Beberapa bulan yang lalu saya menemukan satu proyek open source yang menarik di Internet - Openpose yang tujuannya adalah untuk memperkirakan pose manusia secara real-time pada aliran video. Karena aktivitas profesional saya, saya tertarik untuk menjalankannya di perangkat iOS terbaru dari Apple untuk memeriksa kinerja dan mencari tahu apakah itu mungkin. Itu juga menarik untuk melihat bagaimana kinerja kerangka kerja jaringan saraf untuk iOS telah berubah dalam beberapa tahun terakhir.
Proyek Openpose asli ditulis dalam C ++ dan tidak menggunakan CoreML - kerangka kerja jaringan saraf pada iOS. Oleh karena itu saya harus menulis ulang bagian inti di Swift dan menggunakan CoreML untuk melakukan pekerjaan kesimpulan. Mari kita lihat gambar berikut tentang bagaimana tubuh manusia diwakili:

Informasi lebih lanjut mengenai model pose manusia dapat ditemukan di sini: MPI-pose
Hasilnya ditunjukkan pada gambar di bawah ini:
Mempersiapkan model
Untuk mulai menggunakan kerangka kerja, model Core ML perlu dibuat. Model ini didasarkan pada satu dari proyek openpose . Untuk menyiapkan model, lakukan langkah-langkah berikut:
1) Instal alat Python dan CoreML
2) Jalankan model / getModels.sh dari Open Pose untuk mendapatkan model openpose yang asli
3) Salin model / pose / mpi / pose_deploy_linevec_faster_4_stages.prototxt ke model / pose / mpi / pose_deploy_linevec_faster_4_stages_fixed_size.prototxt
4) Ubah yang berikut ini dalam file pose_deploy_linevec_faster_4_stages_fixed_size.prototxt:
input_dim: 1 # This value will be defined at runtime -> input_dim: 512 input_dim: 1 # This value will be defined at runtime -> input_dim: 512
5) Buat tautan ke direktori model. Mari kita asumsikan bahwa proyek kerangka kerja pose dan proyek openpose ada di direktori home, maka perintah untuk membuat tautan adalah sebagai berikut:
ln -s ~/openpose/models ~/models
6) Buka ~ / pose / pose / CoreMLModels dan jalankan perintah berikut:
python convertModel.py
Skrip yang disebutkan di atas berisi nilai-nilai hardcoded ke file pose_deploy_linevec_faster_4_stages_fixed_size.prototxt dan model file pose_iter_160000.caffemodel.
Mereka dapat diubah ke beberapa model lain tetapi jangan lupa untuk mengubah file .prototxt menjadi ukuran tetap dari gambar input:
input_dim: XXX - sesuai dengan dengan input NN.
input_dim: XXX - sesuai dengan ketinggian input NN.
Juga jangan lupa untuk mengubah konfigurasi model PoseModelConfigurationMPI15.inputSize ke nilai input yang ditentukan dan gunakan konfigurasi ini alih-alih yang ada dalam kerangka kerja yang menetapkan 512x512 sebagai ukuran input.
Nilai apa pun akan berfungsi tetapi hasil terbaik dapat dicapai jika rasio aspek cocok dengan yang dimiliki gambar asli. Juga, harus diperhitungkan bahwa nilai-nilai yang lebih besar akan mempengaruhi kinerja secara signifikan yang ditunjukkan pada bagian Kinerja.
Rincian output jaringan saraf
Mari kita lihat lebih dekat output NN. Output dari model MPI15 adalah sekelompok matriks dengan dimensi (input_image_width / 8, input_image_height / 8)
. Setiap elemen dalam matriks memiliki tipe float. Pemetaan antara indeks matriks dalam output dan bagian tubuh:
POSE_MPI_BODY_PARTS { {0, "Head"}, {1, "Neck"}, {2, "RShoulder"}, {3, "RElbow"}, {4, "RWrist"}, {5, "LShoulder"}, {6, "LElbow"}, {7, "LWrist"}, {8, "RHip"}, {9, "RKnee"}, {10, "RAnkle"}, {11, "LHip"}, {12, "LKnee"}, {13, "LAnkle"}, {14, "Chest"}, {15, "Background"} };
Karena setiap matriks memiliki ukuran tetap mengakses satu tertentu adalah sepele dibaca oleh operasi offset: [Latar Belakang] = NNOutput [sizeOfTheMatrix * 15]
Heatmaps dan PAF
Ada dua jenis matriks keluaran dalam model MPI15. Yang mewakili heatmap dan lainnya yang mewakili PAF. Setiap matriks panas berhubungan dengan satu bagian sambungan yang totalnya 15. Matriks PAF mewakili koneksi tubuh. Untuk setiap koneksi tubuh, ada matriks X dan Y yang berjumlah 28 (14 + 14). Jumlah total matriks termasuk latar belakang adalah 44.
Proyek demo
Repositori proyek juga berisi proyek demo 'poseDemo' yang menunjukkan penggunaan kerangka kerja. Matriks hasil NN untuk gambar input tertentu ditunjukkan di bawah ini:
Proyek sasaran tidak akan berguna tanpa pengukuran kinerja. Terlihat jelas dalam hasil di bawah ini bahwa Apple melakukan peningkatan performa luar biasa dari mesin NN pada model terakhir. Selain itu, menurut prediksi analis, Apple akan membuat perangkat keras NN lebih cepat di iPhone mendatang. Hasil pengukuran kinerja ditunjukkan di bawah ini:
Saatnya memproses satu frame (1-2 orang dalam tampilan)
Perlu disebutkan bahwa semua angka yang ditunjukkan di atas dapat bervariasi untuk setiap proses tertentu. Saya berasumsi itu terjadi karena optimasi internal CoreML.
Sumber kode
Tautan ke repositori GitHub: Klik untuk memeriksanya
Aplikasi
Penting untuk diperhatikan bahwa semua aplikasi yang disebutkan di bawah ini keluar dari kepala dan tidak secara resmi dikonfirmasi oleh Apple atau otoritas tertentu.
Layanan kesehatan
1) Mendeteksi anomali di tulang belakang manusia pada gambar foto:

2) Panduan kesehatan dan kebugaran.
1) Mendeteksi jika orang-orang di rumah dan memeriksa apakah semua peralatan dimatikan (besi / burung hantu).
2) Menemukan orang di dalam ruang tamu dan melakukan otomatisasi (menyalakan lampu / musik / tv)
Plugin untuk aplikasi studio seni
1) 2D -> pemetaan dan pose 3D yang menyimpulkan untuk merekonstruksi pose 3D berdasarkan sumber 2D
Perbaikan dan pengembangan lebih lanjut
Ada beberapa perbaikan yang dapat dilakukan untuk meningkatkan kinerja langkah pasca-pemrosesan dan membuatnya lebih tepat. Juga, mungkin menarik untuk menggabungkannya dengan pemetaan 2D-> 3D untuk merekonstruksi pose 3D. Daftar kemungkinan peningkatan ditunjukkan di bawah ini:
1) optimasi NMS. Implementasi GPU paralel menggunakan API LOGAM.
2) Gunakan pendekatan yang berbeda untuk koneksi sendi yang lebih dekat dengan tulang kerangka kehidupan nyata. Tulang tidak lurus.
3) Terapkan penyaringan yang lebih kuat untuk pose keluaran untuk menghilangkan artefak.
4) Menerapkan estimasi pose pada streaming video
5) 2D -> pemetaan 3D
Bagi mereka yang tertarik dengan latar belakang proyek ini dan Openpose dapat menemukan informasi berguna di bawah ini:
1) http://posefs1.perception.cs.cmu.edu/Users/ZheCao/Multi-person%20pose%20estimation-CMU.pdf
2) https://www.ri.cmu.edu/wp-content/uploads/2017/04/thesis.pdf
3) https://pose.mpi-inf.mpg.de/
Menyenangkan
Itu selalu menarik untuk melihat bagaimana aplikasi teknologi akan bekerja dengan input yang tidak biasa. Beberapa hasil yang menyenangkan ditunjukkan di bawah ini. Harap perhatikan bagaimana NN meramalkan kaki di mana ia sebenarnya tersembunyi:
Kesimpulan
Dalam artikel ini, aplikasi iOS untuk menyimpulkan pose manusia dijelaskan. Menurut hasil kinerja itu jelas terlihat bahwa Apple melakukan lompatan raksasa dalam kinerja mesin jaringan saraf. Apalagi model iPhone berikutnya sangat mungkin akan memungkinkan melakukan menyimpulkan secara realtime. Menggabungkannya dengan rekonstruksi pose 3D> 2D-> membuka kemungkinan dalam menyimpulkan pose manusia 3D secara real-time pada aliran video!