Cara cepat untuk mengenali teks. Beberapa perkataan tentang pengecaman corak. Komponen Rangkaian Neural

Dengan bantuan banyak animasi menggunakan contoh masalah pengecaman digit dan model perceptron, pengenalan visual kepada proses latihan rangkaian saraf diberikan.

Video pertama adalah mengenai struktur komponen rangkaian neural, yang kedua - latihannya, yang ketiga - algoritma proses ini. Tugas klasik mengenal nombor tulisan tangan telah diambil sebagai tugas latihan.

Perceptron berbilang lapisan dipertimbangkan secara terperinci - model asas (tetapi sudah agak kompleks) untuk memahami mana-mana versi rangkaian saraf yang lebih moden.

1. Komponen rangkaian saraf

Tujuan video pertama adalah untuk menunjukkan apa itu rangkaian saraf. Menggunakan contoh tugas pengecaman digit, struktur komponen rangkaian saraf divisualisasikan. Video itu mempunyai sari kata Rusia.

Pernyataan masalah pengecaman nombor

Bayangkan anda mempunyai nombor 3, yang dipaparkan pada resolusi yang sangat rendah iaitu 28x28 piksel. Otak anda boleh mengenali nombor ini dengan mudah.

Dari perspektif Teknologi komputer Sungguh mengagumkan betapa mudahnya otak melakukan operasi ini, walaupun susunan piksel yang tepat sangat berbeza dari satu imej ke imej seterusnya. Sesuatu dalam korteks visual kami memutuskan bahawa ketiga-tiga, tidak kira bagaimana ia digambarkan, mewakili entiti yang sama. Oleh itu, tugas mengenal nombor dalam konteks ini dianggap mudah.

Tetapi jika anda diminta untuk menulis program yang mengambil sebagai input imej sebarang nombor dalam bentuk tatasusunan 28x28 piksel dan mengeluarkan "intipati" itu sendiri - nombor dari 0 hingga 9, maka tugas ini tidak lagi kelihatan mudah .

Seperti namanya, struktur rangkaian saraf agak hampir dengan struktur rangkaian saraf otak. Buat masa ini, untuk kesederhanaan, kita akan membayangkan bahawa dalam erti kata matematik dalam rangkaian saraf, neuron difahami sebagai bekas tertentu yang mengandungi nombor dari sifar hingga satu.

Pengaktifan neuron. Lapisan rangkaian saraf

Oleh kerana grid kami terdiri daripada 28x28=784 piksel, jadikan terdapat 784 neuron yang mengandungi nombor yang berbeza 0 hingga 1: semakin dekat piksel kepada warna putih, semakin hampir nombor yang sepadan dengan satu. Mari kita panggil nombor ini yang mengisi pengaktifan neuron grid. Anda boleh memikirkan ini seolah-olah neuron menyala seperti mentol lampu apabila ia mengandungi nombor berhampiran 1 dan padam apabila ia mengandungi nombor hampir 0.

784 neuron yang diterangkan membentuk lapisan pertama rangkaian saraf. Lapisan terakhir mengandungi 10 neuron, setiap satunya sepadan dengan satu daripada sepuluh digit. Dalam nombor ini, pengaktifan juga merupakan nombor antara sifar dan satu, mencerminkan betapa yakin sistem itu bahawa imej input mengandungi digit yang sepadan.

Terdapat juga beberapa lapisan tengah yang dipanggil lapisan tersembunyi, yang akan kita sampaikan sebentar lagi. Pilihan bilangan lapisan tersembunyi dan neuron yang terkandung di dalamnya adalah sewenang-wenangnya (kami memilih 2 lapisan 16 neuron setiap satu), tetapi biasanya ia dipilih daripada idea tertentu tentang masalah yang diselesaikan oleh rangkaian saraf.

Prinsip operasi rangkaian saraf ialah pengaktifan dalam satu lapisan menentukan pengaktifan pada lapisan seterusnya. Apabila teruja, kumpulan neuron tertentu menyebabkan pengujaan kumpulan lain. Jika anda memindahkan nilai pengaktifan ke lapisan pertama rangkaian saraf terlatih mengikut kecerahan setiap piksel gambar, rantaian pengaktifan dari satu lapisan rangkaian saraf ke lapisan seterusnya akan membawa kepada pengaktifan keutamaan satu daripada neuron lapisan terakhir yang sepadan dengan digit yang diiktiraf - pilihan rangkaian saraf.

Tujuan lapisan tersembunyi

Sebelum mendalami matematik tentang bagaimana satu lapisan mempengaruhi lapisan seterusnya, bagaimana pembelajaran berlaku, dan bagaimana rangkaian saraf menyelesaikan masalah mengenal nombor, mari kita bincangkan mengapa struktur berlapis tersebut boleh bertindak dengan bijak. Apakah yang dilakukan oleh lapisan perantaraan antara lapisan input dan output?

Bentuk Lapisan Imej

Dalam proses mengenal nombor, kami membawa bersama pelbagai komponen. Sebagai contoh, sembilan terdiri daripada bulatan di atas dan garisan di sebelah kanan. Angka lapan juga mempunyai bulatan di bahagian atas, tetapi bukannya garis di sebelah kanan, ia mempunyai sepasang bulatan di bahagian bawah. Empat itu boleh diwakili sebagai tiga baris yang disambungkan dengan cara tertentu. Dan sebagainya.

Dalam kes yang ideal, kami menjangkakan setiap neuron dalam lapisan kedua memetakan kepada salah satu komponen ini. Dan, apabila anda, sebagai contoh, menghantar imej dengan bulatan di bahagian atas ke rangkaian saraf, terdapat neuron tertentu yang pengaktifannya akan menjadi lebih dekat dengan satu. Oleh itu, peralihan dari lapisan tersembunyi kedua ke lapisan keluaran sepadan dengan pengetahuan tentang set komponen yang sepadan dengan digit mana.

Lapisan imej unit struktur

Tugasan pengecaman bulatan juga boleh dibahagikan kepada subtugas. Sebagai contoh, mengenali pelbagai tepi kecil dari mana ia terbentuk. Begitu juga, garis menegak yang panjang boleh dianggap sebagai corak yang menghubungkan beberapa kepingan yang lebih kecil. Oleh itu, kita boleh berharap bahawa setiap neuron dari lapisan tersembunyi pertama rangkaian saraf melakukan operasi mengenali tepi kecil ini.

Oleh itu, imej input membawa kepada pengaktifan neuron tertentu lapisan tersembunyi pertama, mentakrifkan kepingan kecil ciri, neuron ini seterusnya mengaktifkan bentuk yang lebih besar, akibatnya mengaktifkan neuron lapisan keluaran yang dikaitkan dengan angka tertentu.

Sama ada rangkaian saraf akan bertindak dengan cara ini atau tidak adalah satu lagi soalan yang anda akan kembali apabila membincangkan proses melatih rangkaian. Walau bagaimanapun, ini boleh menjadi panduan, sejenis matlamat untuk struktur berlapis tersebut.

Sebaliknya, takrifan tepi dan corak sedemikian berguna bukan sahaja dalam tugas mengenal nombor, tetapi juga dalam masalah mengenal pasti imej secara umum.

Dan bukan sahaja untuk mengenali nombor dan imej, tetapi juga tugas intelektual lain yang boleh dipecahkan kepada lapisan abstraksi. Contohnya, untuk pengecaman pertuturan, audio mentah diekstrak bunyi individu, suku kata, perkataan, kemudian frasa, pemikiran yang lebih abstrak, dsb.

Menentukan kawasan pengecaman

Untuk lebih spesifik, mari kita bayangkan bahawa matlamat neuron tunggal dalam lapisan tersembunyi pertama adalah untuk menentukan sama ada gambar itu mengandungi tepi di rantau yang ditandakan dalam gambar.

Soalan pertama ialah: tetapan apakah yang perlu ada pada rangkaian saraf untuk dapat mengesan corak ini atau mana-mana corak piksel yang lain.

Mari kita tetapkan berat berangka w i kepada setiap sambungan antara neuron kita dan neuron daripada lapisan input. Kemudian kami mengambil semua pengaktifan dari lapisan pertama dan mengira jumlah wajarannya mengikut pemberat ini.

Oleh kerana bilangan pemberat adalah sama dengan bilangan pengaktifan, ia juga boleh dipetakan ke grid yang serupa. Kami akan menandakan pemberat positif dengan piksel hijau dan yang negatif dengan piksel merah. Kecerahan piksel akan sepadan dengan nilai mutlak berat.

Sekarang jika kita menetapkan semua berat sama dengan sifar, kecuali untuk piksel yang sepadan dengan templat kami, maka jumlah wajaran akan dikurangkan kepada penjumlahan nilai pengaktifan piksel dalam kawasan yang kami minati.

Jika anda ingin menentukan sama ada terdapat tepi di sana, anda boleh menambah tepi pemberat merah di sekeliling segi empat tepat berat hijau, sepadan dengan pemberat negatif. Kemudian jumlah wajaran untuk kawasan ini akan menjadi maksimum apabila piksel tengah imej dalam bahagian ini lebih cerah dan piksel di sekelilingnya lebih gelap.

Skala pengaktifan kepada selang

