Автор Тема: OpenCV / обучаване на Haar cascade класификатори  (Прочетена 30994 пъти)

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Мне, коденето не ми е голям проблем, API-то е лесно и склонно да прави много неща наготово, без да мислиш особено, а специално python-ския wrapper прави нещата наистина тривиални. Това е и причината досега да не ми се е налагало да се опитвам да разбирам добре как точно работи класифицирането, обаче като гледам за съжаление май ще се наложи в крайна сметка.

Големият проблем ми е тренирането на класификатора и там няма никакво кодене - има няколко command-line тулове идващи с opencv. Досега нямам никакъв успех с това - обикновено тренирането гърми с някакви странни грешки преди да стигне до последния stage. Единият път когато успях да тренирам модел (базиран на снимка на батерия Duracell) бях оплескал нещата брутално - за фон на снимката при генерирането на семплите съм избрал черен цвят, вместо бял и бях разменил ширината с височината. Резултатът беше че батерии се разпознаваха в раетата на блузата ми, докато истинската батерия не се разпознаваше изобщо.
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
Незнам.... ??? ???. ама това с Haar, поне каквото успях да пропрочета не ми се вижда правилният подход за разпознаване на образи. Да не говорим че изисква и страшно много трениране. А и нещата се свеждат до обикновенна статистика.
нали за това става дума: https://www.youtube.com/watch?v=hPCTwxF0qf4


Много по перспективни ми се виждат тези алгоритми с  'geometric hashing'. Поне тук се влага не само статистика а и интелект.
Представям си нещата така:
1. определяне контурите на картинката
2. намиране на особенни точки, които ни итересуват. може да са контури, ъгли....
3. строи се масив с тези точки. което ще е и hashing масива.
4. ако може да се направят няколко снимки от различни ъгли на обекта или стерео изображение този масив да стане 3D масив. Или пък с някакъв по специален алгоритъм (на базата на светлосенките) да се апроксимира 2Д към 3Д hash масив.

И това ще бъде цялото трениране. Не би трябвало да има огромни изчисления.

А разпознаването:
Пак се строи hashing масива на изображението.
1. търси се с алгоритъма  'geometric hashing' дали някой извесните hash масиви се съдържа в hashing-а на изображението. И това е.

Обаче не мога да намеря нищо готово......Само общи статии. :'(
Почвам да си мисля, че когато мина колата на гого, не само снимки на улиците и сградите е направила но са направили и 3d hash-ове на сградите.
« Последна редакция: Mar 29, 2015, 17:05 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

NorthBridge

  • Напреднали
  • *****
  • Публикации: 177
  • Distribution: Slackware-current
  • Window Manager: Enlightenment E17
  • Mad Tinkerer
    • Профил
това знаете ли го. https://www.tineye.com/
Качете някоя картинка и веднага ще ви открие същите или подобни картинки в Интернет. Как ли го правят?

С нещо подобно се занимавам в момента.  Трябва да открия дублиращи се или приличащи си картинки. Използват нещо което му викат 'perceptual hashing'. Е на мен това 'perceptual hashing' ще ми свърши работа. Обаче това не е истинско разпознаване на образи. Например справя се чудесно ако картинката е смачкана/разтеглена с различна резолюция. Обаче ако ако е леко позавъртяна или shift-ната или пък картинка в картинка - няма да свърши работа.

Четох как ли се прави и стигнах до термина 'geometric hashing' . http://en.wikipedia.org/wiki/Geometric_hashing

http://stackoverflow.com/questions/22585989/partial-image-detection-with-perceptual-hashing
Цитат
One approach for doing this can be 1. Extract geometric markers (special points), for both input and output, for example by using the Harris corner detector. 2. Compare every possible pair of triangles on each image . If they have the same angles, they define a transformation (resize, rotate,shift, and mirror). Google "geometric hashing" 3 Count how many points in the target agree with the transformed source, and you have a score for the match. 4. Verify the best match by other means (histogram, edge-registration).

This approach is slow in theory (o(n^6) in the number of points) but I believe it can be practical using an appropriate choice of n and some tricks to speed it up.


http://en.wikipedia.org/wiki/Corner_detection
http://en.wikipedia.org/wiki/Harris_affine_region_detector

Как се превежда на БГ Афинно пространство... Афинни точки... ???
Няма ли някакви command line тулове, които да изплюват 'geometric hashing'-а на снимки или региони и така по-лесно да се екперементира без да се пишат програми.

