
Tiada apa-apa dalam pembelajaran mesin yang memikat imaginasi seperti kemampuan mengenali gambar. Mengenal pasti gambar mesti menunjukkan "kecerdasan", bukan? Mari demystify.
Kemampuan untuk "melihat," ketika berhubungan dengan perisian, dimulai dengan kemampuan untuk mengklasifikasikan. Klasifikasi adalah pemadanan corak dengan data. Imej adalah data dalam bentuk matriks 2 dimensi.
Pengecaman gambar mengklasifikasikan data menjadi satu baldi daripada banyak. Ini adalah karya yang berguna: anda boleh mengklasifikasikan keseluruhan gambar atau perkara dalam gambar.

Salah satu aplikasi klasik dan cukup berguna untuk klasifikasi gambar adalah pengenalan watak optik (OCR): beralih dari gambar bahasa bertulis ke teks berstruktur .
Ini boleh dilakukan untuk sebarang abjad dan pelbagai gaya penulisan.
Langkah dalam proses
Kami akan membina kod untuk mengenali digit berangka dalam gambar dan menunjukkan bagaimana ini berfungsi. Ini akan mengambil 3 langkah:
- mengumpulkan dan menyusun data untuk digunakan (85% usaha)
- membina dan menguji model ramalan (10% usaha)
- gunakan model untuk mengenali gambar (5% usaha)
Menyiapkan data sejauh ini merupakan bahagian terbesar dari kerja kita, ini berlaku bagi kebanyakan karya sains data . Ada sebabnya dipanggil sains DATA!
Pembangunan model ramalan kami dan penggunaannya dalam meramalkan nilai adalah semua matematik . Kami menggunakan perisian untuk melakukan iterasi melalui data, untuk menjatuhkan “bobot” secara berulang dalam persamaan matematik, dan untuk bekerja dengan struktur data. Perisian ini tidak "pintar", ia berfungsi persamaan matematik untuk membuat pengetahuan yang sempit, dalam hal ini: mengenali gambar digit.
Dalam praktiknya, kebanyakan orang yang melabelkan "AI" hanyalah perisian yang menjalankan kerja pengetahuan.
Model dan data ramalan kami
Kami akan menggunakan salah satu model ramalan termudah: regresi "jiran terdekat-k" atau "kNN", yang pertama kali diterbitkan oleh E. Fix, JL Hodges pada tahun 1952.
Penjelasan ringkas mengenai algoritma ini ada di sini dan video matematiknya di sini. Dan juga di sini bagi mereka yang ingin membina algoritma dari awal.
Begini cara kerjanya: bayangkan grafik titik data dan bulatan yang menangkap titik k, dengan setiap nilai k disahkan terhadap data anda.

Kesalahan pengesahan untuk k dalam data anda mempunyai minimum yang dapat ditentukan.

Dengan nilai 'terbaik' untuk k, anda boleh mengelaskan titik-titik lain dengan beberapa ketepatan.
Kami akan menggunakan algoritma kNN scikit learn untuk mengelakkan diri daripada membina matematik. Dengan mudahnya perpustakaan ini juga akan memberi kami data gambar kami.