Dengan mengira jumlah wajaran sedemikian, anda boleh mendapatkan sebarang nombor julat yang luas nilai. Agar ia jatuh ke dalam julat pengaktifan yang diperlukan dari 0 hingga 1, adalah munasabah untuk menggunakan fungsi yang akan "memampatkan" keseluruhan julat kepada selang .

Selalunya fungsi logistik sigmoid digunakan untuk penskalaan ini. Lebih banyak nilai mutlak nombor input negatif, semakin hampir nilai sigmoid keluaran kepada sifar. Lebih besar nombor input positif, lebih dekat nilai fungsi kepada satu.

Oleh itu, penembakan neuron pada asasnya adalah ukuran seberapa positif jumlah wajaran yang sepadan. Untuk mengelakkan neuron daripada diaktifkan pada tahap rendah nombor positif, anda boleh menambah beberapa nombor negatif pada jumlah wajaran - anjakan (bias Inggeris), yang menentukan berapa besar jumlah wajaran mestilah untuk mengaktifkan neuron.

Setakat ini perbualan hanya mengenai satu neuron. Setiap neuron dalam lapisan tersembunyi pertama disambungkan kepada semua neuron 784 piksel dalam lapisan pertama. Dan setiap satu daripada 784 sambungan ini akan mempunyai berat sendiri yang dikaitkan dengannya. Selain itu, setiap neuron dalam lapisan tersembunyi pertama mempunyai anjakan berkaitan yang ditambahkan pada jumlah wajaran sebelum sigmoid "memampatkan" nilai tersebut. Oleh itu, untuk lapisan tersembunyi pertama terdapat pemberat 784x16 dan 16 anjakan.

Sambungan antara lapisan lain juga mengandungi pemberat dan terjemahan yang berkaitan dengannya. Oleh itu, untuk contoh yang diberikan, kira-kira 13 ribu pemberat dan anjakan yang menentukan kelakuan rangkaian saraf bertindak sebagai parameter boleh dikonfigurasikan.

Untuk melatih rangkaian saraf untuk mengenali nombor bermakna memaksa komputer untuk mencari nilai yang betul untuk semua nombor ini supaya ia menyelesaikan masalah. Bayangkan melaraskan semua berat itu dan beralih dengan tangan. Ini adalah salah satu hujah yang berkesan untuk merawat rangkaian saraf sebagai kotak hitam - hampir mustahil untuk mengesan tingkah laku bersama semua parameter secara mental.

Penerangan tentang rangkaian neural dari segi algebra linear

Mari kita bincangkan cara padat untuk mewakili sambungan rangkaian saraf secara matematik. Mari gabungkan semua pengaktifan lapisan pertama ke dalam vektor lajur. Kami akan menggabungkan semua pemberat ke dalam matriks, setiap barisnya menerangkan hubungan antara neuron satu lapisan dengan neuron tertentu seterusnya (jika anda menghadapi sebarang kesulitan, lihat kursus yang kami terangkan). Hasil daripada pendaraban matriks dengan vektor, kami memperoleh vektor yang sepadan dengan jumlah wajaran pengaktifan lapisan pertama. Mari tambahkan produk matriks dengan vektor anjakan dan bungkusnya dengan fungsi sigmoid untuk menskalakan selang nilai. Akibatnya, kami mendapat lajur pengaktifan yang sepadan.

Jelas sekali, bukannya lajur dan matriks, seperti biasa dalam algebra linear, tatatanda pendeknya boleh digunakan. Ini menjadikan yang sepadan kod program lebih mudah dan cepat, kerana perpustakaan pembelajaran mesin dioptimumkan untuk pengiraan vektor.

Penjelasan tentang pengaktifan neuron

Sudah tiba masanya untuk menjelaskan pemudahan yang kami mulakan. Neuron sepadan bukan sahaja dengan nombor pengaktifan, tetapi dengan fungsi pengaktifan yang mengambil nilai dari semua neuron lapisan sebelumnya dan mengira nilai output dalam julat dari 0 hingga 1.

Malah, keseluruhan rangkaian saraf adalah satu fungsi besar, boleh disesuaikan melalui latihan, dengan 13 ribu parameter, menerima 784 nilai input dan menghasilkan kebarangkalian bahawa imej itu sepadan dengan salah satu daripada sepuluh digit yang bertujuan untuk pengiktirafan. Walau bagaimanapun, walaupun kerumitannya, ia hanyalah satu fungsi, dan dari segi logiknya ia kelihatan rumit, kerana jika ia lebih mudah, fungsi ini tidak akan dapat menyelesaikan masalah mengenal nombor.

Sebagai tambahan, kami akan membincangkan fungsi pengaktifan yang sedang digunakan untuk memprogram rangkaian saraf.

Tambahan: sedikit tentang fungsi pengaktifan. Perbandingan Sigmoid dan ReLU

Mari kita sentuh secara ringkas topik fungsi yang digunakan untuk "memampatkan" julat nilai pengaktifan. Fungsi sigmoid ialah contoh yang meniru neuron biologi dan digunakan dalam kerja awal pada rangkaian saraf, tetapi fungsi ReLU yang lebih ringkas kini lebih biasa digunakan untuk menjadikan latihan rangkaian saraf lebih mudah.

Fungsi ReLU mengikut analogi biologi bahawa neuron boleh berada dalam keadaan aktif atau tidak. Jika ambang tertentu diluluskan, maka fungsi itu dicetuskan, dan jika ia tidak diluluskan, maka neuron hanya kekal tidak aktif, dengan pengaktifan sama dengan sifar.

Ternyata untuk rangkaian multilayer dalam, fungsi ReLU berfungsi dengan baik dan selalunya tidak ada gunanya menggunakan fungsi sigmoid yang lebih sukar untuk dikira.

2. Melatih rangkaian saraf untuk mengenal nombor

Persoalannya timbul: bagaimana rangkaian yang diterangkan dalam pelajaran pertama mencari pemberat dan anjakan yang sesuai hanya berdasarkan data yang diterima? Pelajaran kedua bercakap tentang ini.

DALAM Pandangan umum Algoritma ini terdiri daripada menunjukkan rangkaian saraf satu set data latihan yang mewakili pasangan imej nombor tulisan tangan dan perwakilan matematik abstrak mereka.

Secara garis besar

Hasil daripada latihan, rangkaian saraf harus membezakan nombor dengan betul daripada data ujian yang tidak dibentangkan sebelum ini. Sehubungan itu, sebagai ujian untuk latihan rangkaian saraf, anda boleh menggunakan nisbah bilangan tindakan pengecaman digit yang betul kepada bilangan elemen sampel ujian.

Dari mana datangnya data latihan? Masalah yang sedang dipertimbangkan adalah sangat biasa, dan untuk menyelesaikannya, pangkalan data MNIST yang besar telah dicipta, yang terdiri daripada 60 ribu data berlabel dan 10 ribu imej ujian.

Fungsi kos

Secara konseptual, tugas melatih rangkaian saraf datang untuk mencari minimum fungsi tertentu-fungsi kos. Mari kita huraikan apa itu.

Seperti yang anda ingat, setiap neuron lapisan seterusnya disambungkan kepada neuron lapisan sebelumnya, dan berat sambungan ini serta anjakan keseluruhan menentukan fungsi pengaktifannya. Untuk mendapatkan tempat untuk bermula, kita boleh memulakan semua pemberat dan anjakan ini dengan nombor rawak.

Oleh itu, pada saat awal, rangkaian saraf yang tidak terlatih sebagai tindak balas kepada imej nombor yang diberi, sebagai contoh, imej tiga kali ganda, lapisan keluaran menghasilkan jawapan rawak sepenuhnya.

Untuk melatih rangkaian saraf, kami akan memperkenalkan fungsi kos, yang akan, seolah-olah, memberitahu komputer sekiranya hasil yang serupa: "Tidak, komputer yang buruk! Nilai pengaktifan mestilah sifar untuk semua neuron kecuali satu yang betul."

Menetapkan fungsi kos untuk pengecaman digit

Secara matematik, fungsi ini mewakili jumlah perbezaan kuasa dua antara nilai pengaktifan sebenar lapisan keluaran dan nilai idealnya. Sebagai contoh, dalam kes tiga kali ganda, pengaktifan hendaklah sifar untuk semua neuron kecuali tiga kali ganda yang sepadan, yang mana ia adalah sama dengan satu.

Ternyata untuk satu imej kita boleh menentukan satu nilai semasa fungsi kos. Jika rangkaian saraf dilatih, nilai ini akan menjadi kecil, idealnya cenderung kepada sifar, dan sebaliknya: semakin besar nilai fungsi kos, semakin teruk rangkaian saraf dilatih.

Oleh itu, untuk seterusnya menentukan sejauh mana rangkaian saraf dilatih, adalah perlu untuk menentukan nilai purata fungsi kos untuk semua imej set latihan.

Ini adalah tugas yang agak sukar. Jika rangkaian saraf kita mempunyai 784 piksel sebagai input, 10 nilai sebagai output dan memerlukan 13 ribu parameter untuk mengiranya, maka fungsi kos adalah fungsi 13 ribu parameter ini, menghasilkan satu nilai kos tunggal yang ingin kita minimumkan , dan pada masa yang sama Keseluruhan set latihan berfungsi sebagai parameter.

