
Ništa u strojnom učenju ne zaokuplja maštu baš kao sposobnost prepoznavanja slika. Prepoznavanje slika mora sadržavati "inteligenciju", zar ne? Demistificirajmo.
Sposobnost „gledanja“, kada je softver u pitanju, započinje sposobnošću razvrstavanja. Klasifikacija je podudaranje uzorka s podacima. Slike su podaci u obliku dvodimenzionalnih matrica.
Prepoznavanje slika klasificira podatke u jedan skup od mnogih. Ovo je koristan posao: možete klasificirati cijelu sliku ili stvari unutar slike.

Jedna od klasičnih i vrlo korisnih aplikacija za klasifikaciju slika je optičko prepoznavanje znakova (OCR): prelazak sa slika pisanog jezika na strukturirani tekst .
To se može učiniti za bilo koju abecedu i široku paletu stilova pisanja.
Koraci u procesu
Izgradit ćemo kôd za prepoznavanje numeričkih znamenki na slikama i pokazati kako to funkcionira. To će poduzeti 3 koraka:
- prikupiti i organizirati podatke za rad (85% truda)
- izgraditi i testirati prediktivni model (10% napora)
- koristiti model za prepoznavanje slika (5% truda)
Priprema podataka daleko je najveći dio našeg rada, to vrijedi za većinu znanstvenih radova . Postoji razlog što se to naziva DATA science!
Izgradnja našeg prediktivnog modela i njegova upotreba u predviđanju vrijednosti sve je matematika . Koristimo softver za iteraciju podataka, iterativno kovanje "pondera" unutar matematičkih jednadžbi i rad sa strukturama podataka. Softver nije „inteligentan“, već radi matematičkim jednadžbama kako bi obavio usko znanje, u ovom slučaju: prepoznavanje slika znamenki.
U praksi je većina onoga što ljudi nazivaju "AI" zapravo samo softver koji obavlja znanje.
Naš prediktivni model i podaci
Koristit ćemo jedan od najjednostavnijih prediktivnih modela: regresiju "k-najbližih susjeda" ili "kNN", prvi put objavio E. Fix, JL Hodges 1952. godine.
Jednostavno objašnjenje ovog algoritma nalazi se ovdje, a videozapis njegove matematike ovdje. A ovdje i za one koji žele algoritam graditi od nule.
Evo kako to funkcionira: zamislite grafikon točaka podataka i krugova koji bilježe k bodova, a svaka vrijednost k provjerava se prema vašim podacima.

Pogreška provjere valjanosti k u vašim podacima ima minimum koji se može odrediti.

S obzirom na 'najbolju' vrijednost za k, možete klasificirati druge točke s određenom mjerom preciznosti.
Upotrijebit ćemo kNN algoritam scikit learn-a kako bismo sami izbjegli izgradnju matematike. Pogodno je da nam ova knjižnica pruža i naše slikovne podatke.

Započnimo.
Kôd je ovdje, koristimo prijenosnik iPython koji je produktivan način rada na projektima znanosti o podacima. Sintaksa koda je Python, a naš primjer posuđen je iz sk-learn.
Započnite uvozom potrebnih knjižnica:
Dalje organiziramo svoje podatke:
training images: 1527, test images: 269
Možete manipulirati razlomkom i imati više ili manje podataka o ispitivanju, uskoro ćemo vidjeti kako to utječe na točnost našeg modela.
Dosad se već pitate: kako su organizirane digitalne slike? To su nizovi vrijednosti, po jedan za svaki piksel na slici 8x8. Idemo pregledati jedan.
# 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.]]
Isti slikovni podaci prikazani su kao ravni (jednodimenzionalni) niz i opet kao niz 8x8 u nizu (dvodimenzionalni). Zamislite svaki red slike kao niz od 8 piksela, ima 8 redaka. Mogli bismo zanemariti sivu ljestvicu (vrijednosti) i raditi s 0 i 1, što bi malo pojednostavilo matematiku.
To možemo "zacrtati" kako bismo vidjeli ovaj niz u "pikseliziranom" obliku.

Koja je ovo znamenka? Pitajmo svoj model, ali prvo ga moramo izgraditi.
KNN score: 0.951852
U odnosu na naše testne podatke, model našeg najbližeg susjeda imao je ocjenu točnosti 95%, što nije loše. Vratite se i promijenite vrijednost 'razlomka' da biste vidjeli kako to utječe na rezultat.
array([2])
Model predviđa da je gore prikazani niz ' 2 ', što izgleda točno.
Pokušajmo još nekoliko, sjetimo se da su to znamenke iz naših testnih podataka , te slike nismo koristili za izgradnju našeg modela (vrlo važno).


Nije loše.
Možemo stvoriti izmišljenu znamenku i vidjeti što naš model o tome misli.

Da imamo zbirku besmislenih znamenkastih slika, mogli bismo ih dodati na naš trening s numeričkom oznakom - samo još jedna klasifikacija.
Pa kako funkcionira prepoznavanje slika?
- slikovni podaci su organizirani : i trening i test, s naljepnicama (X, y)
Podaci o treningu drže se odvojeno od podataka s testa, što također znači da uklanjamo duplikate (ili gotovo duplikate) između njih.
- model se gradi pomoću jednog od nekoliko matematičkih modela (kNN, logistička regresija, konvolucijska neuronska mreža, itd.)
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.