Със същата работа за сравняване на картинки ми се налага да се занимавам и аз сега. За щастие на мен ми трябват само съвпадения с 99% (образно казано), и не се налага да търся съвпадения в по-голяма картинка, завъртяни картинки и т.н.
За което perceptual hashing върши прекрасна работа (само да имаше и кадърна библиотека за PHP, ех  :'( )

Цялата дивотия е базирана на Discrete cosine transform. Сега с математиката съм жестоко скаран, така че не съм чел толкова надълбоко. Един пич от hacker news има обаче статийка по въпроса и според него общо взето ниските честоти дават общата картина, докато високите честоти дават детайли - като разкараш високите честоти с въпросния DCT, можеш да търсиш съвпадения в структурата. Така че вероятно TinEye правят същото за да не се влияят толкова много от осветление, размазаност и т.н., след което прилагат идеята с geometric hashing. Уви, за geometric hashing не знам дали има нещо под конзола. ImageMagick предлага сравняване на картинки с PHASH метрика от версия 6.8.8.3, но ако задълбаваш по-надълбоко, нататък всичко е тъмна Индия - две три академични хартии по въпроса, и няколко изречения в Wikipedia. Това установих след близо 3 дни нон-стоп ровене.

Иначе за разпознаване на обекти това е пълна простотия според мен, особено като сметнеш колко време ти трябва за изчисление, и каква е ползата в крайна сметка. 100% има други къде-къде по-производителни алгоритми за целта. Вероятно може да се ползва като допълнителна стъпка в разпознаването, но дори и това ме съмнява.

P.S: това изглежда интересно. За съжаление за него има пак само академични хартии.
Активен

I did a 'zcat vmlinuz > /dev/audio' and I think I heard God...

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
само да имаше и кадърна библиотека за PHP, ех  :'( )

Има.
phash.org има модул за php. pHash.so, който обаче много трудно се компилира. Пробвах и работи. От цялата работа ти трябва само една функция:
Цитат
ph_dct_imagehash

(No version information available, might only be in Git)

ph_dct_imagehash — pHash DCT image hash
Description
resource ph_image_hash ph_dct_imagehash ( string $file )

Perceptual image hash based on DCT.
пробвах я и работи прекрасно. Изплюва 16 символен низ с шестнадесетични символи.
А сравнението на hash-овете си го направи сам.
Ако ли пък не ти се занимава с пхп модули има и чисто php библиотека https://github.com/kennethrapp/phasher , която не съм я пробвал още.


Това за сега....
« Последна редакция: Apr 14, 2015, 17:57 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

NorthBridge

  • Напреднали
  • *****
  • Публикации: 177
  • Distribution: Slackware-current
  • Window Manager: Enlightenment E17
  • Mad Tinkerer
    • Профил
само да имаше и кадърна библиотека за PHP, ех  :'( )

Има.
phash.org има модул за php. pHash.so, който обаче много трудно се компилира. Пробвах и работи. От цялата работа ти трябва само една функция:
Цитат
ph_dct_imagehash

(No version information available, might only be in Git)

ph_dct_imagehash — pHash DCT image hash
Description
resource ph_image_hash ph_dct_imagehash ( string $file )

Perceptual image hash based on DCT.
пробвах я и работи прекрасно. Изплюва 32 символен низ с шестнадесетични символи.
А сравнението на hash-овете си го направи сам.
Ако ли пък не ти се занимава с пхп модули има и чисто php библиотека https://github.com/kennethrapp/phasher, която не съм я пробвал още.


Това за сега....

pHash-a беше първото нещо което намерих, но едно че предпочитам да избегна компилирането на нов модул, и друго че лиценза е GPL. Иначе ако беше само за мене си, досега да съм го пуснал да върви :)

Най-много ме е яд че ImageMagick го има вградено и работи много по-бързо, но точно PHASH метриката я няма изложена в PHP wrapper-a.

Иначе мерси за линка, в GitHub бях намерил само две архаични библиотеки от 2008 с трагично качество. Това изглежда че ще ми свърши работа.  [_]3
Активен

I did a 'zcat vmlinuz > /dev/audio' and I think I heard God...

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
   този същият има и по нов блог
http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html

Вътре говори и за нов алгоритъм dhash.
 По спомени във въпросната пхп библиотека не се съдържа алгоритъма phash с DCT,  но за сметка на това се подържа dhash. 
Активен

Perl - the only language that looks the same before and after encryption.

4096bits

  • Напреднали
  • *****
  • Публикации: 3271
    • Профил
Като ви чета, малко се учудвам. Лицевото разпознаване е стара идея и по нея се работи от доста време. Учудвам се, че намирате толкова малко по въпроса.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Цитат
Незнам.... ??? ???. ама това с Haar, поне каквото успях да пропрочета не ми се вижда правилният подход за разпознаване на образи. Да не говорим че изисква и страшно много трениране. А и нещата се свеждат до обикновенна статистика.
нали за това става дума: https://www.youtube.com/watch?v=hPCTwxF0qf4