Bagaimana untuk menukar semua berat dan anjakan ini supaya rangkaian saraf belajar?

Keturunan Kecerunan

Sebagai permulaan, daripada mewakili fungsi dengan 13 ribu nilai input, kita akan bermula dengan fungsi satu pembolehubah C(w). Seperti yang anda mungkin ingat dari kursus analisis matematik, untuk mencari minimum fungsi, anda perlu mengambil derivatif.

Walau bagaimanapun, bentuk fungsi boleh menjadi sangat kompleks, dan satu strategi yang fleksibel ialah bermula pada titik sewenang-wenangnya dan bekerja ke bawah dalam nilai fungsi. Mengulangi prosedur ini dalam setiap titik seterusnya, anda secara beransur-ansur boleh mencapai fungsi minimum setempat, sama seperti bola yang bergolek menuruni bukit.

Seperti yang ditunjukkan oleh rajah di atas, fungsi boleh mempunyai banyak minima tempatan, dan minimum tempatan yang mana algoritma berakhir bergantung pada pilihan titik permulaan, dan tidak ada jaminan bahawa minimum yang ditemui ialah nilai minimum yang mungkin bagi fungsi kos. Ini perlu diingat. Di samping itu, untuk tidak "melebihi" nilai minimum tempatan, anda perlu menukar saiz langkah mengikut perkadaran dengan cerun fungsi.

Untuk menjadikan tugas ini sedikit lebih rumit, bukannya fungsi satu pembolehubah, anda boleh bayangkan fungsi dua pembolehubah dengan satu nilai output. Fungsi yang sepadan untuk mencari arah yang paling banyak turun cepat mewakili kecerunan negatif -∇С. Kecerunan dikira, satu langkah diambil ke arah -∇С, prosedur diulang sehingga kita mendapati diri kita berada pada tahap minimum.

Idea yang diterangkan dipanggil keturunan kecerunan dan boleh digunakan untuk mencari minimum bukan sahaja fungsi dua pembolehubah, tetapi juga 13 ribu, dan sebarang bilangan pembolehubah lain. Bayangkan semua pemberat dan anjakan membentuk satu vektor lajur besar w. Untuk vektor ini, kita boleh mengira vektor kecerunan yang sama bagi fungsi kos dan bergerak ke arah yang sesuai dengan menambah vektor yang terhasil dengan vektor w. Maka ulangi prosedur ini sehingga fungsi C(w) mencapai tahap minimum.

Komponen Keturunan Kecerunan

Untuk rangkaian saraf kami, langkah ke arah nilai yang lebih kecil bagi fungsi kos akan bermakna semakin kurang tingkah laku rawak rangkaian saraf sebagai tindak balas kepada data latihan. Algoritma untuk mengira kecerunan ini dengan cekap dipanggil perambatan balik dan akan dibincangkan secara terperinci dalam bahagian seterusnya.

Untuk keturunan kecerunan Adalah penting bahawa nilai output fungsi kos berbeza-beza dengan lancar. Inilah sebabnya mengapa nilai pengaktifan tidak hanya mempunyai nilai binari 0 dan 1, tetapi mewakili nombor nyata dan terletak pada selang antara nilai ini.

Setiap komponen kecerunan memberitahu kita dua perkara. Tanda komponen menunjukkan arah perubahan, dan nilai mutlak– mengenai pengaruh komponen ini pada hasil akhir: beberapa pemberat memberikan sumbangan yang lebih besar kepada fungsi kos berbanding yang lain.

Menguji andaian tentang tujuan lapisan tersembunyi

Mari kita bincangkan persoalan bagaimana lapisan rangkaian saraf sepadan dengan jangkaan kita dari pelajaran pertama. Jika kita memvisualisasikan berat neuron lapisan tersembunyi pertama rangkaian saraf terlatih, kita tidak akan melihat angka yang dijangkakan yang sepadan dengan unsur konstituen kecil nombor itu. Kita akan melihat corak yang kurang jelas sepadan dengan cara rangkaian saraf meminimumkan fungsi kos.

Sebaliknya, persoalan timbul tentang apa yang diharapkan jika anda memindahkan imej ke rangkaian saraf bunyi putih? Seseorang mungkin menganggap bahawa rangkaian saraf tidak sepatutnya menghasilkan apa-apa nombor tertentu dan neuron lapisan keluaran tidak boleh diaktifkan atau, jika ia diaktifkan, maka dengan cara yang seragam. Sebaliknya, rangkaian saraf bertindak balas imej rawak akan memberikan nombor yang sangat spesifik.

Walaupun rangkaian saraf melakukan operasi pengecaman nombor, ia tidak tahu bagaimana ia ditulis. Malah, rangkaian saraf sedemikian agak teknologi lama, dibangunkan pada tahun 80-90an. Walau bagaimanapun, adalah sangat berguna untuk memahami bagaimana rangkaian saraf jenis ini berfungsi sebelum memahami pilihan semasa yang boleh menyelesaikan pelbagai masalah menarik. Tetapi semakin anda menggali apa yang dilakukan oleh lapisan tersembunyi rangkaian saraf, semakin kurang pintar rangkaian saraf tersebut.

Belajar daripada data berstruktur dan rawak

Mari kita pertimbangkan contoh rangkaian saraf moden untuk pengiktirafan pelbagai objek dunia sebenar.

Apakah yang berlaku jika anda mengocok pangkalan data supaya nama objek dan imej tidak lagi sepadan? Jelas sekali, memandangkan data dilabel secara rawak, ketepatan pengecaman pada set ujian akan menjadi lemah. Walau bagaimanapun, pada set latihan anda akan memperoleh ketepatan pengecaman pada tahap yang sama seolah-olah data dilabelkan dengan betul.

Jutaan berat rangkaian neural tercanggih ini akan ditala untuk memadankan data dan tokennya dengan tepat. Adakah pengecilan fungsi kos sepadan dengan mana-mana corak imej dan adakah latihan pada data yang dilabel secara rawak berbeza daripada latihan pada data yang dilabel dengan salah?

Jika anda melatih rangkaian saraf dalam proses pengecaman pada data yang dilabel secara rawak, maka latihan berlaku dengan sangat perlahan, keluk kos berbanding bilangan langkah yang diambil berkelakuan hampir secara linear. Jika latihan berlaku pada data berstruktur, nilai fungsi kos berkurangan dalam bilangan lelaran yang jauh lebih kecil.

3. Kaedah perambatan balik kesilapan

Backpropagation ialah algoritma latihan rangkaian saraf utama. Kita bincang dulu dalam garis besar umum, apakah kaedahnya.

Kawalan pengaktifan neuron

Setiap langkah algoritma menggunakan, secara teori, semua contoh set latihan. Marilah kita mempunyai imej dua dan kita berada pada permulaan latihan: pemberat dan anjakan dikonfigurasikan secara rawak, dan imej itu sepadan dengan beberapa corak rawak pengaktifan lapisan keluaran.

Kita tidak boleh mengubah secara langsung pengaktifan lapisan akhir, tetapi kita boleh mempengaruhi berat dan anjakan untuk menukar corak pengaktifan lapisan keluaran: mengurangkan nilai pengaktifan semua neuron kecuali 2 yang sepadan, dan meningkatkan nilai pengaktifan neuron yang dikehendaki. Dalam kes ini, semakin jauh nilai semasa daripada nilai yang dikehendaki, semakin banyak peningkatan dan penurunan diperlukan.

Pilihan konfigurasi rangkaian saraf

Mari fokus pada satu neuron yang sepadan dengan pengaktifan neuron dua dalam lapisan keluaran. Seperti yang kita ingat, nilainya ialah jumlah wajaran pengaktifan neuron lapisan sebelumnya ditambah anjakan, dibalut dalam fungsi penskalaan (sigmoid atau ReLU).

Jadi, untuk meningkatkan nilai pengaktifan ini, kita boleh:

  1. Tingkatkan syif b.
  2. Tambah berat w i .
  3. Tukar pengaktifan lapisan sebelumnya a i .

Daripada formula jumlah berwajaran, anda boleh melihat bahawa sumbangan terbesar kepada pengaktifan neuron dibuat oleh pemberat yang sepadan dengan sambungan dengan neuron yang paling aktif. Strategi yang hampir dengan rangkaian saraf biologi adalah untuk meningkatkan pemberat w i berkadaran dengan magnitud pengaktifan a i neuron sepadan lapisan sebelumnya. Ternyata neuron yang paling aktif disambungkan ke neuron yang kita hanya mahu aktifkan dengan sambungan yang paling "kuat".

Satu lagi pendekatan yang serupa ialah menukar pengaktifan neuron lapisan sebelumnya a i berkadaran dengan pemberat w i . Kita tidak boleh mengubah pengaktifan neuron, tetapi kita boleh menukar berat dan anjakan yang sepadan dan dengan itu mempengaruhi pengaktifan neuron.

Penyebaran balik

Lapisan terakhir neuron boleh dianggap sama dengan lapisan keluaran. Anda mengumpul maklumat tentang bagaimana pengaktifan neuron dalam lapisan ini perlu berubah agar pengaktifan lapisan keluaran berubah.