Mari kita mulakan.
Kodnya ada di sini, kami menggunakan notebook iPython yang merupakan cara produktif untuk mengerjakan projek sains data. Sintaks kod adalah Python dan contoh kami dipinjam dari sk-learn.
Mulakan dengan mengimport perpustakaan yang diperlukan:
Seterusnya kami menyusun data kami:
training images: 1527, test images: 269
Anda boleh memanipulasi pecahan dan mempunyai lebih kurang data ujian, kita akan melihat sebentar lagi bagaimana ini mempengaruhi ketepatan model kita.
Sekarang anda mungkin tertanya-tanya: bagaimana gambar digit disusun? Ini adalah susunan nilai, satu untuk setiap piksel dalam gambar 8x8. Mari kita periksa satu.
# one-dimension[ 0. 1. 13. 16. 15. 5. 0. 0. 0. 4. 16. 7. 14. 12. 0. 0. 0. 3. 12. 2. 11. 10. 0. 0. 0. 0. 0. 0. 14. 8. 0. 0. 0. 0. 0. 3. 16. 4. 0. 0. 0. 0. 1. 11. 13. 0. 0. 0. 0. 0. 9. 16. 14. 16. 7. 0. 0. 1. 16. 16. 15. 12. 5. 0.]
# two-dimensions[[ 0. 1. 13. 16. 15. 5. 0. 0.] [ 0. 4. 16. 7. 14. 12. 0. 0.] [ 0. 3. 12. 2. 11. 10. 0. 0.] [ 0. 0. 0. 0. 14. 8. 0. 0.] [ 0. 0. 0. 3. 16. 4. 0. 0.] [ 0. 0. 1. 11. 13. 0. 0. 0.] [ 0. 0. 9. 16. 14. 16. 7. 0.] [ 0. 1. 16. 16. 15. 12. 5. 0.]]
Data gambar yang sama ditunjukkan sebagai tatasusunan (satu dimensi) rata dan sekali lagi sebagai tatasusunan 8x8 dalam tatasusunan (dua dimensi). Anggap setiap baris gambar sebagai susunan 8 piksel, terdapat 8 baris. Kita boleh mengabaikan skala kelabu (nilai-nilai) dan bekerja dengan 0 dan 1, yang akan sedikit memudahkan matematik
Kita boleh 'merancang' ini untuk melihat susunan ini dalam bentuk 'pixelated'.

Digit apa ini? Mari tanya model kita, tetapi pertama-tama kita perlu membinanya.
KNN score: 0.951852
Terhadap data ujian kami, model jiran terdekat kami mempunyai skor ketepatan 95%, tidak buruk. Kembali dan ubah nilai 'pecahan' untuk melihat bagaimana ini mempengaruhi skor.
array([2])
Model meramalkan bahawa susunan yang ditunjukkan di atas adalah ' 2 ', yang kelihatan betul.
Mari cuba lagi, ingat ini adalah digit dari data ujian kami , kami tidak menggunakan gambar ini untuk membina model kami (sangat penting).


Boleh tahan.
Kita boleh membuat digit fiksyen dan melihat pendapat model kita mengenainya.

Sekiranya kita mempunyai koleksi gambar digit yang tidak masuk akal, kita boleh menambahkannya ke latihan kita dengan label bukan angka - hanya klasifikasi lain.
Jadi bagaimana pengecaman imej berfungsi?
- data gambar disusun : latihan dan ujian, dengan label (X, y)
Data latihan disimpan terpisah dari data ujian, yang juga bermaksud kami membuang pendua (atau hampir pendua) di antara mereka.
- model dibina menggunakan salah satu daripada beberapa model matematik (kNN, regresi logistik, rangkaian saraf konvolusional, dll.)
Which type of model you choose depends on your data and the type and complexity of the classification work.
- new data is put into the model to generate a prediction
This is lighting fast: the result of a single mathematical calculation.

If you have a collection of pictures with and without cats, you can build a model to classify if a picture contains a cat. Notice you need training images that are devoid of any cats for this to work.
Of course you can apply multiple models to a picture and identify several things.
Large Data
A significant challenge in all of this is the size of each image since 8x8 is not a reasonable image size for anything but small digits, it’s not uncommon to be dealing with 500x500 pixel images, or larger. That’s 250,000 pixels per image, so 10,000 images of training means doing math on 2.5Billion values to build a model. And the math isn’t just addition or multiplication: we’re multiplying matrices, multiplying by floating-point weights, calculating derivatives. This is why processing power (and memory) is key in certain machine learning applications.
There are strategies to deal with this image size problem:
- use hardware graphic processor units (GPUs) to speed up the math
- reduce images to smaller dimensions, without losing clarity
- reduce colors to gray-scale and gradients (you can still see the cat)

- look at sections of an image to find what you’re looking for
The good news is once a model is built, no matter how laborious that was, the prediction is fast. Image processing is used in applications ranging from facial recognition to OCR to self-driving cars.
Now you understand the basics of how this works.