Препознавање слика демистификовано

Ништа у машинском учењу не заокупља машту баш као способност препознавања слика. Препознавање слика мора означавати „интелигенцију“, зар не? Демистификујмо.

Способност „гледања“, када је софтвер у питању, започиње способношћу класификације. Класификација је подударање обрасца са подацима. Слике су подаци у облику дводимензионалних матрица.

Препознавање слика класификује податке у један скуп од многих. Ово је користан посао: можете класификовати целу слику или ствари унутар слике.

Једна од класичних и врло корисних апликација за класификацију слика је оптичко препознавање знакова (ОЦР): прелазак са слика писаног језика на структурирани текст .

То се може учинити за било коју абецеду и широк спектар стилова писања.

Кораци у процесу

Направићемо код за препознавање нумеричких цифара на сликама и показаћемо како то функционише. Ово ће предузети 3 корака:

  1. прикупити и организовати податке за рад (85% труда)
  2. изградити и тестирати предиктивни модел (10% напора)
  3. користите модел за препознавање слика (5% труда)

Припрема података је убедљиво највећи део нашег рада, ово се односи на већину научних радова . Постоји разлог што се зове ДАТА сциенце!

Изградња нашег предиктивног модела и његова употреба у предвиђању вредности је сва математика . Користимо софтвер за итерацију података, итеративно ковање „пондера“ унутар математичких једначина и рад са структурама података. Софтвер није „интелигентан“, већ ради математичким једначинама да би обавио уско знање, у овом случају: препознавање слика цифара.

У пракси, већина онога што људи називају „АИ“ заправо је само софтвер који обавља знање.

Наш предиктивни модел и подаци

Користићемо један од најједноставнијих предиктивних модела: регресију „к-најближих суседа“ или „кНН“, коју је први објавио Е. Фик, ЈЛ Ходгес 1952. године.

Једноставно објашњење овог алгоритма је овде, а видео његове математике овде. А такође и за оне који желе да алгоритам направе од нуле.

Ево како то функционише: замислите графикон тачака података и кругова који хватају к тачака, при чему се свака вредност к вреднује према вашим подацима.

Грешка потврде за к у вашим подацима има минимум који се може утврдити.

С обзиром на „најбољу“ вредност за к, друге тачке можете класификовати са извесном мером прецизности.

Користићемо кНН алгоритам сцикит леарн-а како бисмо избегли да сами градимо математику. Погодно је да нам ова библиотека пружа и наше податке о сликама.

Почнимо.

Код је овде, користимо иПитхон бележницу која је продуктиван начин рада на пројектима науке о подацима. Синтакса кода је Питхон, а наш пример је позајмљен из ск-леарн.

Започните увозом потребних библиотека:

Следеће организујемо наше податке:

training images: 1527, test images: 269

Можете да манипулишете разломком и имате мање или више података о тестовима, видећемо ускоро како ово утиче на тачност нашег модела.

До сада се вероватно питате: како су организоване дигиталне слике? То су низови вредности, по један за сваки пиксел на слици 8к8. Хајде да прегледамо један.

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

Исти подаци о слици приказани су као равни (једнодимензионални) низ и опет као низ 8к8 у низу (дводимензионални). Замислите сваки ред слике као низ од 8 пиксела, има 8 редова. Могли бисмо занемарити сиву скалу (вредности) и радити са 0 и 1, што би мало поједноставило математику.

Ово можемо „зацртати“ да бисмо видели овај низ у „пикселираном“ облику.

Која је ово цифра? Питајмо свој модел, али прво треба да га изградимо.

KNN score: 0.951852

У поређењу са нашим тест подацима, модел нашег најближег суседа имао је оцену тачности 95%, што није лоше. Вратите се и промените вредност „разломка“ да бисте видели како ово утиче на резултат.

array([2])

Модел предвиђа да је горе приказани низ „ 2 “, што изгледа тачно.

Покушајмо још неколико, сетимо се да су то цифре из наших тест података , нисмо користили ове слике за изградњу нашег модела (веома важно).

Није лоше.

Можемо створити измишљену цифру и видети шта наш модел мисли о томе.

Да имамо колекцију бесмислених дигиталних слика, могли бисмо их додати на наш тренинг са нумеричком ознаком - само још једна класификација.

Па како функционише препознавање слика?

  • Подаци о слици су организовани : и тренинг и тест, са налепницама (Кс, и)

Подаци о обуци чувају се одвојено од података са теста, што такође значи да уклањамо дупликате (или скоро дупликате) између њих.

  • модел се гради помоћу једног од неколико математичких модела (кНН, логистичка регресија, конволуциона неуронска мрежа, итд.)

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
  • смањите боје на сиву скалу и градијенте (и даље можете видети мачку)
  • погледајте делове слике да бисте пронашли оно што тражите

Добра вест је када се једном направи модел, без обзира колико то напоран био, предвиђања су брза. Обрада слике се користи у апликацијама у распону од препознавања лица до ОЦР-а до самовозећих аутомобила.

Сада разумете основе како ово функционише.