Adalah penting untuk memahami bahawa semua tindakan ini berlaku bukan sahaja dengan neuron yang sepadan dengan kedua-duanya, tetapi juga dengan semua neuron lapisan keluaran, kerana setiap neuron lapisan semasa disambungkan kepada semua neuron sebelumnya.

Setelah merumuskan semua perubahan yang diperlukan untuk lapisan kedua terakhir, anda memahami bagaimana lapisan kedua dari hujung harus berubah. Kemudian, secara rekursif, anda mengulangi proses yang sama untuk menentukan sifat pemberat dan pincang semua lapisan.

Keturunan kecerunan klasik

Akibatnya, keseluruhan operasi pada satu imej membawa kepada mencari perubahan yang diperlukan dalam 13 ribu pemberat dan anjakan. Dengan mengulangi operasi pada semua contoh set latihan, anda memperoleh nilai perubahan untuk setiap contoh, yang kemudian anda boleh purata untuk setiap parameter secara berasingan.

Hasil purata ini mewakili vektor lajur bagi kecerunan negatif fungsi kos.

Penurunan kecerunan stokastik

Mempertimbangkan keseluruhan set latihan untuk mengira satu langkah memperlahankan proses penurunan kecerunan. Oleh itu, perkara berikut biasanya dilakukan.

Data set latihan dicampur secara rawak dan dibahagikan kepada subkumpulan, contohnya, 100 imej berlabel. Seterusnya, algoritma mengira langkah penurunan kecerunan untuk satu subkumpulan.

Ini bukan kecerunan sebenar untuk fungsi kos, yang memerlukan semua data dalam set latihan, tetapi memandangkan data dipilih secara rawak, ia memberikan anggaran yang baik, dan, yang penting, membolehkan peningkatan ketara dalam kelajuan pengiraan.

Jika kita merancang keluk pembelajaran keturunan kecerunan moden sedemikian, ia tidak akan kelihatan seperti turunan yang seragam dan bertujuan menuruni bukit, tetapi seperti trajektori berliku-liku seorang mabuk, tetapi melakukan lebih banyak lagi. langkah pantas dan juga mencapai fungsi minimum.

Pendekatan ini dipanggil keturunan kecerunan stokastik.

Penambahan. Matematik di sebalik Backpropagation

Sekarang mari kita lihat sedikit lebih formal pada latar belakang matematik algoritma perambatan balik.

Model rangkaian neural primitif

Mari kita mulakan pertimbangan kita dengan rangkaian saraf yang sangat mudah, terdiri daripada empat lapisan, di mana setiap lapisan hanya mempunyai satu neuron. Sehubungan itu, rangkaian mempunyai tiga pemberat dan tiga anjakan. Mari kita pertimbangkan betapa sensitifnya fungsi kepada pembolehubah ini.

Mari kita mulakan dengan sambungan antara dua neuron terakhir. Mari kita nyatakan lapisan terakhir L, lapisan kedua terakhir L-1, dan pengaktifan neuron berkenaan terletak di dalamnya a (L) , a (L-1) .

Fungsi kos

Mari kita bayangkan bahawa nilai pengaktifan yang dikehendaki bagi neuron terakhir yang diberikan oleh contoh latihan ialah y, sama dengan, sebagai contoh, 0 atau 1. Oleh itu, fungsi kos ditakrifkan untuk contoh ini sebagai

C 0 = (a (L) - y) 2.

Ingat bahawa pengaktifan neuron terakhir ini diberikan oleh jumlah wajaran, atau lebih tepatnya fungsi penskalaan jumlah wajaran:

a(L) = σ (w (L) a (L-1) + b (L)).

Untuk ringkasnya, jumlah wajaran boleh dilambangkan dengan huruf dengan subskrip yang sesuai, contohnya z(L):

a(L) = σ (z(L)).

Mari kita pertimbangkan bagaimana perubahan kecil dalam berat w (L) mempengaruhi nilai fungsi kos. Ataupun bahasa matematik, apakah terbitan bagi fungsi kos berkenaan dengan berat ∂C 0 /∂w (L) ?

Dapat dilihat bahawa perubahan dalam C 0 bergantung kepada perubahan dalam a (L), yang seterusnya bergantung kepada perubahan dalam z (L), yang bergantung kepada w (L). Mengikut peraturan untuk mengambil derivatif yang serupa, nilai yang dikehendaki ditentukan oleh hasil darab derivatif separa berikut:

∂C 0 /∂w (L) = ∂z (L) /∂w (L) ∂a (L) /∂z (L) ∂C 0 /∂a (L) .

Definisi derivatif

Mari kita hitung derivatif yang sepadan:

∂C 0 /∂a (L) = 2(a (L) - y)

Iaitu, derivatif adalah berkadar dengan perbezaan antara nilai pengaktifan semasa dan yang dikehendaki.

Purata terbitan dalam rantaian hanyalah derivatif bagi fungsi penskalaan:

∂a (L) /∂z (L) = σ"(z (L))

Dan akhirnya, faktor terakhir ialah terbitan jumlah wajaran:

∂z (L) /∂w (L) = a (L-1)

Oleh itu, perubahan yang sepadan ditentukan oleh berapa banyak neuron sebelumnya diaktifkan. Ini berkaitan dengan idea yang disebutkan di atas bahawa neuron yang menyala bersama-sama membentuk sambungan yang lebih kuat.

Ungkapan akhir:

∂C 0 /∂w (L) = 2(a (L) - y) σ"(z (L)) a (L-1)

Penyebaran balik

Ingat bahawa terbitan pasti hanya untuk kos contoh berasingan bagi sampel latihan C 0 . Untuk fungsi kos C, seperti yang kita ingat, kita perlu purata ke atas semua contoh set latihan:

∂C/∂w (L) = 1/n Σ ∂C k /∂w (L)

Nilai purata yang terhasil untuk w(L) tertentu ialah salah satu komponen kecerunan fungsi kos. Pertimbangan untuk syif adalah sama dengan pertimbangan di atas untuk berat.

Setelah memperoleh derivatif yang sepadan, kami boleh meneruskan pertimbangan kami untuk lapisan sebelumnya.

Model dengan banyak neuron dalam satu lapisan

Walau bagaimanapun, bagaimana untuk membuat peralihan daripada lapisan yang mengandungi satu neuron setiap satu kepada rangkaian neural yang dianggap asalnya. Semuanya akan kelihatan serupa, hanya subskrip tambahan akan ditambah, mencerminkan bilangan neuron di dalam lapisan, dan pemberat akan mempunyai subskrip berganda, contohnya, jk, mencerminkan sambungan neuron j dari satu lapisan L dengan neuron k yang lain. dalam lapisan L-1.

Derivatif akhir menyediakan komponen yang diperlukan untuk menentukan komponen kecerunan ∇C.

Anda boleh mengamalkan tugas pengecaman digit yang diterangkan menggunakan repositori latihan pada GitHub dan set data pengecaman digit MNIST yang disebutkan.

  • Tutorial

Saya telah lama ingin menulis artikel umum yang mengandungi asas-asas Pengecaman Imej, sejenis panduan untuk kaedah asas, memberitahu anda bila untuk menggunakannya, apa masalah yang mereka selesaikan, apa yang boleh dilakukan pada waktu petang pada lutut anda, dan apa yang lebih baik untuk tidak memikirkan tanpa mempunyai pasukan 20 orang.

Saya telah menulis beberapa artikel tentang Pengecaman Optik untuk masa yang lama, jadi orang ramai menulis kepada saya beberapa kali sebulan pelbagai orang dengan soalan mengenai topik ini. Kadang-kadang anda mendapat perasaan bahawa anda tinggal bersama mereka dunia yang berbeza. Di satu pihak, anda memahami bahawa orang itu berkemungkinan besar seorang profesional dalam topik yang berkaitan, tetapi mengetahui sangat sedikit tentang kaedah pengecaman optik. Dan perkara yang paling menjengkelkan ialah dia cuba menggunakan kaedah dari bidang pengetahuan yang berdekatan, yang logik, tetapi tidak berfungsi sepenuhnya dalam Pengecaman Imej, tetapi tidak memahami ini dan sangat tersinggung jika anda mula memberitahunya sesuatu daripada yang paling asas. Dan memandangkan memberitahu dari asas mengambil banyak masa, yang selalunya tidak tersedia, ia menjadi lebih menyedihkan.

Artikel ini bertujuan supaya seseorang yang tidak pernah bekerja dengan kaedah pengecaman imej boleh, dalam masa 10-15 minit, mencipta dalam kepalanya gambaran asas dunia tertentu yang sepadan dengan topik, dan memahami ke arah mana untuk digali. Banyak teknik yang diterangkan di sini boleh digunakan untuk pemprosesan radar dan audio.
Saya akan mulakan dengan beberapa prinsip yang selalu kami mulakan kepada bakal pelanggan, atau seseorang yang ingin mula melakukan Pengecaman Optik:

  • Apabila menyelesaikan masalah, sentiasa pergi dari yang paling mudah. Adalah lebih mudah untuk meletakkan tag oren pada seseorang daripada mengikuti seseorang, menyerlahkannya dalam lata. Lebih mudah untuk mengambil kamera dengan resolusi yang lebih tinggi daripada membangunkan algoritma resolusi super.
  • Rumusan masalah yang ketat dalam kaedah pengecaman optik adalah susunan magnitud yang lebih penting daripada masalah pengaturcaraan sistem: satu perkataan yang berlebihan boleh menambah 50% kerja kepada spesifikasi teknikal.
  • Tiada pengiktirafan dalam tugas penyelesaian universal. Anda tidak boleh membuat algoritma yang hanya akan "mengiktiraf mana-mana inskripsi". Tanda di jalan dan sehelai teks pada asasnya adalah objek yang berbeza. Anda mungkin boleh membuat algoritma umum (ini adalah contoh yang baik daripada Google), tetapi ia memerlukan banyak kerja daripada pasukan yang besar dan terdiri daripada berpuluh-puluh subrutin yang berbeza.
  • OpenCV ialah bible yang mempunyai banyak kaedah dan boleh menyelesaikan 50% daripada hampir semua masalah, tetapi OpenCV hanyalah sebahagian kecil daripada apa yang sebenarnya boleh dilakukan. Dalam satu kajian, kesimpulan telah ditulis: "Masalah itu tidak dapat diselesaikan menggunakan kaedah OpenCV, oleh itu ia tidak dapat diselesaikan." Cuba elakkan ini, jangan malas dan teliti tugas semasa dari awal setiap kali, tanpa menggunakan templat OpenCV.
Amat sukar untuk memberikan sebarang nasihat sejagat, atau memberitahu cara mencipta beberapa jenis struktur di mana anda boleh membina penyelesaian kepada masalah sewenang-wenangnya visi komputer. Tujuan artikel ini adalah untuk menstrukturkan apa yang boleh digunakan. Saya akan cuba membahagikan kaedah sedia ada kepada tiga kumpulan. Kumpulan pertama ialah penapisan awal dan penyediaan imej. Kumpulan kedua ialah pemprosesan logik hasil penapisan. Kumpulan ketiga ialah algoritma membuat keputusan berdasarkan pemprosesan logik. Sempadan antara kumpulan sangat sewenang-wenangnya. Untuk menyelesaikan masalah, tidak semestinya perlu menggunakan kaedah dari semua kumpulan; kadang-kadang dua sudah cukup, dan kadang-kadang satu.

Senarai kaedah yang diberikan di sini tidak lengkap. Saya cadangkan menambah kaedah kritikal dalam komen yang saya tidak tulis dan mengaitkan 2-3 perkataan yang disertakan pada setiap satu.

Bahagian 1. Penapisan

Dalam kumpulan ini saya meletakkan kaedah yang membolehkan anda memilih kawasan yang menarik dalam imej tanpa menganalisisnya. Kebanyakan kaedah ini menggunakan beberapa jenis transformasi tunggal pada semua titik dalam imej. Pada peringkat penapisan, tiada analisis imej dilakukan, tetapi titik yang melepasi penapisan boleh dianggap sebagai kawasan yang mempunyai ciri khas.
Perduaan mengikut ambang, pemilihan kawasan histogram
Transformasi yang paling mudah ialah perduaan imej mengikut ambang. Untuk imej RGB dan skala kelabu, ambang ialah nilai warna. Terdapat masalah ideal di mana transformasi sedemikian adalah mencukupi. Katakan anda ingin memilih objek secara automatik pada helaian kertas putih:




Pilihan ambang di mana perduaan berlaku sebahagian besarnya menentukan proses perduaan itu sendiri. DALAM dalam kes ini, imej telah diduakan oleh warna purata. Lazimnya, perduaan dijalankan menggunakan algoritma yang secara adaptif memilih ambang. Algoritma sedemikian boleh menjadi pilihan jangkaan atau mod. Atau anda boleh memilih puncak terbesar dalam histogram.

Perduaan boleh memberikan hasil yang sangat menarik apabila bekerja dengan histogram, termasuk dalam situasi di mana kita menganggap imej bukan dalam RGB, tetapi dalam HSV. Contohnya, warna segmen yang diminati. Berdasarkan prinsip ini, anda boleh membina pengesan tag dan pengesan kulit manusia.
Penapisan klasik: Fourier, penapis laluan rendah, penapis laluan tinggi
Kaedah penapisan radar klasik dan pemprosesan isyarat boleh berjaya digunakan pada pelbagai tugas Pengecaman Corak. Kaedah tradisional dalam radar, yang hampir tidak pernah digunakan dalam imej dalam bentuk tulen, ialah transformasi Fourier (lebih khusus, FFT). Salah satu daripada beberapa pengecualian di mana transformasi Fourier satu dimensi digunakan ialah pemampatan imej. Untuk analisis imej, transformasi satu dimensi biasanya tidak mencukupi; anda perlu menggunakan transformasi dua dimensi yang lebih intensif sumber.

Sebilangan kecil orang benar-benar mengiranya; biasanya, lebih cepat dan lebih mudah untuk menggunakan lilitan kawasan yang diminati dengan penapis siap pakai, ditala untuk frekuensi tinggi (HPF) atau rendah (LPF). Kaedah ini, sudah tentu, tidak membenarkan analisis spektrum, tetapi dalam tugas tertentu Pemprosesan video biasanya tidak memerlukan analisis, tetapi hasil.


Paling banyak contoh mudah penapis yang melaksanakan garis bawah frekuensi rendah(penapis Gaussian) dan frekuensi tinggi(Penapis Gabor).
Untuk setiap titik imej, tetingkap dipilih dan didarab dengan penapis dengan saiz yang sama. Hasil daripada lilitan tersebut ialah nilai mata baharu. Apabila melaksanakan penapis laluan rendah dan penapis laluan tinggi, imej jenis berikut diperoleh:



Gelombang
Tetapi bagaimana jika kita menggunakan beberapa fungsi ciri sewenang-wenangnya untuk konvolusi dengan isyarat? Kemudian ia akan dipanggil "Wavelet transform". Takrif wavelet ini tidak betul, tetapi secara tradisinya, dalam banyak pasukan, analisis wavelet ialah pencarian corak arbitrari dalam imej menggunakan konvolusi dengan model corak ini. Ada satu set fungsi klasik, digunakan dalam analisis wavelet. Ini termasuk wavelet Haar, wavelet Morlet, wavelet topi Mexico, dsb. Primitif Haar, yang mana terdapat beberapa artikel saya sebelum ini (,), berkaitan dengan fungsi sedemikian untuk ruang dua dimensi.


Di atas ialah 4 contoh wavelet klasik. Wavelet Haar 3-dimensi, Wavelet Meyer 2-dimensi, Wavelet Topi Mexico, Wavelet Daubechies. Contoh yang baik Menggunakan tafsiran lanjutan bagi wavelet ialah masalah mencari silau pada mata, yang mana wavelet adalah silau itu sendiri:

Wavelet klasik biasanya digunakan untuk pemampatan imej, atau untuk pengelasan imej (untuk diterangkan di bawah).
Korelasi
Selepas tafsiran percuma bagi wavelet di pihak saya, adalah wajar untuk menyebut korelasi sebenar yang mendasarinya. Apabila menapis imej ini alat yang sangat diperlukan. Aplikasi klasik mengaitkan aliran video untuk mencari anjakan atau aliran optik. Pengesan anjakan yang paling mudah juga, dalam erti kata lain, korelasi perbezaan. Di mana imej tidak berkorelasi, terdapat pergerakan.

Fungsi penapisan
Kelas penapis yang menarik ialah penapisan fungsi. Ini adalah penapis matematik semata-mata yang membolehkan anda mengesan mudah fungsi matematik pada imej (garis lurus, parabola, bulatan). Imej terkumpul dibina, di mana untuk setiap titik imej asal satu set fungsi yang menjananya dilukis. Transformasi yang paling klasik ialah transformasi Hough untuk garisan. Dalam penjelmaan ini, bagi setiap titik (x;y), satu set titik (a;b) bagi garis lurus y=ax+b dilukis yang mana kesamaan adalah benar. Anda mendapat gambar yang cantik:


(tambahan pertama adalah kepada orang yang pertama mencari tangkapan dalam gambar dan definisi ini dan menerangkannya, tambah kedua ialah kepada orang yang pertama mengatakan apa yang ditunjukkan di sini)
Transformasi Hough membolehkan anda mencari sebarang fungsi boleh parameter. Contohnya bulatan. Terdapat transformasi yang diubah suai yang membolehkan anda mencari sebarang bentuk. Ahli matematik sangat menyukai transformasi ini. Tetapi apabila memproses imej, malangnya, ia tidak selalu berfungsi. sangat kelajuan perlahan bekerja, kepekaan yang sangat tinggi terhadap kualiti perduaan. Walaupun dalam situasi yang ideal, saya lebih suka menggunakan kaedah lain.
Analog transformasi Hough untuk garis lurus ialah transformasi Radon. Ia dikira melalui FFT, yang memberikan keuntungan prestasi dalam keadaan di mana terdapat banyak mata. Di samping itu, ia boleh digunakan pada imej bukan binari.
Penapisan kontur
Kelas penapis yang berasingan ialah penapisan sempadan dan kontur. Garis besar sangat berguna apabila kita ingin beralih daripada bekerja dengan imej kepada bekerja dengan objek dalam imej itu. Apabila objek agak kompleks, tetapi dibezakan dengan baik, maka selalunya satu-satunya cara bekerja dengannya adalah untuk menyerlahkan konturnya. Terdapat beberapa algoritma menyelesaikan masalah litar penapisan:

