Saya ingin melakukan proyek optical character recognition (OCR). Setelah melakukan beberapa penelitian saya menemukan arsitektur yang tampaknya menarik: CNN + RNN + CTC. Saya akrab dengan jaringan saraf berbelit-belit (CNN), dan jaringan saraf berulang (RNN), tetapi apa itu Classification Temporal Classification (CTC)? Saya ingin penjelasan dalam istilah awam.
machine-learning
deep-learning
conv-neural-network
rnn
Ryan Zotti
sumber
sumber
Jawaban:
Anda memiliki dataset yang berisi:
Jadi dataset Anda dapat terlihat seperti itu:
Jaringan Saraf Tiruan (NN) mengeluarkan skor untuk setiap posisi horizontal yang mungkin (sering disebut t langkah-waktu dalam literatur) dari gambar. Ini terlihat seperti ini untuk gambar dengan lebar 2 (t0, t1) dan 2 karakter yang mungkin ("a", "b"):
| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4
Untuk melatih NN seperti itu, Anda harus menentukan untuk setiap gambar di mana karakter teks kebenaran dasar diposisikan dalam gambar. Sebagai contoh, pikirkan gambar yang berisi teks "Halo". Anda sekarang harus menentukan di mana "H" dimulai dan berakhir (misalnya "H" dimulai pada piksel ke-10 dan berlanjut hingga piksel ke-25). Hal yang sama untuk "e", "Aku, ... Kedengarannya membosankan dan merupakan kerja keras untuk dataset besar.
Bahkan jika Anda berhasil membuat anotasi dataset lengkap dengan cara ini, ada masalah lain. NN menampilkan skor untuk setiap karakter pada setiap langkah waktu, lihat tabel yang saya tunjukkan di atas untuk contoh mainan. Kita sekarang dapat mengambil karakter yang paling mungkin per langkah-waktu, ini adalah "b" dan "a" dalam contoh mainan. Sekarang pikirkan teks yang lebih besar, misalnya "Halo". Jika penulis memiliki gaya penulisan yang menggunakan banyak ruang dalam posisi horizontal, setiap karakter akan menempati beberapa langkah waktu. Mengambil karakter yang paling mungkin per langkah waktu, ini bisa memberi kita teks seperti "HHHHHHHHeeeellllllllloooo". Bagaimana seharusnya kita mengubah teks ini menjadi hasil yang benar? Hapus setiap karakter duplikat? Ini menghasilkan "Helo", yang tidak benar. Jadi, kita perlu beberapa postprocessing pintar.
CTC memecahkan kedua masalah:
Bagaimana ini dicapai?
Untuk mengilustrasikan ini, lihat gambar berikut. Namun dalam konteks pengenalan ucapan, pengenalan teks sama saja. Decoding menghasilkan teks yang sama untuk kedua speaker, meskipun penyelarasan dan posisi karakter berbeda.
Bacaan lebih lanjut:
sumber