TITLU: Recunoaștere facială în Android Studio [302809]

UNIVERSITATEA “TITU MAIORESCU” DIN BUCUREȘTI

FACULTATEA DE INFORMATICĂ

LUCRARE DE LICENȚĂ

COORDONATOR ȘTIINȚIFIC:

Conf. univ. dr. Ana Cristina Dăscălescu

ABSOLVENT: [anonimizat]

2020

UNIVERSITATEA “TITU MAIORESCU” DIN BUCUREȘTI

FACULTATEA DE INFORMATICĂ

Recunoaștere facială în Android Studio

COORDONATOR ȘTIINȚIFIC:

Prof. univ. dr. Ana Cristina Dăscălescu

ABSOLVENT: [anonimizat]

2020

REFERAT

DE APRECIERE A LUCRĂRII DE LICENȚĂ

TITLU: Recunoaștere facială în Android Studio

ABSOLVENT: [anonimizat]: Conf. univ. dr. [anonimizat]:

[anonimizat] a fi susținută în fața comisiei pentru examenul de licență din sesiunea ____iunie-iulie 2020____ și o apreciez cu nota___________________.

CONDUCĂTOR ȘTIINȚIFIC,

______________________________

[anonimizat], complex, [anonimizat], [anonimizat]. [anonimizat] a semnalelor, [anonimizat]. [anonimizat], fața, irisul și forma geometrică a mâinii. [anonimizat], [anonimizat], furate sau uitate (însă uneori pot fi reproduse cu acuratețe suficientă pentru a induce in eroare sistemele automate de recunoaștere). Fiecare “semnătură” biometrică a unei persoane diferă de semnăturile celorlalte persoane.

Un sistem de recunoaștere faciala este o aplicație computerizată capabilă să detecteze și să verifice identitatea unei persoane dintr-o imagine digitală sau un cadru de la o cameră video. Acest lucru se poate face comparând caracteristicile faciale ale persoanei din imagine cu o baza de date deja existentă. [anonimizat] a fi o metodă neinvazivă astfel încat informațiile sunt luate fără contact direct cu subiectul. [anonimizat], [anonimizat] a mâinii nu pot realiza acest tip de identificare în masă a populației. Primul sistem automat de recunoaștere facială a fost descris în 1973 de către Kanade Takeo unde afirma că punctele de interes ([anonimizat], nasului) erau folosite pentru a construi un vector caracteristic ([anonimizat]). Recunoașterea se efectua prin calcularea distanței euclidiene dintre vectorii caracteristici alea unei imagini de test și o imagine de referință. [anonimizat] a punctelor de interes este destul de complicată.

[anonimizat] a implementat aceasta tehnologie odată cu lansarea modelului iPhone X [anonimizat]ea este singura metoda biometrica folosita pentru deblocarea telefonului precum și alte funcții cum ar fi Apple Pay, instalarea aplicațiilor etc.Nu știm cu adevărat funcționarea interioară a FaceID, deoarece Apple nu a dezvăluit prea multe detalii, dar pe baza faptelor putem presupune FaceID are la baza un fel de FaceNet-că rețea neurală care extrage și confruntă încorporarea.

MOTIVAȚIA ALEGERII TEMEI

Recunoașterea facială este mai comună că niciodată în 2020, telefoanele noastre o folosesc în foarte multe situații, de la autentificare la filtre pe Facebook sau Instagram, de asemenea , este utilizata la porțile smart din aeroporturi, inclusiv la aeroportul Otopeni,la supravegherea video a clădirilor, unele companii o folosesc la accesul în zone importante din cadrul acestora,companiile social media o folosesc pentru a eticheta persoane, este utilizată la verificările de frontieră pentru a compara portretul de pe un pașaportul biometric digitalizat cu fața titularului,poate fi, de asemenea, folosita în controalele poliției,deși utilizarea să este controlată riguros în Europa.

În 2016, "omul cu pălărie" responsabil pentru atacurile teroriste de la Bruxelles a fost identificat datorită software-ului FBI de recunoaștere facială, potrivit unui studiu al Universității Georgetown jumătate dintre adulții americani au imagini stocate într-una sau mai multe baze de date de recunoaștere faciala pe care agențiile de aplicare a legii le pot caută,dar cele mai importante atribuții pe care le poate avea sunt : găsirea copiilor dispăruți,identificarea copiilor exploatați,identificarea și urmărirea infractorilor și nu în ultimul rand sprijinirea și accelerarea investigațiilor politiei și a altor organizații responsabile de combaterea terorismului și siguranță populației. Ca urmare, acest subiect a fost în centrul atenției unor grupuri numeroase de cercetători din întreaga lume în ultimele două decenii și a pătruns de curând și în circuitul comercial: se estimează că piață recunoașterii faciale vă depăși 7,7 miliarde de dolari în anul 2022 de la 4 miliarde de dolari în 2017.

Am ales o aplicație de detectare și recunoaștere faciala în timp real pe platforma Android folosind limbajul Java, pentru telefoanele mobile deoarece aceast sistem de operare este unul din cele mai răspândite și mai populare în prezent , de asemenea permite flexibilitate în folosirea aplicației, fiind astfel accesibilă la scara largă.

CUPRINS

Introducere……………………………………………………………………………………………………………….. 4

Motivație………………………………………………………………………………………………………………….. 5

Capitolul 1 – Detectare și recunoaștere facială………………………………………………………………. 7

– Detectare facială……………………………………………………………………………………………. 7

– Algoritmi de detectare faciala……………………………………………………………. 11

– Recunoaștere facială……………………………………………………………………………………. 13

1.2.1 – Algoritmi de recunoaștere facială………………………………………………………….. 13

1.2.2 – FaceNet……………………………………………………………………………………………… 15

Capitolul 2 – Prezentarea tehnologiilor utilizate………………………………………………………….. 26

– Android Studio……………………………………………………………………………………………. 26

– Limbaje de programare folosite…………………………………………………………………….. 26

– Sistemul de operare Android………………………………………………………………………… 27

– Tensorflow…………………………………………………………………………………………………. 28

– Media Pipe…………………………………………………………………………………………………. 29

– Android LibSVM………………………………………………………………………………………… 30

Capitolul 3 – Arhitectura aplicației…………………………………………………………………………….. 35

Capitolul 4 – Foncționalitatea aplicației……………………………………………………………………… 37

Capitolul 5 – Testarea aplicației………………………………………………………………………………. 44

Concluzii………………………………………………………………………………………………………………… 48

Bibliografie…………………………………………………………………………………………………………….. 49

CAPITOLUL 1

DETECTAREA ȘI RECUNOAȘTEREA FACIALĂ

Detectarea facială reprezintă tehnologia folosită într-o mulțime de aplicații ce au ca scop identificarea fețelor în imagini digitale sau cadre provenite de la orice sursa video. Detectarea facială este un caz particular al detectarii obiectelor. Algoritmi de detectare facială se concentrează pe imagini cu fețe care privesc înainte, deoarece le este sunt mai simplu să le detecteze.

Sistemele de recunoaștere facială sunt aplicații capabile să identifice și să verifice identitatea unei persoane dintr-o imagine 2D,3D sau surse video.

1.1 Detectare facială