Selalunya ia adalah Canny yang digunakan, yang berfungsi dengan baik dan pelaksanaannya dalam OpenCV (Sobel juga ada, tetapi ia mencari kontur yang lebih teruk).



Penapis lain
Di atas ialah penapis yang pengubahsuaiannya membantu menyelesaikan 80-90% masalah. Tetapi selain mereka, terdapat penapis yang lebih jarang digunakan dalam tugas tempatan. Terdapat berpuluh-puluh penapis sedemikian, saya tidak akan menyenaraikan semuanya. Menarik ialah penapis lelaran (contohnya, model penampilan aktif), serta transformasi ridgelet dan curvlet, yang merupakan gabungan penapisan dan analisis wavelet klasik dalam medan transformasi radon. Transformasi pancaran berfungsi dengan baik pada sempadan penjelmaan wavelet dan analisis logik, membolehkan anda memilih kontur:

Tetapi transformasi ini sangat khusus dan disesuaikan untuk tugas yang jarang berlaku.

Bahagian 2. Pemprosesan logik hasil penapisan

Penapisan menyediakan satu set data yang sesuai untuk diproses. Tetapi selalunya anda tidak boleh mengambil dan menggunakan data ini tanpa memprosesnya. Dalam bahagian ini akan terdapat beberapa kaedah klasik yang membolehkan anda beralih daripada imej kepada sifat objek, atau ke objek itu sendiri.
Morfologi
Peralihan daripada penapisan kepada logik, pada pendapat saya, adalah kaedah morfologi matematik (, ​​,). Pada dasarnya, ini adalah operasi paling mudah untuk menumbuhkan dan menghakis imej binari. Kaedah ini membolehkan anda mengeluarkan bunyi daripada imej binari dengan menambah atau mengurangkan elemen sedia ada. Terdapat algoritma kontur berdasarkan morfologi matematik, tetapi biasanya beberapa jenis algoritma hibrid atau algoritma dalam gabungan digunakan.
Analisis kontur
Algoritma untuk mendapatkan sempadan telah pun disebut dalam bahagian penapisan. Sempadan yang terhasil agak mudah ditukar kepada kontur. Untuk algoritma Canny ini berlaku secara automatik; untuk algoritma lain perduaan tambahan diperlukan. Anda boleh mendapatkan kontur untuk algoritma binari, contohnya, menggunakan algoritma kumbang.
Garis besar ialah ciri unik sesuatu objek. Ini selalunya membolehkan anda mengenal pasti objek dengan garis besarnya. Terdapat alat matematik yang berkuasa yang membolehkan anda melakukan ini. Peranti itu dipanggil analisis kontur (,).

Sejujurnya, saya tidak pernah dapat menggunakan analisis kontur dalam masalah sebenar. Keadaan yang terlalu ideal diperlukan. Sama ada tiada sempadan, atau terlalu banyak bunyi. Tetapi, jika anda perlu mengenali sesuatu dalam keadaan yang ideal, maka analisis kontur adalah pilihan yang bagus. Ia berfungsi dengan sangat pantas, matematik yang indah dan logik yang jelas.
Mata khas
Titik tunggal ialah ciri unik objek yang membolehkan objek dibandingkan dengan dirinya sendiri atau dengan kelas objek yang serupa. Terdapat beberapa dozen cara untuk mengenal pasti perkara tersebut. Sesetengah kaedah mengenal pasti titik khas dalam bingkai bersebelahan, sesetengahnya selepas tempoh masa yang lama dan apabila pencahayaan berubah, ada yang membolehkan anda mencari titik khas yang kekal begitu walaupun objek diputar. Mari kita mulakan dengan kaedah yang membolehkan kita mencari mata khas, yang tidak begitu stabil, tetapi dikira dengan cepat, dan kemudian kita akan meningkatkan kerumitan:
Gred pertama. Mata khas yang stabil dalam tempoh beberapa saat. Titik sedemikian digunakan untuk membimbing objek antara bingkai video bersebelahan, atau untuk menggabungkan imej daripada kamera jiran. Titik tersebut termasuk maksimum tempatan imej, sudut dalam imej (pengesan terbaik, mungkin, pengesan Charis), titik di mana penyebaran maksimum dicapai, kecerunan tertentu, dsb.
Kelas kedua. Titik khas yang stabil apabila pencahayaan berubah dan pergerakan kecil objek. Mata sedemikian berfungsi terutamanya untuk latihan dan pengelasan jenis objek seterusnya. Contohnya, pengelas pejalan kaki atau pengelas muka ialah hasil daripada sistem yang dibina tepat pada titik tersebut. Beberapa wavelet yang disebutkan sebelum ini mungkin menjadi asas untuk mata tersebut. Contohnya, Haar primitif, cari sorotan, cari fungsi khusus lain. Titik ini termasuk yang ditemui oleh kaedah histogram kecerunan arah (HOG).
Kelas ketiga. Mata stabil. Saya hanya tahu tentang dua kaedah yang memberikan kestabilan lengkap dan tentang pengubahsuaian mereka. Ini adalah SURF dan SIFT. Mereka membenarkan anda mencari mata khas walaupun anda memutarkan imej. Pengiraan mata sedemikian mengambil masa lebih lama berbanding kaedah lain, tetapi ia adalah mencukupi masa terhad. Malangnya, kaedah ini dipatenkan. Walaupun, di Rusia adalah mustahil untuk mematenkan algoritma, jadi gunakannya untuk pasaran domestik.

Bahagian 3. Latihan

Bahagian ketiga cerita akan ditumpukan kepada kaedah yang tidak berfungsi secara langsung dengan imej, tetapi yang membolehkan anda membuat keputusan. Terutamanya pelbagai kaedah pembelajaran mesin dan membuat keputusan. Baru-baru ini Yandyx menyiarkan kursus mengenai topik ini mengenai Habr, sangat pemilihan yang baik. Ini adalah dalam versi teks. Untuk kajian serius tentang topik itu, saya sangat mengesyorkan menontonnya. Di sini saya akan cuba menggariskan beberapa kaedah utama yang digunakan secara khusus dalam pengecaman corak.
Dalam 80% situasi, intipati pembelajaran dalam tugasan pengiktirafan adalah seperti berikut:
Terdapat sampel ujian yang mengandungi beberapa kelas objek. Biarlah kehadiran/ketiadaan seseorang dalam foto. Bagi setiap imej terdapat satu set ciri yang telah diserlahkan oleh beberapa ciri, sama ada Haar, HOG, SURF atau beberapa wavelet. Algoritma pembelajaran mesti membina model supaya ia boleh menganalisis imej baru dan menentukan objek yang ada dalam imej.
Bagaimana ia dilakukan? Setiap imej ujian adalah titik dalam ruang ciri. Koordinatnya ialah berat bagi setiap ciri dalam imej. Biarkan tanda kami adalah: "Kehadiran mata", "Kehadiran hidung", "Kehadiran dua tangan", "Kehadiran telinga", dll... Kami akan menyerlahkan semua tanda ini menggunakan pengesan sedia ada kami, yang dilatih mengenai bahagian tubuh yang serupa dengan manusia Bagi seseorang dalam ruang sedemikian, titik yang betul ialah . Untuk monyet, titik untuk kuda. Pengelas dilatih menggunakan contoh contoh. Tetapi tidak semua gambar menunjukkan tangan, yang lain tidak mempunyai mata, dan pada yang ketiga, monyet itu mempunyai hidung manusia kerana kesilapan pengelas. Pengelas manusia terlatih secara automatik membahagikan ruang ciri sedemikian rupa untuk mengatakan: jika ciri pertama terletak dalam julat 0.5 Pada asasnya, matlamat pengelas adalah untuk melukis kawasan dalam ruang ciri yang menjadi ciri objek pengelasan. Beginilah rupa anggaran berjujukan kepada jawapan untuk salah satu pengelas (AdaBoost) dalam ruang dua dimensi:


Terdapat banyak pengelas. Setiap daripada mereka bekerja lebih baik dalam beberapa tugas tertentu. Tugas memilih pengelas untuk tugas tertentu sebahagian besarnya adalah seni. Berikut adalah beberapa gambar yang cantik mengenai topik tersebut.
Kes mudah, pemisahan satu dimensi
Mari kita lihat contoh kes klasifikasi yang paling mudah, apabila ruang ciri adalah satu dimensi, dan kita perlu memisahkan 2 kelas. Situasi berlaku lebih kerap daripada yang anda fikirkan: contohnya, apabila anda perlu membezakan dua isyarat, atau membandingkan corak dengan sampel. Biar kami mempunyai sampel latihan. Ini menghasilkan imej di mana paksi-X ialah ukuran persamaan, dan paksi-Y ialah bilangan peristiwa dengan ukuran sedemikian. Apabila objek yang diingini serupa dengan dirinya, Gaussian kiri diperoleh. Apabila ia tidak kelihatan seperti itu, ia adalah yang betul. Nilai X=0.4 memisahkan sampel supaya keputusan yang salah meminimumkan kebarangkalian membuat sebarang keputusan yang salah. Pencarian pemisah sedemikian adalah tugas pengelasan.


