Kuvien tunnistaminen vääristynyt

Mikään koneoppimisessa ei vangitse mielikuvitusta aivan kuten kyky tunnistaa kuvat. Kuvien tunnistamisen täytyy merkitä "älyä", eikö? Demystifioidaan.

Kyky "nähdä", kun on kyse ohjelmistoista, alkaa kyvystä luokitella. Luokittelu on mallin mukaista tietoa. Kuvat ovat tietoja 2-ulotteisten matriisien muodossa.

Kuvan tunnistus luokittelee tiedot yhteen ämpäriin monista. Tämä on hyödyllinen työ: voit luokitella kokonaisen kuvan tai asiat kuvaan.

Yksi klassisen ja melko hyödyllisen sovelluksen kuvaluokitukseen on optinen merkintunnistus (OCR): siirtyminen kirjoitetun kielen kuvista jäsenneltyyn tekstiin .

Tämä voidaan tehdä mille tahansa aakkoselle ja monenlaisille kirjoitustyyleille.

Prosessin vaiheet

Rakennamme koodin tunnistamaan kuvien numeeriset numerot ja osoittamaan, miten tämä toimii. Tämä kestää 3 vaihetta:

  1. kerätä ja organisoida tietoja toimimaan (85% työstä)
  2. rakentaa ja testata ennakoivaa mallia (10% työstä)
  3. käytä mallia kuvien tunnistamiseen (5% vaivasta)

Datan valmistelu on ylivoimaisesti suurin osa työstämme, tämä pätee useimpaan datatieteelliseen työhön . Syynä siihen on DATA-tiede!

Ennakoivan mallin rakentaminen ja sen käyttö arvojen ennustamisessa on kaikki matematiikkaa . Käytämme ohjelmistoa tietojen iteroimiseksi, taitettaviksi matemaattisten yhtälöiden "painot" ja työskentelemään tietorakenteiden kanssa. Ohjelmisto ei ole ”älykäs”, se toimii matemaattisilla yhtälöillä tekemään kapean tietotyön, tässä tapauksessa: tunnistamaan numeroiden kuvat.

Käytännössä suurin osa AI-merkinnöistä on oikeastaan ​​vain tietotyötä suorittavia ohjelmistoja.

Ennakoiva malli ja data

Käytämme yhtä yksinkertaisimmista ennakoivista malleista: "k-lähimmät naapurit" tai "kNN" regressio, jonka julkaisi ensimmäisen kerran E. Fix, JL Hodges vuonna 1952.

Yksinkertainen selitys tälle algoritmille on täällä ja video sen matematiikasta täällä. Ja myös täällä niille, jotka haluavat rakentaa algoritmin tyhjästä.

Näin se toimii: kuvittele kaavio datapisteistä ja ympyröistä, jotka sieppaavat k-pistettä, ja jokainen k: n arvo vahvistetaan tietojesi mukaan.

Tietojesi k: n tarkistusvirheessä on minimimäärä, joka voidaan määrittää.

Kun annetaan k: n paras arvo, voit luokitella muita pisteitä jollain tarkkuudella.

Käytämme scikit learnin kNN-algoritmia välttämään matematiikan rakentamista itse. Tämä kirjasto tarjoaa meille kätevästi myös kuvadatamme.

Aloitetaanpa.

Koodi on täällä, käytämme iPython-muistikirjaa, joka on tuottava tapa työskennellä datatieteellisissä projekteissa. Koodisyntaksi on Python ja esimerkkimme on lainattu sk-learn-ohjelmasta.

Aloita tuomalla tarvittavat kirjastot:

Seuraavaksi järjestämme tietomme:

training images: 1527, test images: 269

Voit manipuloida murto-osaa ja saada enemmän tai vähemmän testitietoja, näemme pian, miten tämä vaikuttaa mallimme tarkkuuteen.

Nyt olet luultavasti miettinyt: miten numerokuvat järjestetään? Ne ovat arvojoukkoja, yksi kutakin pikseliä kohti 8x8-kuvassa. Tarkastetaan yksi.

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

Samat kuvatiedot näytetään tasaisena (yksiulotteisena) matriisina ja taas 8x8-ryhmänä matriisissa (kaksiulotteinen). Ajattele jokaista kuvan riviä 8 pikselin ryhmänä, siellä on 8 riviä. Voisimme jättää harmaasävyn (arvot) huomiotta ja työskennellä 0: n ja 1: n kanssa, mikä yksinkertaistaisi matematiikkaa hieman.

Voimme "piirtää" tämän nähdäksesi tämän matriisin sen "pikselöidyssä" muodossa.

Mikä numero tämä on? Kysytään malliltamme, mutta ensin meidän on rakennettava se.

KNN score: 0.951852

Testituloksia vastaan ​​lähimmän naapurin mallimme tarkkuuspisteet olivat 95%, ei huono. Palaa takaisin ja muuta murto-arvoa nähdäksesi, miten tämä vaikuttaa pisteisiin.

array([2])

Malli ennustaa, että yllä esitetty taulukko on ' 2 ', mikä näyttää oikealta.

Yritetään vielä muutama, muista, että nämä ovat numeroita testitiedoistamme , emme ole käyttäneet näitä kuvia mallimme rakentamiseen (erittäin tärkeä).

Ei paha.

Voimme luoda kuvitteellisen numeron ja nähdä, mitä mallimme ajattelee siitä.

Jos meillä olisi kokoelma järjettömiä numerokuvia, voisimme lisätä ne koulutukseen ei-numeerisella tarralla - vain yksi luokitus.

Joten miten kuvan tunnistus toimii?

  • kuvatiedot on järjestetty : sekä koulutus että testi, tarroilla (X, y)

Harjoitustiedot pidetään erillään testitiedoista, mikä tarkoittaa myös sitä, että poistamme kaksoiskappaleet (tai melkein kaksoiskappaleet) niiden välillä.

  • malli on rakennettu käyttäen yhtä monista matemaattisista malleista (kNN, logistinen regressio, konvoluutioinen hermoverkko jne.)

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
  • pienennä värit harmaasävyiksi ja kaltevuuksiksi (voit silti nähdä kissan)
  • katso osia kuvasta löytääksesi etsimäsi

Hyvä uutinen on, kun malli on rakennettu, riippumatta siitä, kuinka työläs se oli, ennustus on nopea. Kuvankäsittelyä käytetään sovelluksissa, jotka vaihtelevat kasvojentunnistuksesta OCR: ään itse ajaviin autoihin.

Nyt ymmärrät tämän toiminnan perusteet.