Detectarea feței este primul pas esențial pentru recunoașterea facială și este utilizat pentru a detecta fețele din imagini sau din cadre video. Există multe tehnici pentru detecție cum ar fi OpenCV,Neural Networks, Matlab, etc , cu ajutorul acestora putem identifica fețele cu o precizie mai mare ,acestea au o procedură aproape identica ca si pentru recunoașterea facială. In acest program a fost folosit Media Pipe bazat pe BlazeFace.

Detectarea feței este o tehnologie computerizată bazată pe inteligență artificială (AI) folosită pentru a găsi și identifica fețele umane în imaginile digitale. Tehnologia de detectare a fețelor poate fi aplicată în diverse domenii inclusiv securitatea biometrică,aplicarea legii, divertismentul și siguranța personală , pentru a asigura supravegherea și urmărirea persoanelor în timp real.

A progresat de la tehnici rudimentare de vedere computerizată la progrese în învățarea automată(ML) la rețele neuronale artificiale din ce în ce mai sofisticate (ANN)și tehnologii conexe, rezultatul a fost îmbunătățirea continuă a performanței. Acum joacă un rol important ca prim pas în multe aplicații cheie, inclusiv urmărirea feței, analiza feței și recunoașterea facială. Detectarea feței are un efect semnificativ asupra modului în care operațiunile secvențiale vor funcționa în aplicație.

În analiza feței, detectarea feței ajută la identificarea părților unei imagini sau ale unui videoclip pe care ar trebui să se concentreze pentru a determina vârsta, sexul și emoțiile folosind expresii faciale. Într-un sistem de recunoaștere facială care cartografiază matematic trăsăturile faciale ale unei persoane și stochează datele ca o amprentă facială ,datele de detectare a feței sunt necesare pentru algoritmii care disting părți ale unei imagini sau ale unui videoclip și sunt necesare pentru a genera o amprentă facială. Odată identificată, noua amprentă facială poate fi comparată cu amprentele stocate pentru a determina dacă există o potrivire.

Procedura de funcționare

Aplicațiile de detectare a feței utilizează algoritmi și machine learning(ML) pentru a găsi fețe umane în imagini mai mari, care încorporează adesea alte obiecte fără față, cum ar fi peisaje, clădiri și alte părți ale corpului uman(picioarele sau mâinile). Algoritmii de detectare a feței încep de obicei prin căutarea ochilor , una dintre cele mai simple caracteristici de detectat. Algoritmul ar putea încerca apoi să detecteze sprâncenele, gura, nasul, nările și irisul. Odată ce algoritmul concluzionează că a găsit o regiune facială, aplică teste suplimentare pentru a confirma că a detectat, de fapt, o față.

Pentru a asigura acuratețea, algoritmii trebuie să fie instruiți pe seturi mari de date care încorporează sute de mii de imagini pozitive și negative. Instruirea îmbunătățește capacitatea algoritmilor de a determina dacă există fețe într-o imagine și unde se află.

Metodele utilizate în detectarea feței pot fi bazate pe cunoștințe, caracteristici, șablon de potrivire sau bazate pe aspect. Fiecare are avantaje și dezavantaje:

Metode bazate pe cunoștințe sau bazate pe reguli, care descriu o față bazată pe reguli. Provocarea acestei abordări este dificultatea de a veni cu reguli bine definite.

Metodele invariante care folosesc caracteristici cum ar fi ochii sau nasul unei persoane pentru a detecta o față pot fi afectate negativ de zgomot și lumină.

Metodele de potrivire a șabloanelor se bazează pe compararea imaginilor cu modelele sau caracteristicile standard ale feței care au fost stocate anterior și pe corelarea celor două pentru a detecta o față. Din păcate, aceste metode nu abordează variațiile în ceea ce privește scara și forma.

Metodele bazate pe aspect utilizează analiza statistică și învățarea automată pentru a găsi caracteristicile relevante ale imaginilor feței. Această metodă, utilizată și în extracția caracteristicilor pentru recunoașterea feței, este împărțită în sub-metode.

Unele dintre cele mai specifice tehnici utilizate în detectarea feței includ:

Se elimină fundalul. De exemplu, dacă o imagine are un fundal simplu, monocolor sau un fundal static predefinit, atunci eliminarea fundalului poate ajuta la dezvăluirea limitelor feței.

În imaginile color, uneori culoarea pielii poate fi utilizată pentru a găsi fețe, cu toate acestea, acest lucru nu se poate întampla cu toate tipurile de ten.

Utilizarea mișcării pentru a găsi fețe este o altă opțiune. În videoclipuri în timp , o față este aproape întotdeauna în mișcare, astfel încât utilizatorii acestei metode trebuie să calculeze zona în mișcare. Un dezavantaj al acestei metode este riscul de confuzie cu alte obiecte care se deplasează în fundal.

O combinație a strategiilor enumerate mai sus poate oferi o metodă cuprinzătoare de detectare a feței.

Detectarea fețelor în imagini poate fi complicată datorită variabilității unor factori precum statura, expresia, poziția și orientarea, culoarea pielii și valorile pixelilor, prezența ochelarilor sau a părului facial și diferențele în ceea ce privește camera, condițiile de iluminare și rezoluția imaginii. Ultimii ani au adus progrese în detectarea feței folosind „deep learning” (invatare profunda), care prezintă avantajul de a depăși în mod semnificativ metodele tradiționale de viziune pe calculator.

Îmbunătățiri majore pentru a face metodologia de detectare a venit în 2001, când cercetătorii Paul Viola și Michael Jones au propus un algoritm pentru a detecta fețele în timp real cu precizie ridicată. Cadrul Viola-Jones se bazează pe formarea unui model pentru a înțelege ceea ce este și nu este o față. Odată instruit, modelul extrage caracteristici specifice, care sunt apoi stocate într-un fișier, astfel încât caracteristicile din imaginile noi pot fi comparate cu caracteristicile stocate anterior în diferite etape. Dacă imaginea studiată trece prin fiecare etapă a comparației caracteristicilor, atunci a fost detectată o față și operațiunile pot continua.

Deși algoritmul Viola-Jones este încă popular pentru recunoașterea fețelor în aplicații în timp real, are limitări. De exemplu, este posibil nu funcționeze cadrul dacă o față este acoperită cu o mască sau o eșarfă sau dacă o față nu este orientată corespunzător, atunci este posibil ca algoritmul să nu o poată găsi.

Pentru a ajuta la eliminarea dezavantajelor algoritmului Viola-Jones și la îmbunătățirea detectării feței, au fost dezvoltați alți algoritmi cum ar fi rețeaua neuronală convoluțională regională (R-CNN) și Detectorul cu o singură lovitură (SSD) , pentru a ajuta la îmbunătățirea proceselor. O rețea neuronală convențională (CNN) este un tip de rețea neurală artificială utilizată în recunoașterea și procesarea imaginilor, care este special concepută pentru a procesa datele pixelilor. Un R-CNN generează propuneri de regiune pe un cadru CNN pentru a localiza și clasifica obiecte în imagini.

Figura 1 – R-CNN pentru detectarea facială

Figura 2– Metode de funcționare a detectarii faciale

În timp ce abordările bazate pe rețeaua neuronală regională, cum ar fi R-CNN, necesită două fotografii , una pentru generarea propunerilor de regiune și una pentru detectarea obiectului fiecărei propuneri – SSD necesită o singură fotografie pentru a detecta mai multe obiecte din imagine. Prin urmare, SSD este semnificativ mai rapid decât R-CNN.

Figura 3 – Arhitectura SSD ( Single Shot Multibox Detector pentru procesare în timp real)

Algoritmi de detectare facială:BlazeFace

BlazeFace este un algoritm de detectare a feței extrem de rapid lansat de Google. Acesta acceptă 128 × 128 dimensiune imagine de intrare. Timpul său de deducție este în sub-milisecunde. Acesta este optimizat pentru a fi utilizat în telefoanele mobile.

Este adaptat din cadrul Single Shot Multibox Detector (SSD) și optimizat pentru inferențe pe GPU-uri mobile , poate rula cu o viteză impresionantă de 200–1000 + FPS pe ultimele modele de smartphone-uri . Față de a prezice dreptunghiuri faciale aliniate pe axe, BlazeFace produce 6 coordonate ale punctului cheie facial(pentru centre oculare, tracțiuni ale urechii, centrul gurii și vârful nasului) care ne permite estimarea rotației feței (unghiul de rulare)

Figura 4 – Detecție facială folosind BlazeFace

La dezvoltarea sistemului s-a propus mai întâi o rețea neurală convoluțională (CNN) compactă, care să fie inspirată de MobileNet V1/V2.

Cele mai multe arhitecturi moderne CNN, ar fi versiunile MobileNet folosesc 3 × 3 nuclee de convoluție de-a lungul graficului modelului, iar părțile în sens punctual domină calculele lor de convoluție separabile în sensul de adancime. Cercetătorii au descoperit că era relativ ieftin să mărească dimensiunea kernel-ului în profunzime. Ei au folosit 5 × 5 kernel-uri în arhitectura model, permițând celor două convoluții punctuale să adauge un alt strat. Aceasta a accelerat progresia dimensiunii receptive a câmpului și a format straturile esențiale mai ridicate ale nivelului de abstractizare ale BlazeFace.

Figura 5 – BlazeBlock (stânga) și Double BlazeBlock (dreapta)

Cercetătorii au adus o altă contribuție esențială, dezvoltând o nouă schemă de ancorare prietenoasă cu GPU modificată din SSD. Ancorele sunt casete de delimitare statică predefinite, care permit rețelei să prezică și să facă ajustări în consecință pentru a determina granularitatea de predicție.

Figura 6 – Calculul ancorei : SSD(stânga) vs BlazeFace

Deși există numeroase sarcini posibile de detectare a obiectelor care ar putea valorifica cadrul BlazeFace, accentul cercetătorilor se concentrează pe sarcina foarte utilă de a detecta în mod eficient fețele prin intermediul camerelor de luat vederi de pe smartphone-uri. Au adăugat șase coordonate de chei faciale suplimentare pentru a estima rotirea feței pentru conducta de procesare video și au construit modele separate pentru camerele frontale și cele din spate.

BlazeFace a fost instruit pe un set de date de 66.000 de imagini, iar performanța a fost evaluată pe un set de date geografic divers format din 2.000 de imagini. În cadrul sarcinilor de detectare a feței camerei frontale, BlazeFace a arătat o precizie medie de 98,61% cu un timp de referință de 0,6 ms.

Figura 7 – panoul exemplar,Roșu: ieșire BlazeFace,Verde: ieșirea modelului specific sarcinii

Recunoaștere facială

Recunoașterea facială este procesul de identificare și verificare a fețelor detectate într-o imagine, făcând potrivirea cu una din multele fețe cunoscute sistemului (compararea unei trăsături selectate cu imaginile dintr-o bază de date). Astfel, recunoașterea fețelor complementează detectarea fețelor.

Algoritmi de recunoaștere facială

Pentru că interesul pentru recunoașterea fețelor a continuat, s-au dezvoltat mulți algoritmi, trei dintre care au fost bine studiați în literatura de specialitate sunt:

Analiza componentelor principale (PCA). Adesea referit ca algoritmul ce folosește eigenface-uri , PCA a fost tehnica introdusă de Kirby și Sirivich în 1988. Galeria de imagini și imaginile de probă trebuie să aibă aceeași dimensiune și să fie normalizate, astfel încât ochii și gura subiecților să se alinieze în imagini.

Figura 8 – Abordarea cu eigenface uri

Apoi se folosesc mijloace de compresie a datelor și se selectează structura de șabloane faciale cea mai eficientă și mai mică din punct de vedere al dimensiunii. Această reducere descompune structura feței în componente ortogonale, cunoscute drept eigenface-uri. Fiecare imagine poate fi reprezentată ca o sumă de greutăți (vector de trăsături1 ) al eigenface-urilor, stocate într-un șir 1D, precum se observă în figura 8. O imagine de probă e comparată cu o imagine din galerie măsurând distanța dintre vectorii de trăsături.

PCA necesită fața completă și frontală pentru a obține performanțe. Principalul avantaj al acestei tehnici este că poate reduce necesitățile de date pentru identificarea unui individ la 1/1000 din datele prezentate.

Analiza discriminantului linear2 (LDA) . Este o abordare statistică de clasificare a mostrelor de clase necunoscute, bazându-se pe mostre de antrenament din clase cunoscute. Această tehnică are scopul de a maximiza variația între clase (Ss) și de a minimiza variația înăuntrul unei clase (Sw), cu alte cuvinte, de a maximiza rația det|Ss|/det|Sw| 3 . Când se lucrează cu date de dimensiune mare, această tehnică se înfruntă cu problema mostrei de dimensiune mică, care apare atunci când există un număr restrâns de mostre de antrenament disponibile comparativ cu dimensiunea spațiului mostrei.

Figura 9 – 6 clase folosind LDA

Potrivirea prin graficul ciorchine elastic1 (EBGM) . Se bazează pe faptul că fețele din realitate au multe caracteristici non-liniare, care nu sunt adresate de alte metode liniare. O transformare Gabor wavelet2 creează o arhitectura dinamică de legături, care proiectează fața într-un grid elastic. Un jet Gabor3 este un nod în gridul elastic (notat prin cercuri în figura 10), ce descrie comportamentul imaginii în jurul unui pixel. Rezultatul unei convoluții a imaginii cu un filtru Gabor4 este folosit pentru a detecta forme și extrage trăsături, folosind procesarea imaginii. Recunoașterea se face pe baza similarității răspunsului filtrului Gabor pe fiecare nod Gabor.

Figura 10 – Transformare Gabor wavelet

FaceNet

Este o rețea neuronală profundă utilizată pentru extragerea caracteristicilor dintr-o imagine a feței unei persoane. Acesta a fost publicat în 2015 de cercetătorii Google (Schroff et all)

Oferă o încorporare unificată pentru activități de recunoaștere facială, verificare și grupare. Acesta cartografiază fiecare imagine a feței într-un spațiu euclidian astfel încât distanțele din acel spațiu corespund similitudinii feței, adică o imagine a persoanei A va fi plasată mai aproape de toate celelalte imagini ale persoanei A în comparație cu imaginile oricărei alte persoane prezente în setul de date.

Ia o imagine a feței persoanei ca intrare și ieșiri un vector de 128 de numere care reprezintă cele mai importante caracteristici ale feței. În machine learning, acest vector se numește încorporare. De ce încorporare? Deoarece toate informațiile importante dintr-o imagine sunt încorporate în acest vector. Practic, FaceNet ia fața unei persoane și o comprimă într-un vector de 128 de numere. În mod ideal, încorporarea de fețe similare sunt, de asemenea, similare.

Cartografierea datelor de înaltă dimensiune (cum ar fi imaginile) în reprezentări low-dimensionale (embeddings) a devenit o practică destul de comună în machine learning aceste zile.

Figura 11 – Iluminarea și invariantul Pose. Poziția și iluminarea au fost o problemă de lungă durată în recunoașterea feței. Această figură arată distanțele de ieșire ale FaceNet între perechile de fețe ale aceleiași și o persoană diferită în combinații diferite de poză și iluminare. O distanță de 0: 0 înseamnă că fețele sunt identice, 4: 0 corespunde spectrului opus, două identități diferite. Puteți vedea că un prag de 1.1 ar clasifica corect fiecare pereche.

Figura 12 – pierdere tripletă

Principala diferență dintre FaceNet și alte tehnici este că învață cartografierea din imagini și creează încorporarea, mai degrabă decât utilizarea oricărui strat de blocaj pentru activități de recunoaștere sau verificare. Odată ce asa numitele „embeddings” sunt create toate celelalte sarcini cum ar fi verificarea, recunoașterea etc pot fi efectuate folosind tehnici standard de acest domeniu special, folosind aceste „embeddings” nou generate ca vector caracteristic.

De exemplu, putem folosi k-NN pentru recunoașterea feței prin utilizarea embeddings ca vector caracteristic și în mod similar putem folosi orice tehnica de grupare pentru gruparea fețelor împreună și pentru verificare avem nevoie doar sa definim o valoare prag.

Deci, cel mai important lucru de remarcat aici este că FaceNet nu definește nici un algoritm nou pentru a efectua sarcinile menționate mai sus, mai degrabă doar creează embedings, care pot fi utilizate direct pentru recunoașterea feței, verificare și clustering.

FaceNet utilizează o rețea neuronală convoluțională profundă (CNN). Rețeaua este instruită astfel încât distanța L2 pătrată dintre embeddings corespunde similitudinii feței. Imaginile folosite pentru antrenament sunt scalate, transformate și sunt strâns trunchiate în jurul zonei feței.

Un alt aspect important al FaceNet este funcția sa de pierdere . Acesta utilizează funcția de pierdere tripletă (Fig 12). Pentru a calcula pierderea tripleților, avem nevoie de 3 imagini și anume ancora, pozitivă și negativă.

Pierdere și selecție tripletă

Figura 13 – Pierdere tripletă

Intuiția din spatele funcției de pierdere a tripleților este că dorim ca imaginea noastră ancoră (imaginea unei anumite persoane A) să fie mai aproape de imagini pozitive (toate imaginile persoanei A) în comparație cu imaginile negative (toate celelalte imagini).Cu alte cuvinte, putem spune că dorim ca distanțele dintre încorporarea imaginii noastre de ancoră și încorporarea imaginilor noastre pozitive să fie mai mici în comparație cu distanțele dintre încorporarea imaginii noastre de ancoră și încorporarea imaginilor noastre negative. Funcția de pierdere a tripleților poate fi definită în mod oficial ca :

Unde: -„Xi” reprezintă o imagine

-„F(Xi)” reprezintă ncorporarea unei imagini

-„a” reprezintă marja dintre perechile pozitive și cele negative

Aici, exponent a, p și n corespund ancora, imagini pozitive și negative, respectiv.

Alfa este definit aici ca marja dintre perechile pozitive și negative. Este, în esență, o valoare prag care determină diferența dintre perechile noastre de imagini. Dacă să presupunem că alfa este setat la 0,5, atunci dorim ca diferența dintre perechile noastre de imagini cu ancoră pozitivă și cea de ancorare negativă să fie de cel puțin 0,5.

Selecție tripletă

Alegerea perechilor de imagini corecte este extrem de importantă, deoarece vor exista o mulțime de perechi de imagini care vor satisface această condiție și, prin urmare, modelul nostru nu va învăța prea multe de la ei și va converge, de asemenea, încet din cauza asta.

Pentru a asigura convergența rapidă, este esențial să se selecteze tripleți care încalcă constrângerea tripleților. In esenta , dorim sa selectam urmatoarele:

Eq (1) înseamnă că, având în vedere o imagine ancoră a persoanei A, dorim să găsim o imagine pozitivă a A, astfel încât distanța dintre aceste două imagini este cea mai mare.

Eq (2) înseamnă că, având în vedere o imagine ancoră a persoanei A, dorim să găsim o imagine negativă, astfel încât distanța dintre aceste două imagini este cea mai mică.

Elementele de bază ale învățării profunde

FaceNet antrenează CNN-uri folosind Stochastic Gradient Descent (SGD) cu backprop standard și AdaGrad. Rata inițială de învățare este 0,05, alfa este setată la 0,2 și ReLU este ales ca funcție de activare

Coborâre a gradientului stochastic

Figura 14 – SGD

Cele două axe (x și y) reprezintă greutăți, iar a treia axă (z) reprezintă pierderea în raport cu cele două greutăți.

Să numim acest punct roșu ca punctul A. Vom începe călătoria noastră din acest punct A. Intuiția din spatele SGD este că vrem să traverseze această structură deal-ca în așa fel încât să ajungem la minima globală (cel mai mic punct al acestui deal). Acum s-ar putea să fi înțeles partea de coborâre a SGD. Deci, acum să ne concentrăm pe partea gradient.

Gradient doar ne dă direcția de ascensiune cea mai abruptă într-un plan n-dimensionale (similar cu un derivat, care determină panta unei linii ).

AdaGrad

AdaGrad este utilizat pentru a genera rate variabile de învățare. Ratele fixe de învățare nu funcționează bine în învățarea profundă. În cazul CNN-urilor în care fiecare strat este utilizat pentru a detecta o caracteristică diferită (margini, modele etc.), o învățare fixă nu va funcționa, deoarece diferite straturi din rețeaua noastră necesită rate de învățare diferite pentru a funcționa optim. Pentru a înțelege mai bine AdaGrad, să ne uităm la câteva ecuații.

Figura 15 – AdaGard

Eq (1) — Este ecuația regulată de actualizare a greutății SGD. Aici folosim o rată fixă de învățare (η).