Това е...е, малко го подценяваш според мен. Ето го впрегнато да върши работа и поне според мен се справя изключително добре:

https://t.co/2MSCrwsryz

Има според мен голяма разлика между "разпознаване" на образи и "откриване" на образи. Haar класификаторите не са добра идея ако искам да разпозная моето лице измежду всички останали - вероятно не е невъзможно, но е доста неоптимално. Идеята в случаят е "откриване" на образ, не "разпознаване". Специално за лицевото разпознаване има далеч по-ефективни алгоритми в opencv като гледам, но за "откриването" на обекти, haar дори да не е най-ефективното решение, след кратък research стигам до извода че е най-прекият път към нещо което работи добре същевременно не е ресурсоемко.

Но е много добра идея ако искам да разпознавам произволно лице - работи еднакво добре срещу мъжки и женски лица, работи добре срещу снимани лица, работи добре срещу лица на хора от други раси и работи изключително добре дори върху скапаната черно-бяла снимка върху личната ми карта. Просто моделът е много добре трениран. Но това е модел, който работи за "произволно човешко лице срещу камерата". Ако си извъртиш главата дори на 45 градуса, ще престане да го разпознава като човешко лице. По същият начин, ако си затвориш очите или си сложиш слънчеви очила, ще престане да ги разпознава като очи.

Поради същата причина, ако ползваш гадната статистика (Haar), можеш да си създадеш генерични класификатори, примерно за батерия - няма да е само duracell, ами примерно в зависимост от това с колко позитиви тренираш модела - за произволно нещо приличащо на батерия. Същото важи и за чашата за кафе - примерно имам няколко различни чаши, керамични и ги ползвам на случаен принцип - в зависимост коя е първата която взема и не е мръсна или в миялната машина. Аз не виждам как специално за този случай геометричното хеширане би работило по-добре (не разбирам от това, но изпитвам известни съмнения и че се справя добре ако обектът не е на фокус на камерата и не заема по-голямата част от изображението, но може и да греша за това).

Всъщност, лицевото разпознаване е следващото нещо, което ще проуча след като докарам като хората създаването на haar класификатори.
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
Има според мен голяма разлика между "разпознаване" на образи и "откриване" на образи.
Да така нещата си идват на мястото.

колкото до геометричното хеширане това което прочетох във википедията за алгоритъма на мачваване страшно много ми хареса.

Задачата може да се онагледи с прост пример. Дават ти нарисувано съзвездие на лист хартия - например Голяма мечка и ти трябва да го откриеш на небето. е това съзвездие може да е с друг мащаб, може да е завъряно, може да е посмачкано, небето също може да е завъртяно и т.н. - изобщо може да е претърпяло всякави трансформации.


« Последна редакция: Mar 30, 2015, 10:39 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
А, имам малък успех, успях да си тренирам каскаден модел. За повече от 24 часа и само с 10 stages и само с няколкостотин позитива и негатива.

Не работи особено добре поради гореизброените причини, дава прекалено много false positives за съжаление, ама е добро начало, поне да знам че нещо не греша.


Също така се оказва че OpenCV подържа няколко статистически алгоритъма за тази цел. Поне доколкото разбирам Haar нещата грубо казано отнемат най-много време и ресурси за етапа на тренирането, но и позволява най-висока точност на откриването на обекти. Другият вариант (LBP) не е такава изчислителна мъка по отношение на тренирането на модела, но теоретично при най-добро старание обикновено докарвало с 1-2% по-лоши резултати от Haar. Като това може да било незначително, но при добре тренирани модели, и двата алгоритъма се вписвали в рамките на *над 95% вероятност да разпознае обекта* и поради това според големите глави, Haar видимо се справял по-добре. Което е странно, моят първи Haar cascade.xml силно ме съмнява да се вписва изобщо в тези смели резултати. А има и трети алгоритъм, HOG, за който не мога да открия прилична информация и май е някаква новост в OpenCV 3.0
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
Малко интересни адреси. Да използвам linux-bg като bookmark >:D

http://www.cs.haifa.ac.il/~rita/visual_recog_course/Visual%20Recognition%20Spring.htm
http://www.robots.ox.ac.uk/~vgg/research/affine/   ( http://www.robots.ox.ac.uk/~vgg/ )
http://libccv.org/tutorial/ (тоя предлага готово решение за детектване на лица, а и пакета е доста голям.)

На няколко места срещам непреки твърдения че явно G.Goggles използва геометрични алгоритми за разпознавенето.

