Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.95 KB | None | 0 0
  1. Noi vrem sa putem determina daca o imagine are un spate de masina sau nu... si cum facem asta
  2. Avem un set de imagini initiale pe care le cunoastem cum sunt (daca au masina sau nu)
  3. Folosind acest set de imagini, creeam ceea ce se numeste un "dictionat de cuvinte vizuale" (analogie ar fi cuvintele din dictionar... alea au definitii formalizate... noi insa trebuie sa creeam "cuvinte" noi pt situatia curenta... poze cu masini)
  4. Cum creeam acest dictionar... pai cam asa...
  5. 1) Extragem caracteristici (si le descriem folosind descriptori) (o sa revin)
  6. 2) Construim un vocabular de cuvinte (o sa revin)
  7. ---- Ce e sus reprezinta doar partea initiala... pe care ne vom baza cand vom determina daca o imagine are spate de masina sau nu... Dupa ce am facut asta urmeaza partea a doua.
  8. Avand o poza noua cu o masina trebuie sa
  9. 3) O descriem folosind "cuvintele" definite mai devreme (o reprezentam folosind modelul BOVW)
  10. 4) Sa o clasificam (folosind un clasificator... el ne-a prezentat 3 parca... SVM, Cel Mai Apropiat Vecin si Bayesian)
  11.  
  12. 1) O caracteristica a unei imagini este o bucata din acea imagine... o fereastra... de ex, pt masinile noastre, ar fi o fereastra cu farul din spate...
  13. Pentru ca trebuie procesate numeric, trebuie sa descriem aceasta fereastra intr-un fel... exista multe metode, insa noi folosim ceea ce se numeste HOG (histograma de gradienti orientati - o sa intru in detaliu despre gradienti daca vrei).
  14. In esenta, un descriptor este de fapt un vector... un sir de numere... fiecare metoda de descriere genereaza vectori de diferite dimensiuni in practica... al nostru o sa genereze un vector de 128 de valori...
  15.  
  16. Cum facem cu acest HOG... noi o sa impartim imaginea noastra in ferestre de 16x16 pixeli.
  17. Aceste ferestre, la randul lor o sa le impartim in patchuri de 4x4. Pentru fiecare patch de 4x4 facem o histograma de dimensiune 8 (adica o avem valori de la 0 la 255 pe care le impartim in 8 intervale si din alea 16 valori zicem cate cad in fiecare interval).
  18. Facem asta pentru toate cele 16 patchuri si o sa avem 16 histograme... Aceste 16 histograme le concatenam si o sa avem un vector de 128 numere (16 x 8 ).
  19.  
  20. Ca sa fie mai clar
  21. imagine ->
  22. 1) O impartim in bucati de 16x16 pixeli (o astfel de bucata o poti numi o caracteristica a imaginii)
  23. pentru fiecare bucata de 16x16 ->
  24. 2) O impartim in patchuri de 4x4 (16 patchuri per fereastra)
  25. pentru fiecare patch de 4x4
  26. 3) Calculam o histograma de dimensiune 8 (8 intervale)
  27. obtinem 16 histograme ->
  28. 4) Concatenam aceste histograme
  29. obtinem un vector de 128 de valori
  30.  
  31.  
  32.  
  33. 2) Ok, acum stim cum putem sa descriem o imagine folosind doar numere... adica dupa ce aplicam ce am zis mai sus... o sa avem un set de vectori de 128 de valori (numarul de vectori va depinde de cate ferestre de 16x16 am extras dintr-o imagine).
  34. Pentru a creea un vocabular extragem seturi de vectori din mai multe tipuri de imagini (adica imagini care au masini si imagini care nu au... )
  35.  
  36. Sa zicem ca avem 50 : 50 imagini si impartim fiecare imagine in 20 de ferestre de 16x16 (un numar aleator).
  37. Deci dupa ce descriem fiecare imagine, o sa avem
  38. 100 * 20 vectori de dimensiune 128 (un vector pentru fiecare fereastra de 16x16).
  39.  
  40. Pentru moment o sa uitam ca lucram cu imagini si o sa ne focusam pe faptul ca avem doar 2000 de vectori de dimensiune 128 si vrem sa-i clusterizam (nu o sa intru in detalii despre k-means, dar daca trebuie... iti explic).
  41. Folosim k-means ca sa-i clusterizam in cate clustere vrem noi... Sa zicem k=10... si in final, pentru fiecare cluster, o sa avem un centru (centroid). Acesta va fi tot un vector de 128 de valori (cel mai probabil un vector complet diferit de cei 2000 pe care ii avem).
  42.  
  43. Deci dupa etapa asta o sa avem 10 vectori de dimensiune 128. Ei bine, acesti vectori, reamintindu-ne ca lucram cu imagini, sunt de fapt vocabularul nostru i.e. fiecare vector de fapt reprezentand un "cuvant".
  44. Acum, cu aceste 10 cuvinte putem sa descriem imagini.
  45.  
  46. Ca sa facem o analogie... ai un document in romana si vrei sa determini daca in el este vorba despre politica (ai o poza si vrei sa determini daca are o masina in ea sau nu). Ei bine, ca sa faci asta, cel mai usor ar fi sa iei toate cuvintele din limba romana (cele 10 cuvinte pe care le-am "definit" mai sus) si sa numeri de cate ori apare fiecare (histograma), si folosind asta sa determini daca documentul (poza) este despre politica sau nu (are o masina in ea sau nu).
  47.  
  48.  
  49.  
  50. 3) Acum trecem la partea 2...
  51. Ti se da o poza cu o masina.... si vrei sa numeri de cate ori apare fiecare "cuvant" (din cele 10) in aceasta.
  52. Pentru asta, repetam ce am facut la 1, adica impartim imaginea in ferestre de 16x16, si pentru fiecare calculam un descriptor (un vector de 128 valori).
  53. Acum, pentru fiecare patch, trebuie sa vedem care dintre cele 10 "cuvinte" il "descrie" cel mai bine. Pentru asta folosim tot k-means (dar de data asta stim cei 10 clusteri, cei 10 centri) ca sa vedem din ce cluster face parte fiecare descriptor).
  54.  
  55. Stiind din ce cluster face parte fiecare fereastra (sau caracteristica), acum trebuie doar sa numaram cate patchuri are fiecare cluster (adica cate patchuri pot fi descrise cu fiecare "cuvant"). Adica creeam o histograma.
  56.  
  57. Mai concret.. avem 20 de patchuri.. .si 10 cuvinte... si o sa avem ceva de genu
  58. C1: 2 patchuri
  59. C2: 1 patch
  60. C4: 4 patchuri
  61. C5: 9 patchuri
  62. C9: 5 patchuri
  63. (C - cuvant) (nu toate cuvintele trebuie sa fie folosite).
  64.  
  65. Deci dupa faza asta, o sa avem iarasi o histograma (dar asta e complet diferita de cele de mai devreme). Folosind aceste histograme, trecem la faza 4, si ultima, in care determinam daca poza are masina sau nu
  66.  
  67.  
  68.  
  69. 4) Pentru a determina daca o poza are o masina sau nu vom folosi un "clasificator"... adica un program pe care il antrenam astfel incat sa poata determina "bine" de "rau".
  70.  
  71. Cum il antrenam... pai noi avem de mai devreme acele imagini cu masini si fara masini (50 : 50). Well, acelea vor fi imaginile noastre de antrenare. Adica i le dam clasificatorului si ii zicem care are masina si care nu.
  72. Cum ii zicem clasificatorului? Pai folosind "limbajul" creat mai devreme, si anume acele 10 "cuvinte " vizuale.
  73. Pentru inceput descriem (cum am facut la punctul 3) toate cele 100 de imagini folosind cele 10 cuvinte definite anterior. O sa obtinem 100 de histograme a cate 10 valori (HEY cred ca stiu ce e cu alea 50 de vectori a cate 5 valori de care mi-ai zis mai devreme). Acest set de date se va numi "set de antrenare".
  74.  
  75. Acum ca am antrenat clasificatorul si stie ce si cum... e timpul sa-l testam... Pentru asta, trebuie sa-i dam o imagine in "vocabularul" pe care-l cunoaste...
  76.  
  77. Deci, avem o imagine noua... o descriem cum am zis la punctul 3 (o sa avem un vector de 10 valori) si trebuie sa vedem daca are masina sau nu...
  78. Ei bine asta e partea mai complicata... pentru ca cum delimitezi o imagine cu masina de una fara pe baza celor de 10 cuvinte (cum delimitezi un document despre politica de unul fara pe baza cuvintelor folosite... adica ai putea sa zici ca daca contine cuvantul "politica" e clar despre... sau daca are un nume de politician... dar si un document despre sociologie ar putea contine cuvantul "politica" in el dar vorbeste despre cu totul altceva).
  79.  
  80. Aici intervin tipurile de clasificatori... noua ne-a zis de 3
  81. Cel mai apropiat vecin (usor asta)
  82. Bayesian (bleah, statistica dar e mai usor decat al treilea)
  83. SVM (Scale-Invariant Matching)
  84.  
  85. O sa-l descriu pe primul (cel mai apropiat vecin).
  86.  
  87. Deci ai datele de antrenare (cei 100 de vectori de 10 valori despre care stii care-i care (descrie o poza cu o masina sau nu)) de mai devreme si mai ai un vector nou de 10 valori pentru imaginea pe care vrei s-o testezi. Ei bine, metoda celui mai apropiat vecin pur si simplu testeaza care din cei 100 de vectori este mai aproape de vectorul nostru (distanta euclidiana cel mai usor - daca nu ti-e clar cum e cu asta la 10 valori, imi zici). Acum stim 2 lucruri... care este cel mai apropiat vector si ce tip de poza descrie acel vector... asa ca o sa zicem ca poza noastra e de acelasi tip cu poza descrisa de vectorul ce mai apropiat.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement