Képfelismerés demisztizált

A gépi tanulásban semmi nem ragadja el a képzeletet, mint a képek felismerésének képessége. A képek azonosításának az „intelligenciát” kell jelentenie, igaz? Demisztifikáljuk.

A szoftverek „látásának” képessége az osztályozás képességével kezdődik. Az osztályozás az adatokkal való egyezés. A képek adatok kétdimenziós mátrixok formájában.

A képfelismerés az adatokat egy csoportba sorolja a sok közül. Ez hasznos munka: egy teljes képet vagy dolgokat besorolhat egy képbe.

A képek besorolásának egyik klasszikus és nagyon hasznos alkalmazása az optikai karakterfelismerés (OCR): az írott nyelv képeitől a strukturált szövegig terjed .

Ez bármilyen ábécé és sokféle írási stílus esetén megtehető.

A folyamat lépései

Kódot építünk a képek számjegyeinek felismerésére, és bemutatjuk ennek működését. Ennek három lépése lesz:

  1. összegyűjteni és rendszerezni az adatokat (az erőfeszítés 85% -a)
  2. prediktív modell felépítése és tesztelése (az erőfeszítés 10% -a)
  3. használja a modellt a képek felismerésére (az erőfeszítés 5% -a)

Az adatok előkészítése messze a munkánk legnagyobb része, ez igaz a legtöbb adattudományi munkára . Van egy oka annak, hogy DATA tudománynak hívják!

A prediktív modell felépítése és az értékek előrejelzésében való felhasználása mind matematika . Szoftvert használunk az adatok közötti iterációra, a matematikai egyenleteken belüli „súlyok” iteratív kovácsolására és az adatstruktúrákkal való együttműködésre. A szoftver nem „intelligens”, matematikai egyenletekkel működik a szűk tudásmunka elvégzéséhez, ebben az esetben: a számjegyek képeinek felismerésére.

A gyakorlatban az emberek által az „AI” címkével ellátott dolgok többsége valójában csak a tudásmunkát végző szoftver.

Prediktív modellünk és adataink

Az egyik legegyszerűbb prediktív modellt fogjuk használni: a „k-legközelebbi szomszédok” vagy a „kNN” regressziót, amelyet először E. Fix, JL Hodges adta ki 1952-ben.

Ennek az algoritmusnak a magyarázata itt található, a matematika videója pedig itt található. És itt azok számára is, akik a semmiből akarják felépíteni az algoritmust.

Így működik: képzeljen el egy k pontot rögzítő adatpontok és körök grafikonját, ahol k mindegyik értéke érvényesül az adatai alapján.

Az adatok k ellenőrzési hibája minimálisan meghatározható.

A k legjobb értékét figyelembe véve bizonyos pontossággal más pontokat is besorolhat.

A scikit learn kNN algoritmusát fogjuk használni, hogy elkerüljük a matematika felépítését. Kényelmesen ez a könyvtár a képadatainkkal is szolgál.

Kezdjük.

A kód itt van, az iPython notebookot használjuk, amely produktív módszer az adattudományi projektek kidolgozására. A kódszintaxis Python, és példánkat az sk-learn-től kölcsönöztük.

Kezdje a szükséges könyvtárak importálásával:

Ezután rendszerezzük az adatainkat:

training images: 1527, test images: 269

A frakciót manipulálhatja, és többé-kevésbé rendelkezhet tesztadatokkal, hamarosan meglátjuk, hogy ez hogyan befolyásolja modellünk pontosságát.

Mostanra valószínűleg kíváncsi vagy: hogyan vannak rendezve a számjegyű képek? Értéktömbök, egy-egy minden pixelhez egy 8x8-as képen. Vizsgáljuk meg az egyiket.

# 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.]]

Ugyanezek a képadatok sík (egydimenziós) tömbként és ismét 8x8 tömbként jelennek meg egy tömbben (kétdimenziós). Gondoljon a kép minden sorára, mint egy 8 pixeles tömbre, 8 sor van. Figyelmen kívül hagyhatjuk a szürkeárnyalatot (az értékeket), és 0-val és 1-vel dolgozhatunk, ami kissé leegyszerűsítené a matematikát.

Ezt „ábrázolhatjuk”, hogy ezt a tömböt pixelezett formában lássuk.

Milyen számjegy ez? Kérdezzük meg a modellünket, de előbb fel kell építenünk.

KNN score: 0.951852

Tesztadatainkkal szemben a legközelebbi szomszéd modellünk pontossága 95% volt, nem rossz. Menjen vissza, és változtassa meg a „tört” értéket, hogy lássa, hogyan hat ez a pontszámra.

array([2])

A modell azt jósolja, hogy a fent bemutatott tömb „ 2 ”, ami jól néz ki.

Próbálkozzunk még néhányal, ne feledjük, hogy ezek számjegyek a tesztadatainkból , ezeket a képeket nem a mi modellünk felépítéséhez használtuk (nagyon fontos).

Nem rossz.

Készíthetünk egy kitalált számjegyet, és megnézhetjük, mi a véleményünk róla.

Ha rendelkeznénk értelmetlen számjegyű képek gyűjteményével, ezeket nem numerikus címkével egészíthetnénk ki a képzésünkbe - ez csak egy újabb besorolás.

Tehát hogyan működik a képfelismerés?

  • képadatok vannak rendszerezve : képzés és teszt egyaránt, címkékkel (X, y)

Az edzésadatokat elkülönítve tartjuk a tesztadatoktól, ami azt is jelenti, hogy eltávolítunk közöttük másolatokat (vagy majdnem duplikátumokat).

  • a modellt számos matematikai modell (kNN, logisztikai regresszió, konvolúciós neurális hálózat stb.) felhasználásával építik fel

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.