в една книга хвалят много този алгоритъм. Като казват, че той е изместил по-предишните алгоритми като 'geometric hashing'
Цитат
The RANSAC (RANdom SAmple Consensus) algorithm, introduced by Fischler and Bolles (1981) [51] has become by far the most successful correspondence search method. RANSAC is a general, robust method for model fitting in noisy data, with signicant
outliers.

Ще трябва доста да се чете :'( Прави ми впечатление че твърде много се набляга на алгоритмните за определяне на неща, области, точки и т.н., като обаче самото мачване някакси се подминава или не знам къде и какво да гледам.Не мога и да разбера има ли някакъв негласен стандарт (и как се казва) на данните/масивите дето изплюват въпросните алгоритми. Щото след това тези данни ги обработват с алгоритмите за мачване ???


« Последна редакция: Apr 02, 2015, 20:20 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

remotexx

  • Напреднали
  • *****
  • Публикации: 804
    • Профил
Гугъл може да ползва каквото си иска ...и да не забравяме че имат най-голямата база от данни да си го тренират все пак:
http://googleblog.blogspot.com/2012/06/using-large-scale-brain-simulations-for.html
http://www.wired.com/2012/06/google-x-neural-network/
http://www.dailytech.com/Googles+Unsupervised+SelfLearning+Neural+Network+Searches+For+Cat+Pics/article25025.htm
даже unsupervised learning - оставили са го на самотек (като децата) само да се учи и баш като аз на 5 г. имах същата идея за котките (предимно учлини навремето)  8)

но човекът питаше как може това да стане с по-оскъден ресурс...
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
А, това unsupervised learning и генетичните алгоритми са голяма перверзия. Преди време бях чел за някакъв спътник на НАСА, който им е бил с демонстрационна цел покрай другото - да тестват разни нови концепции. Антената за връзка с наземния контрол е проектирана точно от такъв алгоритъм и изглежда така:



Сега никой инженер няма да проектира точно такава антена, но се оказва че проектираната от алгоритъма има оптимални качества (КСВ, оптимална диаграма на излъчване и т.н) и е по-добра от решенията, които обикновено се проектират от хора на базата на солидна теория и досегашен опит. И съответно наистина са го изработили това и са го пратили в космоса. Алтава работа.


P.S: https://www.nasa.gov/mission_pages/st-5/main/04-55AR.html
« Последна редакция: Apr 02, 2015, 22:19 от gat3way »
Активен

"Knowledge is power" - France is Bacon

Naka

  • Напреднали
  • *****
  • Публикации: 2670
    • Профил
Гугъл може да ползва каквото си иска ...и да не забравяме че имат най-голямата база от данни да си го тренират все пак:

Голяма база данни не означава точна  база. Щото в нея неминуемо има и шум. Не искам да кажа, че не ти трябва огромна/голяма база да тренираш нещо статистически, но има един момент, че колкото и да увеличаваш базата, качеството няма да продължи да се покачва. Дали това дето извличат от нета е много качествено? Всеки ден се генерира огромно количество спам от всички и след това този спам им влиза и в моделите.

Дали не се само хвалят. Това например не обеснява защо търсенето им се влошава със всеки ден, а         твърдят че имат 'графи на знанието'
Активен

Perl - the only language that looks the same before and after encryption.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Може би срещат проблеми от чисто човешки характер, в смисъл не случайно SEO-то си е един вид като професия в днешно време. На мен в последно време ми е трудно да схвана замисъла на някои очевидно SEO-инспирирани иначе напълно безсмислени глупости, които виждам примерно, които ми ги вади google понякога.

Далечна асоциация, помня едни откровения на Schneier по отношение на security проблемите, той правеше някакви асоциации със бъговете в софтуера и закона на Мърфи и бъговете със security импликации със нещо което наричаше "Satan's law". Един вид че точно бъговете със security последствия са тези, които някой нарочно ще тръгне да експлойтва и поради тази причина целия QA процес при софтуера е криво измислен, защото coverage-а и приоритетите са едни, а реалността е друга. Та същата работа с алгоритмите на гугъл, те може добре да се справят със случайния шум, но вероятно не толкова добре с нарочните зловредни SEO изпълнения.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
OpenCV или libjpeg проблем
Общ форум
shoshon 0 1730 Последна публикация Jun 22, 2009, 22:02
от shoshon
OpenCV - Help
Web development
taloveca 0 1475 Последна публикация Jan 27, 2015, 20:06
от taloveca
Инсталиране на OpenCV
Хардуерни и софтуерни проблеми
4096bits 1 1312 Последна публикация Jan 23, 2017, 20:58
от remotexx
Обработка на снимка с opencv
Хардуерни и софтуерни проблеми
gosho987 9 2181 Последна публикация Dec 07, 2017, 17:52
от 4096bits