Algoritma pengenalan pola pembelajaran sekali pakai

Pendahuluan


Saya ingin menyajikan kepada Anda hasil eksperimen saya dengan algoritma pengenalan gambar dengan pembelajaran pertama kali (yang disebut Pembelajaran Satu Pemotretan). Sebagai hasil dari percobaan, pendekatan tertentu untuk penataan gambar dikembangkan dan, sebagai hasilnya, mereka diwujudkan dalam beberapa algoritma yang saling berhubungan dan aplikasi pengujian di Android, dengan mana Anda dapat memeriksa kualitas dan kinerja algoritma.


Tujuan saya adalah membuat algoritma dengan prinsip kerja yang jelas yang dapat menemukan dependensi abstrak dalam gambar pertama kali (untuk belajar) dan menunjukkan kualitas pengakuan yang dapat diterima (mencari dependensi abstrak tersebut) dalam siklus pengenalan berikutnya. Pada saat yang sama, logika pengambilan keputusan harus transparan, menerima analisis, lebih dekat ke algoritma linier. Pada skala bersyarat di mana di satu ujung otak dan di sisi lain adalah mesin CNC, itu jauh lebih dekat ke mesin daripada jaringan saraf.


Mengapa bukan jaringan saraf?


Saat ini, jaringan saraf memerintah dalam tugas-tugas pengenalan, khususnya CNN adalah semacam standar untuk pengenalan pola. Namun, menurut saya, aplikasi mereka tidak terbatas dan pendekatan lain perlu dicari.


Saya akan memberikan beberapa alasan terhadap jaringan saraf:


  1. Dataset besar diperlukan untuk pelatihan, yang mungkin tidak tersedia.
  2. Kekuatan besar untuk belajar dan waktu belajar yang hebat untuk setiap gambar
  3. Opacity dari algoritma, ketidakmampuan untuk debug dan pengaruh langsung pada hasilnya. Sangat sulit jika bukan tidak mungkin untuk memahami logika distribusi bobot. Ini adalah kekuatan dan kelemahan.

Bagaimana cara kerjanya


Ide dasarnya adalah ini: sampel gambar harus disusun, mis. informasi di dalamnya harus dikurangi seminimal mungkin, tetapi agar maknanya tidak hilang. Misalnya, seniman menggambar sketsa - hanya dalam beberapa baris yang tepat, seorang seniman dapat menggambarkan wajah seseorang atau beberapa objek dan pemirsa akan mengerti apa yang digambarkan. Sebuah foto berisi matriks piksel N * M, setiap piksel berisi beberapa bit informasi warna, dan jika Anda bayangkan semua ini dalam bentuk parameter garis, jumlah informasi berkurang tajam dan pemrosesan informasi semacam itu jauh lebih sederhana. Algoritme harus melakukan kira-kira hal yang sama. Dia harus menyoroti detail utama dalam bingkai - yang membawa informasi dasar dan membuang semua yang tidak perlu.



Algoritma menemukan struktur vektor di sepanjang batas objek dalam sampel dan struktur yang sama dalam gambar yang dikenali.



Untuk mendapatkan vektor, gambar melewati beberapa tahap pemrosesan:


  • Diterjemahkan ke monokrom menggunakan rumus sederhana (Merah + Hijau + Biru) / 3
  • Gradien dihitung untuk setiap titik matriks.
  • Daerah bobot paling signifikan dari gradien ditemukan
  • Kami mencari rantai vektor yang mencakup area ini
  • Selanjutnya, langkah-langkah diulang untuk mendapatkan jumlah minimum vektor yang membawa informasi maksimum.


Hal yang sama terjadi pada algoritma yang dianalisis. Selanjutnya, array vektor yang dihasilkan dibandingkan:


  • Pertama, algoritma mencoba untuk melekat pada beberapa bagian yang serupa (cluster lokal). Misalnya, ia dapat menemukan alis yang mirip dengan alis dalam sampel, dan kemudian menemukan hidung yang terlihat seperti hidung.
  • Dan kemudian hubungan serupa antara kluster lokal dicari. Misalnya, alis + hidung + alis lain. Sudah memperoleh kluster yang lebih kompleks.
  • Dll sampai Anda mendapatkan gambar hubungan antara kluster yang mengumpulkan semua atau hampir semua vektor gambar. Yaitu mis. alis, mata, hidung, dll. Wajah tidak akan berfungsi.

Dengan demikian, detail kecil termasuk dalam gambar keseluruhan dan pengenalan pola seperti longsoran terjadi .
Klasifikasi itu sendiri dibangun berdasarkan prinsip menemukan gambar yang paling mirip dari yang disimpan. Yang paling mirip adalah yang memiliki jumlah vektor pencocokan terbesar dengan penyimpangan terkecil sehubungan dengan volume total vektor dalam sampel.


Skema umum pengoperasian algoritma:



Pelatihan multi-tahap


Terlepas dari kenyataan bahwa algoritma dapat bekerja secara efisien dari satu sampel, dimungkinkan untuk meningkatkan akurasi pengenalan dengan menganalisis beberapa sampel. Itu tidak diterapkan dalam versi demo, jadi saya hanya akan berbicara tentang fitur ini, ini sangat sederhana. Prinsip pelatihan pada beberapa sampel adalah membuang vektor yang tidak perlu. Yang ekstra adalah yang tidak termasuk dalam kelompok vektor yang ditemukan bersama. Misalnya, mungkin ada bayangan pada sampel yang dikenali sebagai perbatasan, tetapi mungkin tidak pada sampel berikutnya.


Jadi, jika vektor adalah bagian dari kluster yang ditemukan dalam sampel yang disimpan dan yang dianalisis, maka ia mendapat +1 poin, dan jika tidak, ia tidak akan mendapatkan apa pun. Setelah beberapa pelatihan, vektor yang mencetak poin kecil dihapus dari sampel yang disimpan dan tidak lagi digunakan untuk analisis.


Anda juga dapat membuat editor visual yang hanya memungkinkan Anda untuk menghapus vektor yang tidak diinginkan dari bingkai setelah pelatihan pertama.


Apa yang bisa digunakan


Jujur, saya memusatkan semua upaya saya pada algoritma itu sendiri. Meskipun sejak itu Saya bekerja dengan lingkungan solusi bisnis dan otomatisasi produksi, lalu satu aplikasi yang saya lihat - pengakuan produk di gudang dan jalur produksi - tidak ada set data besar di sini - maka sampel perlu diperlihatkan 1 kali dan kemudian dikenali. Sebagai pengikat barcode hanya tanpa barcode. Namun secara umum, aplikasi ini sama dengan algoritma pengenalan lainnya. Aplikasi ini karena kemampuan dan keterbatasan algoritma.


Aplikasi tes



Aplikasi ini bekerja dengan matriks 100 * 100 piksel, mengubah gambar menjadi matriks monokrom dengan ukuran ini. Algoritma tidak peduli pada sudut sampel apa dan dimensinya juga dalam batas-batas tertentu.


Di sebelah kiri, hasil menyoroti area signifikan dari gambar saat ini dan vektor yang cocok di dalamnya (hijau) ditunjukkan, dan di sebelah kanan ditampilkan struktur vektor yang ditemukan dan yang paling cocok dari yang disimpan dan vektor serupa disorot dalam warna merah pada struktur yang disimpan. Jadi, merah dan hijau menyoroti struktur vektor yang dianggap mirip oleh algoritma.


Anda dapat menyimpan banyak sampel. Dan menampilkan gambar baru, algoritma akan menemukan yang paling cocok dan menunjukkan bagian yang serupa.

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


All Articles