Eq (2) — Este ecuația de actualizare a greutății AdaGrad. În acest caz, folosim o rată variabilă de învățare (η't).

Eq (3) — Determină formula de calcul a ratei variabile de învățare.

Eq (4) — Se determină formula de calcul At-1.

T-1 este suma pătratelor de degradeurilor până la t-1. "t" este numărul de iterație

ReLu

ReLU este funcția de activare neliniară pe care o folosim. Înainte de scufundări în detalii despre ReLU, să înțelegem de ce avem nevoie de funcții de activare non-lineare? Avem nevoie de ele atunci cand folosim doar o funcție de activare liniară, atunci, în esență, ieșirea noastră va fi doar o combinație liniară a intrării noastre, indiferent de numărul de straturi din rețeaua noastră.

Un alt punct de luat în considerare este că, fără funcții de activare non-lineare, nu putem crea rețele neuronale care pot rezolva probleme complicate, adică limita deciziei noastre va fi întotdeauna liniară dacă folosim funcții de activare liniară.

ReLU este succesorul funcțiilor de activare sigmoid și tanh. Nu voi intra în multe detalii aici despre aceste funcții, dar voi explica pe scurt problemele în sigmoid și tanh care au dus la descoperirea ReLU. Deci, marea problemă cu ambele este cea a degradeurilor de dispariție,adică ambele ieșiri au o valoare între 0 și 1 in timp ce calcularea degradeuri folosind înapoi propagarea (se referă la Eq (1) ) avem nevoie de a multiplica diferite valori care se află între 0 și 1. După câteva iterații, valoarea poate deveni atât de mică și nesemnificativă încât greutățile noastre vor înceta să se actualizeze. O altă problemă cu ambele dintre ele este că ambele sunt scumpe, pentru a calcula de exemplu, avem nevoie de funcții ar fi exponent și bronz, care sunt costisitoare din punct de vedere computațional.

Fig 16 – Funcția de activare ReLu

Formula ReLu: f(x)=max(0,x)

Arhitecturi CNN

FaceNet utilizează 2 tipuri de CNN- uri, și anume arhitectura Zeiler & Fergus și modelul de început de stil GoogLeNet.

Arhitectura Zeiler & Fergus

Arhitectura Zeiler & Fergus este folosită pentru vizualizarea procesului de instruire a unui CNN. Încercăm să înțelegem funcționarea internă a unui CNN cu ajutorul acestei arhitecturi. Această arhitectură a introdus o nouă tehnică de vizualizare care oferă o perspectivă asupra funcției straturilor intermediare și a funcționării clasificatorilor. Arhitectura Zeiler & Fergus utilizată în lucrarea de cercetare FaceNet :

Fig 17 – Arhitectura Zeiler & Fergus

Acest model are 140 de milioane de parametri și 1,6 miliarde flops (operațiuni în virgulă mobilă pe secundă) pe imagine.

Modelul de început

Ideea principală din spatele arhitecturii de rețea Inception este aceea de a folosi mai multe filtre de diferite dimensiuni simultan. În orice altă arhitectură de rețea tradițională alegem de obicei un filtru de dimensiuni 3*3, 5*5 etc, dar în arhitectura Inception folosim mai multe filtre simultan și concatenăm rezultatele lor.

Figura 18 – Reteaua de început

În Fig 18 (a), folosim mai multe filtre de dimensiunea 1*1, 3*3 și 5*5 împreună cu un strat maxim de punere în comun, și apoi am concatenat rezultatele. Aceasta este intuiția principală din spatele arhitecturii rețelei Inception. Problema cu această abordare este calculul . Deci, pentru a evita această problemă vom folosi 1 * 1 convolutions pentru reducerea dimensionalității.

În Fig 18 (b), vom folosi un filtru 1*1 cu orice altă convoluție pentru a reduce dimensionalitatea și a face această arhitectură fezabilă din punct de vedere computațional.

Această arhitectură de model Inception utilizată în lucrarea de cercetare FaceNet are 6,6 M – 7,5 M parametri și aproximativ 500M — 1,6 B FLOPS. Diferite variante ale modelului Inception sunt utilizate în FaceNet, unele dintre ele sunt optimizate pentru a rula pe telefoanele mobile și, prin urmare, au parametri și filtre relativ mai puțini.

Evaluare

Calculăm acceptă adevărat (TA), după urmează –

True accept sunt perechile de fețe care au fost corect clasificate ca fiind identice la pragul "d". Noi definim false acceptă (FA), după urmează –

False accept sunt perechile de fețe care au fost clasificate incorect ca fiind aceleași

P same -Reprezintă perechea de identități identice

P diff – reprezintă perechea de identități diferite

D(xi,xj) – distanța pătrată L2 dintre perechile de imagini

d – pragul distanței

Rata de validare (VAL) și rata de acceptare falsă (FAR) pentru o anumită distanță facială "d" este definită ca:

FaceNet Google a arătat cea mai puternică performanță pe un test, scăzând de la precizie aproape perfectă atunci când se confruntă cu un număr mai mic de imagini la 75 la sută pe testul de milioane de persoane.

Graficul 1: Rata de identificare a unor algoritmi de recunoaștere facială în funcție de numărul imaginilor de test cu care au fost confruntate, Universitatea Washington

CAPITOLUL 2

PREZENTAREA TEHNOLOGIILOR UTILIZATE

2.1 – Android Studio

Android Studio este un mediu de dezvoltare (engl. software development environment, sau integrated development environment – "mediu integrat de dezvoltare) pentru colaborarea cu platforma Android, anunțată pe data de 16 mai 2013 în cadrul conferinței I / O Google.

Android Studio este bazat pe software-ul IntelliJ IDEA de la JetBrains, este instrumentul oficial de dezvoltare a aplicațiilor Android. Acest mediu de dezvoltare este disponibil pentru Windows, OS X și Linux. Pe 17 mai 2017, la conferința anuală Google I / O, Google a anunțat asistență pentru limbajul Kotlin utilizat de Android Studio ca limbaj de programare oficial pentru platforma Android, pe lângă Java și C ++.

2.2 Limbaje de programare folosite

In acest proiect am ales sa folosesc limbajul Java , este un limbaj de programare de nivel înalt, dezvoltat de JavaSoft, companie în cadrul firmei Sun Microsystems. Caracteristicile principale ale limbajului :

simplitate,elimină supraîncarcarea operatorilor, moștenirea multiplă și toate "facilitățile" ce pot provoca scrierea unui cod confuz.

robustete, elimină sursele frecvente de erori ce apar în programare prin eliminarea pointerilor, administrarea automată a memoriei și eliminarea fisurilor de memorie printr-o procedură de colectare a 'gunoiului' care rulează în fundal. Un program Java care a trecut de compilare are proprietatea ca la execuția sa nu "crapa sistemul".

complet orientat pe obiecte – elimină complet stilul de programare procedural

ușurința in ceea ce privește programarea in rețea

securitate, este cel mai sigur limbaj de programare disponibil în acest moment, asigurând mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distanță, etc

este neutru din punct de vedere arhitectural

portabililtate, cu alte cuvinte Java este un limbaj independent de platforma de lucru, aceeași aplicatie rulând, fara nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substanțiale firmelor care dezvoltă aplicații pentru Internet.

compilat si interpretat

asigură o performanță ridicată a codului de octeți

permite programarea cu fire de execuție (multitheaded)

2.3 Sistemul de operare Android

Android este un SO mobil bazat pe o versiune modificată de Linux (pentru gestiunea componentelor hardware, a proceselor și a memoriei) și biblioteci Java (pentru telefonie (audio/video), conectivitate, grafică, programarea interfețelor cu utilizatorul). Este un produs open-source (putând fi dezvoltat de producătorii de dispozitive mobile cu extensii proprietare pentru a-și particulariza platforma), dezvoltat în prezent de compania Google, conceput pe ideea transformării dispozitivelor mobile în adevărate mașini de calcul.

Google încearcă totuși să realizeze tranziția de la AOSP (Android Open Source Project) către GMS (Google Mobile Services), peste care sunt construite cele mai multe aplicații, în încercarea de a-și apăra acest proiect în fața concurenței. În acest sens, a fost dezvoltat proiectul Google One, prin care este oferit un set de specificații (ecran de 4.5 inchi – 845×480 pixeli, procesor quad-core, memorie 1GB RAM, spațiu de stocare 4GB, suport pentru dual sim) pe care producătorii de dispozitive mai ieftine trebuie să le respecte astfel încât acestea să fie compatibile cu un sistem Android, fără a întâmpina probleme de performanță. Acesta include toate aplicațiile și serviciile Google, la care se pot adăuga și altele, furnizate de producător sau operatorul de telefonie mobilă. În acest fel, se asigură calitatea (păstrând renumele Android) și controlul asupra veniturilor. Comunitatea Android este în creștere, mai multe companii renunțând la propriul sistem de operare în favoarea acestuia, pentru a putea face față fenomenului iPhone.

În condițiile în care pe piața dispozitivelor mobile aplicațiile sunt cele care aduc avantajul competițional, beneficiul Android este reprezentat de abordarea unitară pentru dezvoltarea aplicațiilor. Cu alte cuvinte, o aplicație dezvoltată conform API-ului Android va putea rula pe mai multe dispozitive mobile pe care este instalat sistemul de operare respectiv.[8]

2.4 Tensorflow

Este o bibliotecă de informații artificiale cu sursă deschisă, care utilizează grafice de flux de date pentru a construi modele. Permite dezvoltatorilor să creeze rețele neuronale pe scară largă, cu multe straturi. TensorFlow este utilizat în principal pentru: Clasificare, Percepție, Înțelegere, Descoperire, Predicție și Creație

TensorFlow Lite este soluția ușoară TensorFlow pentru dispozitive mobile și încorporate. Vă permite să rulați modele învățate automat pe dispozitive mobile cu latență scăzută, astfel încât să puteți profita de ele pentru a face clasificare, regresie sau orice altceva v-ați dori, fără să implicați neapărat o călătorie dus-întors pe un server

Figura 18 – Detectarea cadrelor tensorflow

Tensor

Cuvântul tensor este o generalizare a vectorilor și matricilor de dimensiuni superioare sau putem spune că este un tablou multidimensional. Poate fi definit în linie pentru constructorul tabloului () ca o listă de liste. În cazul general, putem spune că Tensor este o serie de numere aranjate pe o grilă regulată cu un număr variabil de axe. Reprezentarea tensorilor:

Figura 19 – Reprezentare

Tensorii sunt practic un tablou n-dimensional care poate fi reprezentat sub formă de matrice. Putem efectua operațiunea matricei cu tensori ca mai jos:

Figura 20–Operațiunea matricei

2.5 Media Pipe

MediaPipe Face Detection este o soluție super rapidă de detectare a feței, care vine cu 6 repere și suport multi-față. Acesta este bazată pe BlazeFace, un detector de față performant adaptat pentru deducția GPU-ului mobil. Performanța în timp real a detectorului permite aplicarea acestuia la orice experiență de vizor live care necesită o regiune facială precisă de interes ca intrare pentru alte modele specifice activității, cum ar fi punctul de cheie facial 3D sau estimarea geometriei.

Figura 21 – Arhitectura MediaPipe pentru detectare facială

2.6 Android LibSVM

LIBSVM și LIBLINEAR sunt două biblioteci populare de învățare automată open source ambele dezvoltate la Universitatea Națională din Taiwan și ambele scrise în C++ deși cu un API C.

LIBSVM implementează algoritmul de optimizare minimă secvențială (SMO) pentru mașinile vectoriale de suport kernelized (SVM), suportând clasificarea și regresia.

LIBLINEAR implementează SVM-uri liniare și modele de regresie logistică instruiți folosind un algoritm de coborâre a coordonatelor.

Codul de învățare SVM din ambele biblioteci este adesea reutilizat în alte seturi de instrumente de învățare automată open source, inclusiv Gate,Knime Orange și scikit-learn. Legăturile și porturile există pentru limbaje de programare, ar fi Java, Matlab R și Python.

SVM

Mașinile de vectori de suport (SVM) sunt o metodă de clasificare binară și recunoașterea feței este o problemă de clasă K unde K este numărul de indivizi cunoscuți. Scopul SVM-urilor este să caute hiper-planul de separare optim care să reducă la minimum riscul de clasificare greșită. După o cantitate decentă de instruire, SVM-urile pot prezice dacă o intrare se încadrează într-una din cele două categorii.

Acest lucru se realizează prin construirea unui hiperplan într-un spațiu dimensional înalt și apoi maparea intrării către puncte din acest spațiu. Modelele de recunoaștere a feței găsesc discrepanțe între două imagini faciale într-un spațiu diferit. Formulăm recunoașterea feței ca o problemă de două clase,clasele sunt: disimilitățile între fețele aceleiași persoane și persoane diferite. Modificând interpretarea suprafeței de decizie generată de SVM, am generat o metrică de similitudine între fețele care sunt învățate din exemple de diferențe între fețe.

Figura 22–Arhitectura rețelei SVM – NN pentru recunoașterea feței

SVM este un algoritm supervizat de învatare automată.Acest lucru înseamnă ca datele trebuie să fie etichetate obligatoriu. Luând în considerare cel mai simplu exemplu de detecție (binara) ca în Figura 23, algoritmul va încerca să separe cele 2 clase prin intermediul unei drepte. În mod evident clasele pot fi separate corect folosind mai multe drepte, dar întrebarea care se pune este care este cea mai corecta delimitare? Figura 24 prezintă un exemplu cu o separație corectă. Cea mai bună dreaptă este aleasă cea care prezintă cel mai potrivit Margin.

Figura 23 – exemplu de posibile granite intre cele 2 clase

Ce este defapt acest margin, In exemplul din Figura 24, se calculeaza distantele de la fiecare punct la dreapta care delimiteaza cele 2 clase. Se calculeaza cea mai mica distanta de la fiecare clasa pana la granita de separatie (in Figura 24 sagetile rosii). Cele 2 distante minime aferente fiecarei clase se aduna, rezultat care nu reprezinta altceva decat Margin-ul (cea mai mica distanta intre norii de puncte). Dreapta va fi pozitionata la jumatatea acestei distante. In acest mod, se pot gestiona mai bine anumite esantioane noi care se regasesc foarte aproape de granita.

Figura 24 – Cea mai buna delimitare pentru cele 2 clase

Pentru un spatiu tridimensional granita de separatie se numeste plan, iar pentru un spatiu multidimensiona se numeste hiperplan. Pentru a desena hiperplanul nu este nevoie de toate punctele ci doar de vectorii suport (acele puncte albastre si rosii situate pe axele punctate care sunt cel mai aproape de granita). Ecuatia care descrie un hiperplan este:

b0+b1x1+b2x2+…..+bnxn=0b0+b1x1+b2x2+…..+bnxn=0

Daca revenim la cazul bidimensional ecuatia se transforma in:

b0+b1x1+b2x2=0b0+b1x1+b2x2=0

Daca vrem sa scriem si conditiile pentru un caz cu 2 clase ca cel din Figura X, atunci obtinem pentru cele 2 clase urmatoarele relatii:

(C1-albastru)

b0+b1x1+b2x2>0b0+b1x1+b2x2>0

(C2-rosu)

b0+b1x1+b2x2<0

Metodele kernel sunt o clasă de algoritmi pentru analiza tiparului sau recunoaștere, al cărui element cel mai cunoscut este mașină vectorială de suport (SVM). Sarcina generală a analizei tiparului este de a găsi și studia tipuri generale de relații (cum ar fi clustere, clasamente, componente principale, corelații, clasificări)în tipurile generale de date (cum ar fi secvențe, documente text, seturi de puncte, vectori, imagini, grafice etc.)

Principala caracteristică a metodelor kernel, cu toate acestea, este abordarea lor distinctă la această problemă. Metodele kernel mapează datele în spații dimensionale mai înalte în speranța că în acest spațiu mai înalt dimensional datele ar putea deveni mai ușor separate sau mai bine structurate. De asemenea, nu există constrângeri cu privire la forma acestei cartografii, care ar putea duce chiar la spații infinit-dimensionale. Această funcție de cartografiere, cu toate acestea, cu greu trebuie să fie calculate din cauza unui instrument numit truc kernel.

2.Truc Kernel (Schimbarea spatiului)

In mod evident, in practica cele mai multe grupari de date nu sunt liniar separabile, sau nu sunt separabile in spatiul curent. Un exemplu sugestiv poate fi regasit in Figura 25. Este destul de clar ca punctele din graficul din stanga nu pot fi separate. Tocamai de aceea, este folosit acest procedeu de schimbare a spatiului. Acesta realizeaza o transformare a spatiului initial intr-un alt spatiu(mai mare dimensional) unde exista o separatie mai buna a datelor. In figura de mai jos a fost folosit un kernel polinomial, deoarece transformarea este F(x)=x^2. Dupa transformare, cele 2 seturi de puncte pot fi bine delimitate.

Figura 25 – exemplu de schimbarea spațiului

Kernel liniar

Kernel-ul linear este cea mai simplă funcție kernel. Acesta este dat de produsul interior <x,y> plus o constantă opțională c. Algoritmii kernel-ului care utilizează un nucleu liniar sunt adesea echivalenți cu omologii lor non-kernel, adică KPCA cu nucleu liniar este același cu PCA standard.

CAPITOLUL 3

ARHITECTURA APLICAȚIEI

Aplicația este alcatuită din:

Machine Learning – FaceNet , bazat pe Tensorflow

Figura 26 – FaceNet

BlazeFace

Figura 27 – BlazeFace

Libsvm

Figura 28 – Libsvm

Urmarire – MultiBoxTracker

Figura 29 – MultiBoxTracker

ObjectTracker

Figura 30 – ObjectTracker

CAPITOLUL 4

FUNCȚIONALITATEA APLICAȚIEI

Recunoașterea și detectarea

Figura 31 – funcția de recunoaștere

Urmărirea feței

Figura 32 – Urmărirea feței

Asocierea de culori chenarelor de urmarire

Figura 33 – Asocierea culorilor

Transformarea imaginilor

Aplicația învata cu ajutorul algoritmului suport vector machine(svm), dupa încarcarea pozelor acestea sunt transformate în baza de date (data) pe baza modelului kernel(model) (Figura 34 ), sunt extrase punctele din fiecare imagine și rezulta (figura 35), fiecare persoana este inregistrata în label.Aceste fișiere ,data,label și model se regasesc în folderul aplicației din memoria telefonului.

Figura 34 – model învățare

Parametrii:

svm_type:Tipul SVM care este selectat prin acest parametru. Acest operator acceptă tipurile C-SVC și nu-SVC SVM pentru activități de clasificare. Tipurile epsilon-SVR și nu-SVR SVM sunt pentru activități de regresie. Tipul SVM cu o singură clasă este pentru estimarea distribuției. Tipul SVM de o clasă oferă posibilitatea de a învăța dintr-o singură clasă de exemple și mai târziu de testare dacă exemplele noi se potrivesc cu cele cunoscute.Interval: selecție

kernel_type:Tipul funcției kernel este selectat prin acest parametru. nucleul rbf cartografiază neliniar mostrele într-un spațiu dimensional mai mare, nucleul liniar este un caz special al nucleului rbf

C :  Acest parametru specifică parametrul de cost C pentru 'c-SVC', 'epsilon-SVR' și 'nu-SVR'. C este parametrul de penalizare al termenului de eroare.

Figura 35 – rezultatul conversiei imaginilor în baza de date (data)

Cum funcționează

Ca sa putem întelege mai bine funcționalitatea aplicației trebuie sa întelegem cum funcționează algoritmii ML ( Machine Learning)

Machine Learning

Este studiul algoritmilor de calculator care se îmbunătățesc automat prin experiență. Este văzut ca un subset de inteligență artificială. Algoritmii de învățare automată construiesc un model matematic bazat pe date de eșantion, cunoscute sub numele de „date de instruire”, pentru a face predicții sau decizii fără a fi programat în mod explicit în acest sens .Sunt folosiți într-o mare varietate de aplicații, cum ar fi filtrarea e-mailurilor și viziunea computerului, unde este greu sau aproape imposibil să dezvolți algoritmi convenționali pentru a îndeplini sarcinile necesare.

Algoritmi de învațare profunda(Deep Learning):

Metodele de învățare profundă sunt o actualizare modernă a rețelelor neuronale artificiale care exploatează calcule ieftine abundente.

Acestea sunt preocupate de construirea de rețele neuronale mult mai mari și mai complexe și, după cum am comentat mai sus, multe metode sunt preocupate de seturi de date foarte mari de date analogice etichetate, cum ar fi imagine, text. audio și video.

Cei mai populari algoritmi de învățare profundă sunt:

Rețea neuronală convoluțională (CNN)

Rețele neuronale recurente (RNN)

Rețele de memorie pe termen scurt (LSTM)

Auto-Encodere stivuite

Mașină Deep Boltzmann (DBM)

Rețele de credință profundă (DBN)

Figura 36 – Algoritmi de învațare profundă

Rețea neuronală convoluțională (CNN)

În rețelele neuronale, rețeaua neuronală convoluțională (ConvNets sau CNN) este una dintre principalele categorii de recunoaștere a imaginilor, clasificări de imagini. Detectarea obiectelor, recunoașterea fețelor etc, sunt unele dintre domeniile în care CNN sunt utilizate pe scară largă.

Clasificările de imagini CNN preiau o imagine de intrare, o prelucrează și o clasifică în anumite categorii (de exemplu, câine, pisică, tigru, leu). Calculatoarele văd o imagine de intrare ca o serie de pixeli și depinde de rezoluția imaginii. Pe baza rezoluției imaginii, se va vedea h x w x d (h = Înălțime, w = Lățime, d = Dimensiune). De exemplu, o imagine a matricei 6 x 6 x 3 a matricei RGB (3 se referă la valorile RGB) și o imagine a 4 x 4 x 1 matrice a imaginii în scară în gri.

Tehnic, învățând profunde modele CNN pentru a antrena și testa, fiecare imagine de intrare o va trece printr-o serie de straturi de convoluție cu filtre (Kernals), Pooling, straturi complet conectate (FC) și aplică funcția Softmax pentru a clasifica un obiect cu valori probabilistice între 0 și 1. Figura de mai jos este un flux complet de CNN pentru procesarea unei imagini de intrare și clasifică obiectele pe baza valorilor.

Figura 37 – Rețea neuronală cu multe straturi convoluționale

Strat de convoluție

Convoluția este primul strat care extrage caracteristici dintr-o imagine de intrare. Convoluția păstrează relația dintre pixeli învățând caracteristicile imaginii utilizând pătrate mici de date de intrare. Este o operațiune matematică care necesită două intrări, matricea imaginii și un filtru sau un nucleu.

Convoluția unei imagini cu diferite filtre poate efectua operații ar fi detectarea muchiilor, estomparea și ascuțirea prin aplicarea filtrelor. Exemplul de mai jos arată diferite imagini de convoluție după aplicarea diferitelor tipuri de filtre (Kernels).

Figura 38 – Filtre

Arhitectura CNN

Figura 39 – Arhitectura CNN

Procesul de recunoaștere facială

Figura 40 – Procesul de recunoaștere facială

După procesul de formare care se face cu setul de date masive (Datasets pentru recunoaștere facială) cu funcția de pierdere corespunzătoare (pierderea triplet), putem testa prin trecerea prin rețele pentru a obține o reprezentare caracteristică profundă. Odată ce caracteristicile profunde sunt extrase, majoritatea metodelor calculează direct similitudinea dintre două caracteristici utilizând distanța cosinus sau distanța L2, după ce cel mai apropiat vecin (NN) și compararea pragului sunt utilizate atât pentru activitățile de identificare, cât și pentru cele de verificare.

Sistemul FaceNet este utilizat pentru a extrage caracteristici de înaltă calitate de pe fețe, numite încorporarea feței, care pot fi utilizate pentru a instrui un sistem de identificare a feței , BlazeFace in acest caz. Acesta învață direct o cartografiere de la imaginile feței la un spațiu euclidian compact în cazul în care distanțele corespund direct la o măsură de similitudine a feței, adică fețele aceleiași persoane au distanțe mici și fețele oamenilor diferiți au distanțe mari.

CAPITOLUL 5

TESTAREA APLICAȚIEI

Permisiuni și activități

Aplicațiile Android au nevoie uneori de permisiuni de accesare a unor componente hardware sau software ale sistemului de operare. Permisiunile trebuiesc menționate în fișierul AndroidManifest.xml al proiectului. Acesta este unul din fișierele principale ale proiectului și conține permisiuni necesare, activitățile din aplicație, Intent-uri și setări globale ale aplicației, cum ar fi iconița ce va reprezenta aplicația în meniu, tema sau numele aplicației

Figura 41 – Permisiuni si activități

În aplicație am avut nevoie de doua permisiuni, care se pot observa și în figura x. Am introdus permisiunile de acces la serviciul de utilizare a camerei telefonului și la memoria internă a acestuia.”

Figura 42 – Acceptarea permisiunilor

După acceptarea permisiunuilor pentru cameră si spațiul de stocare putem adăuga persoane prin apăsarea butonului „+”

Figura 43 – Adăugare persoane

Figura 44 – Adăugare persoane

După apăsarea butonului „ + adaugare persoana noua” vom introduce numele persoanei pe care vrem sa o înregistram.

Figura 45 – Introducere nume

După introducerea numelui putem selecta pozele pe care le dorim din memoria interna a telefonului.

Figura 46 – Selectare

După selectarea si încarcarea pozelor algoritmii de recunoaștere facială încep învatarea.

Figura 47 – Învățare

La finalizarea acestui proces putem verifica funcționalitatea aplicației , poziționând camera pe subiect si verificând rezultatul detectării și recunoașterii faciale.

Figura 48 – Rezultat

CONCLUZII

În această lucrare am studiat si am dezvoltat o aplicație care recunoaște fețe în timp real folosind 2 algoritmi și tehnologii de actualitate , FaceNet pentru recunoaștere , BlazeFace pentru detectare.Aplicația este capabilă sa recunoască o persoană cu o acuratețe de pana la 99,63%.

Procesarea imaginii și recunoașterea este realizată în timp real însa aplicația fiind bazată pe machine learning am constatat că pentru a avea o acuratețe mai mare trebuie antrenat modelul de două sau chiar de trei ori (reselectarea imaginilor).

Direcții viitoare de dezvoltare

Se pot aduce pe viitor îmbunătățiri algoritmilor (în special celui de recunoaștere), se pot adăuga funcționalități noi, se poate crește nivelul de securitate, aș dori ca atunci când obiectivul camerei este îndreptat către o persoană ce nu este înregistrată in baza de date să afișeze mesajul „Persoană necunoscută” și sa implementez baza de date VGGFace2 ce cuprinde peste 3,3 milioame de fețe.

Bibliografie

1. P. Viola, M. Jones: „Rapid Object Detection using a Boosted Cascade of Simple Features”, 2001;

2. P. Viola, M. Jones: „Robust real-time object detection”, 2001; 3. Ara V. Nefian, Monson H. Hayes III, “Face recognition using an embedded HMM”, IEEE Conference on Audio and Visual-based Person Authentication, 1999;

3. [1] Bartlett, M.S., Movellan, J.R., Sejnowski, T.R., “Face recognition by Independent Component Analysis”, IEEE Trans. on Neural Networks, 13, pp. 1450-1464, 2002

4. Howard et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. arXiv 2017.

5. Chen, Sheng, et al. “Mobilefacenets: Efficient cnns for accurate real-time face verification on mobile devices.” Chinese Conference on Biometric Recognition. Springer, Cham, 2018

6. FaceNet – https://arxiv.org/pdf/1503.03832.pdf

7. SVM – http://imag.pub.ro/ro/cursuri/ISIA/lab/lab5_ISIA.html

8. BlazeFace – https://sites.google.com/view/perception-cv4arvr/blazeface

9. Android studio – https://ocw.cs.pub.ro/courses/eim/laboratoare/laborator01

10. Deep Face Recognition – https://arxiv.org/pdf/1804.06655.pdf

11. Pagina oficială Tensorflow – https://www.tensorflow.org/

12. Machine learning – https://searchenterpriseai.techtarget.com/definition/machine-learning-ML

13. Deep learning – https://searchenterpriseai.techtarget.com/definition/deep-learning-deep-neural-network

14. Rețele neuronale convoluționale, Big Data și Deep Learning în analiza automată de imagini-Mihnea Horia VREJOIU – https://www.researchgate.net/publication/332129835_Retele_neuronale_convolutionale_Big_Data_si_Deep_Learning_in_analiza_automata_de_imagini

15.  https://subscription.packtpub.com/book/application_development/9781838644673/12/ch12lvl1sec89/face-detection-with-ssd

16. Zeiler & Fergus architecture— https://arxiv.org/abs/1311.2901

17. Inception model — https://arxiv.org/abs/1409.4842

18. https://en.wikipedia.org/wiki/Machine_learning

Similar Posts