Nota kecil. Kriteria yang meminimumkan ralat tidak akan sentiasa optimum. Graf berikut ialah graf sistem pengecaman iris sebenar. Untuk sistem sedemikian, kriteria dipilih untuk meminimumkan kebarangkalian kemasukan palsu orang yang tidak dibenarkan ke kemudahan itu. Kebarangkalian ini dipanggil "ralat jenis I", "kebarangkalian penggera palsu", "positif palsu". Dalam kesusasteraan berbahasa Inggeris "Kadar Akses Palsu".
) AdaBusta ialah salah satu pengelas yang paling biasa. Sebagai contoh, lata Haar dibina di atasnya. Biasanya digunakan apabila klasifikasi binari diperlukan, tetapi tiada apa yang menghalang latihan untuk bilangan kelas yang lebih besar.
SVM ( , , , ) Salah satu pengelas paling berkuasa, yang mempunyai banyak pelaksanaan. Pada asasnya, pada tugas pembelajaran yang saya temui, ia berfungsi sama seperti Adabusta. Ia dianggap agak pantas, tetapi latihannya lebih sukar daripada Adabusta dan memerlukan pemilihan teras yang betul.

Terdapat juga rangkaian saraf dan regresi. Tetapi untuk mengelaskannya secara ringkas dan menunjukkan perbezaannya, kami memerlukan artikel yang lebih panjang daripada ini.
________________________________________________
Saya harap saya dapat memberikan gambaran ringkas tentang kaedah yang digunakan tanpa menyelami matematik dan penerangan. Mungkin ini akan membantu seseorang. Walaupun, sudah tentu, artikel itu tidak lengkap dan tidak ada perkataan tentang bekerja dengan imej stereo, mahupun tentang LSM dengan penapis Kalman, mahupun tentang pendekatan Bayes yang boleh suai.
Jika anda menyukai artikel itu, saya akan cuba membuat bahagian kedua dengan pilihan contoh cara masalah Pengecaman Imej sedia ada diselesaikan.

Dan akhirnya

Apa yang perlu dibaca?
1) Saya pernah sangat menyukai buku "Digital Image Processing" oleh B. Yane, yang ditulis dengan ringkas dan jelas, tetapi pada masa yang sama hampir semua matematik diberikan. Baik untuk membiasakan diri dengan kaedah sedia ada.
2) Satu genre klasik ialah R. Gonzalez, R. Woods "Pemprosesan Imej Digital". Atas sebab tertentu ia lebih sukar bagi saya daripada yang pertama. Lebih kurang matematik, tetapi lebih banyak kaedah dan gambar.
3) "Pemprosesan dan analisis imej dalam masalah penglihatan komputer" - ditulis berdasarkan kursus yang diajar di salah satu jabatan Fizik dan Teknologi. Terdapat banyak kaedah dan penerangan terperinci mereka. Tetapi pada pendapat saya, buku itu mempunyai dua kelemahan besar: buku ini sangat tertumpu pada pakej perisian yang disertakan dengannya; dalam buku itu, terlalu kerap penerangan kaedah mudah bertukar menjadi hutan matematik, yang sukar untuk terbitkan gambarajah struktur kaedah tersebut. Tetapi pengarang telah membuat laman web yang mudah di mana hampir semua kandungan dibentangkan - wiki.technicalvision.ru Tambah tag

Projek ini tidak mendakwa sebagai tempat pertama di dunia dan tidak dianggap sebagai pesaing FineReader, tetapi saya berharap idea pengecaman corak aksara menggunakan ciri Euler akan menjadi baharu.

Pengenalan kepada ciri Euler bagi sesuatu imej.

Idea asas ialah anda mengambil imej hitam dan putih, dan mengandaikan bahawa 0 ialah piksel putih dan 1 ialah piksel hitam, maka keseluruhan imej akan menjadi matriks sifar dan satu. Dalam kes ini, imej hitam dan putih boleh diwakili sebagai satu set serpihan berukuran 2 kali 2 piksel; semua kombinasi yang mungkin ditunjukkan dalam rajah:

Pada setiap imej pic1, pic2,... menunjukkan segi empat sama merah bagi langkah pengiraan dalam algoritma, di dalamnya terdapat salah satu serpihan F daripada gambar di atas. Pada setiap langkah, setiap serpihan dijumlahkan, menghasilkan imej Asal kita memperoleh set: , seterusnya ia akan dipanggil ciri Euler bagi imej atau set ciri.


KOMEN: dalam amalan, nilai F0 (untuk imej Asal nilai ini ialah 8) tidak digunakan, kerana ia adalah latar belakang imej. Oleh itu, 15 nilai akan digunakan, bermula dari F1 hingga F15.

Sifat ciri Euler bagi imej.

  1. Nilai set ciri adalah unik, dengan kata lain, tidak ada dua imej dengan ciri Euler yang sama.
  2. Tiada algoritma untuk menukar daripada set ciri kepada imej asal; satu-satunya cara ialah kekerasan.

Apakah algoritma pengecaman teks?

Idea pengecaman huruf ialah kita mengira ciri Euler untuk semua aksara dalam abjad bahasa dan menyimpannya dalam pangkalan pengetahuan. Kemudian kami akan mengira ciri Euler untuk bahagian imej yang diiktiraf dan mencarinya dalam pangkalan pengetahuan.

Peringkat pengiktirafan:

  1. Imej boleh sama ada hitam dan putih atau warna, jadi peringkat pertama adalah penghampiran imej, iaitu, mendapatkan hitam dan putih daripadanya.
  2. Kami membuat piksel demi piksel melalui keseluruhan imej untuk mencari piksel hitam. Apabila piksel berlorek dikesan, operasi rekursif dilancarkan untuk mencari semua piksel berlorek bersebelahan dengan piksel yang ditemui dan seterusnya. Akibatnya, kami akan menerima serpihan imej, yang boleh sama ada keseluruhan watak atau sebahagian daripadanya, atau "sampah" yang harus dibuang.
  3. Selepas mencari semua bahagian imej yang tidak bersambung, ciri Euler dikira untuk setiap satu.
  4. Seterusnya, penganalisis mula beroperasi dan, dengan meneliti setiap serpihan, menentukan sama ada nilai ciri Eulernya berada dalam pangkalan pengetahuan. Jika kami mendapati nilai itu, kami menganggap bahawa ia adalah serpihan imej yang diiktiraf, jika tidak, kami meninggalkannya untuk kajian lanjut.
  5. Bahagian imej yang tidak dikenali tertakluk kepada analisis heuristik, iaitu, saya cuba mencari nilai yang paling sesuai dalam pangkalan pengetahuan berdasarkan nilai ciri Euler. Jika tidak dapat ditemui, maka cubaan dibuat untuk "melekatkan" serpihan berdekatan dan mencari hasil dalam pangkalan pengetahuan untuknya. Untuk apa "gluing" dilakukan? Hakikatnya ialah tidak semua huruf terdiri daripada satu imej berterusan, contohnya "!" Tanda seru mengandungi 2 segmen (batang dan titik), jadi sebelum mencarinya dalam pangkalan pengetahuan, anda perlu mengira jumlah nilai ciri Euler daripada kedua-dua bahagian. Jika, walaupun selepas melekat dengan segmen bersebelahan, hasil yang boleh diterima tidak dapat dijumpai, maka kami menganggap serpihan itu sebagai sampah dan melangkaunya.

Komposisi sistem:

  1. Asas pengetahuan- fail atau fail yang asalnya dicipta oleh saya atau orang lain, mengandungi set aksara ciri dan diperlukan untuk pengecaman.
  2. teras- mengandungi fungsi asas yang melaksanakan pengecaman
  3. Penjana- modul untuk mencipta pangkalan pengetahuan.

ClearType dan anti-aliasing.

Jadi, sebagai input kami mempunyai imej yang boleh dikenali, dan matlamatnya adalah untuk menjadikannya hitam dan putih, sesuai untuk memulakan proses pengecaman. Nampaknya apa yang lebih mudah, kami mengira semua piksel putih sebagai 0, dan semua yang lain sebagai 1, tetapi tidak semuanya begitu mudah. Teks pada imej boleh menjadi anti-alias atau bukan anti-alias. Aksara anti-alias kelihatan licin dan tanpa bucu, manakala aksara tidak licin akan kelihatan pada monitor moden dengan piksel kelihatan di sepanjang garis besar. Dengan kemunculan skrin LCD (kristal cecair), ClearType (untuk Windows) dan jenis anti-aliasing lain telah dicipta, yang mengambil kesempatan daripada ciri-ciri matriks monitor. Piksel imej teks bertukar warna, selepas itu ia kelihatan lebih "lebih lembut". Untuk melihat hasil pelicinan, anda boleh menaip beberapa huruf (atau teks), contohnya dalam mspaint, zum masuk dan teks anda telah bertukar menjadi sejenis mozek berbilang warna.

Apa masalahnya? Mengapa kita melihat simbol biasa pada skala kecil? Adakah mata kita menipu kita? Hakikatnya ialah piksel monitor LCD tidak terdiri daripada satu piksel yang boleh menerima warna yang diingini, tetapi daripada 3 subpiksel 3 warna, yang cukup untuk mendapatkan warna yang diingini. Oleh itu, matlamat ClearType adalah untuk mendapatkan teks yang paling menarik secara visual menggunakan ciri matriks monitor LCD, dan ini dicapai menggunakan pemaparan subpiksel. Sesiapa sahaja yang mempunyai "Kaca Pembesar" boleh, untuk tujuan percubaan, membesarkan mana-mana tempat pada skrin yang dihidupkan dan melihat matriks seperti dalam gambar di bawah.

Rajah menunjukkan segi empat sama 3x3 piksel matriks LCD.

Perhatian! Ciri ini menyukarkan mendapatkan imej hitam putih dan sangat mempengaruhi hasilnya, kerana ia tidak selalu memungkinkan untuk mendapatkan imej yang sama, ciri Euler yang disimpan dalam pangkalan pengetahuan. Oleh itu, perbezaan dalam imej memaksa analisis heuristik, yang mungkin tidak selalu berjaya.


Mendapatkan imej hitam putih.

Saya tidak berpuas hati dengan kualiti algoritma penukaran warna kepada hitam putih yang terdapat di Internet. Selepas penggunaannya, imej aksara yang tertakluk kepada pemaparan sublepixel menjadi berbeza dalam lebar, pecahan dalam baris huruf dan sampah yang tidak dapat difahami muncul. Akibatnya, saya memutuskan untuk mendapatkan imej hitam dan putih dengan menganalisis kecerahan piksel. Semua piksel yang lebih cerah (lebih besar daripada nilai) 130 unit dianggap hitam, selebihnya berwarna putih. Kaedah ini tidak sesuai, dan masih membawa kepada hasil yang tidak memuaskan jika kecerahan teks berubah, tetapi sekurang-kurangnya ia menerima imej yang serupa dengan nilai dalam pangkalan pengetahuan. Pelaksanaannya boleh dilihat dalam kelas LuminosityApproximator.

Asas pengetahuan.

Idea awal untuk mengisi pangkalan pengetahuan ialah untuk setiap huruf bahasa saya akan mengira ciri Euler bagi imej simbol yang terhasil untuk 140 fon yang dipasang pada komputer saya (C:\Windows\Fonts), tambah semua pilihan untuk jenis fon (Biasa, Berlemak, Italic) dan saiz dari 8 hingga 32, dengan itu meliputi semua, atau hampir semua, variasi huruf dan asas akan menjadi universal, tetapi malangnya ini ternyata tidak sebaik yang kelihatan. Dengan syarat ini, inilah yang saya dapat:

  1. Fail asas pengetahuan ternyata agak besar (kira-kira 3 megabait) untuk bahasa Rusia dan Inggeris. Walaupun hakikat bahawa ciri Euler disimpan sebagai rentetan ringkas 15 digit, dan fail itu sendiri adalah arkib termampat (DeflateStream), yang kemudiannya dibongkar dalam ingatan.
  2. Saya mengambil masa kira-kira 10 saat untuk menyahsiri pangkalan pengetahuan. Pada masa yang sama, masa untuk membandingkan set ciri menderita. Tidak mungkin untuk mencari fungsi untuk mengira GetHashCode(), jadi saya terpaksa membandingkan sedikit demi sedikit. Dan berbanding dengan pangkalan pengetahuan 3-5 fon, masa untuk analisis teks dengan pangkalan data 140 fon meningkat sebanyak 30-50 kali. Pada masa yang sama, set ciri yang sama tidak disimpan dalam pangkalan pengetahuan, walaupun pada hakikatnya beberapa aksara dalam fon yang berbeza mungkin kelihatan sama dan serupa, malah terdapat, sebagai contoh, 20 dan 21 fon.

Oleh itu, saya terpaksa mencipta pangkalan pengetahuan kecil yang masuk ke dalam modul Teras dan memungkinkan untuk menyemak kefungsian. Terdapat masalah yang sangat serius apabila mengisi pangkalan data. Tidak semua fon memaparkan aksara kecil dengan betul. Katakan aksara "e" apabila dipaparkan dalam fon saiz 8 bernama "Franklin Gothic Medium" ternyata:

Dan ia mempunyai sedikit persamaan dengan yang asal. Lebih-lebih lagi, jika anda menambahkannya ke pangkalan pengetahuan, maka ini akan memburukkan lagi keputusan heuristik, kerana analisis simbol yang serupa dengan ini mengelirukan. D Simbol ini diperolehi dalam fon yang berbeza untuk huruf yang berbeza. Proses pengisian pangkalan pengetahuan itu sendiri perlu dikawal supaya setiap imej simbol, sebelum disimpan ke pangkalan pengetahuan, disemak oleh seseorang untuk mematuhi surat tersebut. Tetapi, malangnya, saya tidak mempunyai banyak tenaga dan masa.

Algoritma carian aksara.

Saya akan mengatakan dengan segera bahawa pada mulanya saya meremehkan masalah ini dengan carian dan terlupa bahawa simbol boleh terdiri daripada beberapa bahagian. Nampaknya saya bahawa semasa petikan piksel demi piksel saya akan menemui simbol, mencari bahagiannya, jika ada, menggabungkannya dan menganalisisnya. Pas biasa akan kelihatan seperti ini: Saya mencari huruf "H" (Dalam pangkalan pengetahuan) dan menganggap bahawa semua aksara di bawah titik atas dan di atas titik bawah tergolong dalam baris semasa dan harus disamakan bersama:

Tetapi ini adalah situasi yang ideal; semasa pengiktirafan, saya terpaksa berurusan dengan imej yang koyak, yang, sebagai tambahan kepada segala-galanya, boleh mempunyai sejumlah besar sampah yang terletak di sebelah teks:


Imej perkataan "ya" ini akan cuba menjelaskan kerumitan analisis. Kami akan menganggap bahawa ini adalah rentetan lengkap, tetapi b13 dan i6 adalah serpihan sampah hasil daripada anggaran. Aksara "y" tiada noktah dan tiada satu pun daripada aksara yang terdapat dalam pangkalan pengetahuan untuk menyatakan dengan pasti bahawa kita sedang berurusan dengan baris teks daripada baris "c" hingga "i". Dan ketinggian garisan sangat penting bagi kami, kerana untuk melekatkan kita perlu tahu betapa dekatnya serpihan harus "dilekatkan" dan dianalisis. Lagipun, mungkin terdapat situasi di mana kita secara tidak sengaja mula menyatukan aksara dari dua rentetan dan hasil pengiktirafan sedemikian akan jauh dari ideal.

Heuristik dalam analisis imej.


Apakah heuristik dalam pengecaman imej?
Ini ialah proses di mana set ciri yang tidak terdapat dalam pangkalan pengetahuan diiktiraf sebagai huruf abjad yang betul. Saya berfikir untuk masa yang lama tentang cara melakukan analisis, dan pada akhirnya algoritma yang paling berjaya ternyata adalah ini:

  1. Saya dapati semua set ciri dalam pangkalan pengetahuan yang mempunyai bilangan nilai terbesar F serpihan sepadan dengan imej yang diiktiraf.
  2. Seterusnya, saya hanya memilih set ciri di mana, dengan imej yang boleh dikenali berdasarkan nilai F serpihan yang tidak sama, perbezaannya tidak lebih daripada +- 1 unit: -1< F < 1. И это все подсчитывается для каждой буквы алфавита.
  3. Kemudian saya dapati simbol yang mempunyai bilangan kejadian terbanyak. Menganggapnya hasil analisis heuristik.
Algoritma ini tidak memberikan hasil terbaik pada imej aksara kecil (saiz fon 7 - 12) . Tetapi ia mungkin disebabkan oleh fakta bahawa pangkalan pengetahuan mengandungi set ciri untuk imej serupa bagi simbol berbeza.

Contoh penggunaan dalam C#.

Contoh permulaan imej pengecaman imej. Pembolehubah hasil akan mengandungi teks:

var recognizer = new TextRecognizer(bekas); var report = recognize.Recognize(imej); // Teks mentah. var result = report.RawText(); // Senarai semua serpihan dan keadaan pengecaman untuk setiap satu. serpihan var = laporan.Simbol;

Projek demo.

Untuk demonstrasi visual kerja, saya menulis WPF permohonan. Ia dilancarkan daripada projek bernama " Qocr.Application.Wpf". Contoh tetingkap dengan hasil pengecaman adalah di bawah:

Untuk mengenali imej yang anda perlukan:

  • Menekan "Imej Baharu" memilih imej untuk pengecaman
  • Menggunakan " Hitam dan putih"Anda boleh melihat imej mana yang akan dianalisis. Jika anda melihat imej yang sangat berkualiti rendah, maka jangan mengharapkan hasil yang baik. Untuk meningkatkan hasil, anda boleh cuba menulis sendiri imej berwarna kepada penukar hitam putih.
  • Memilih bahasa "Bahasa".
  • Klik mengenali "Kenali".
Semua serpihan imej hendaklah ditandakan dengan bingkai oren atau hijau.
Contoh pengecaman teks bahasa Inggeris: