Face detection 2021

Salutare!

Deschid acest thread pentru a sonda un pic experienţele voastre. În prezent sunt în căutarea unor soluţii/algoritmi de face-detection ce detectează multiple atribute: sex, emoţie, vârstă. În spaţiul Android unde am nevoie de soluţia asta am găsit numeroşi dezvolatori de astfel de sisteme, de la SDK-uri până la aplicaţii complete.

Personal nu am mai urmărit subiectul de mulţi ani dar se pare că la un moment dat precizia acestor algoritmi s-a îmbunătăţit uimitor de mult. Văd promisiuni de acurateţe de peste 99% pe recunoaştere, sex şi emoţie şi erori +/-5 ani pe vârstă. În China face-detection e la fel de banal precum culoarea galbenă la semafor.

Am încercat câteva demo-uri şi rezultatele nu sunt atât de precise precum reiese din campaniile acealea de marketing.

Întrebarea mea este: careva dintre voi a folosit un asemea sistem în ultimii 2 ani?

1 Like

Eu am facut ceva de genu, face detection si detectie de emotii in python si opencv.
Din ce imi amintesc, in opencv este ceva ce se cheama Haar features.
Pentru detectia de emotii am gasit ceva facut cu Tensorflow.
Pun repo-ul cand ajung acasa

Din ce am citit, aplicatiile de Android folosec framework-ul Viola Jones

@anon31094663 cred ca stie mai in detaliu despre aceste subiecte.

Eu am fost mai mult utilizator.

M-am interesat la un moment dat pentru un potențial proiect, găsisem asta la Microsoft:

(proiectul a picat dar mi-a rămas în cap soluția)

1 Like

Daca nu te-ai uitat inca, uita-te la OpenCV.
OpenCV: Face Recognition with OpenCV

Personal nu am avut treaba cu asa ceva, ci cu localizarea 3D la alte chestii legate de ceva medical.

Cat despre promisiunile alea… well, sunt promisiuni. E adevarat pe setul lor de test, cum le bagi in lumea reala, cum devine diferit.

Am încercat şi eu Open Cv si alte packete de Python pentru detecţie, am scos un script care iţi compune portretul din zaruri GitHub - mirceaciu/dicedraw: Create a dice portrait of yourself with the help of this script.

Giganţii care ar fi putut să facă minuni în zona asta nu prea mă încântă.

Microsoft şi Amazon au soluţii dar sunt API based, procesare imagine cu imagine. Cerinţele mele cer procesare real-time, frame cu frame - caz în care cu Microsoft dau faliment :D.

Google au renunţat să clasifice persoane pe criteriul sex pentru a fi “politically correct”.
Facebook au iniţiative mişto în spaţiul AI, de exemplu Detectron 2 e foarte bun pe detecţie de obiecte, dar nu am găsit nimic pentru clasificare persoane.

Am discutat cu firme din China care au implementat la nivel naţional face-detection, dar comunicarea e greoaie şi îmi lasă impresia că nu sunt foarte interesaţi de clienţi din spaţiul nostru. Documentaţie în mandarină + servere de demo în Ali Cloud de unde descarci un fişier de 50mb în 2 ore.

Eu am incercat mai multe variante pentru identificare copii sub 14 ani, dar trebuia sa actualizezi odata la 9 luni bd cu fotografii noi. Nu stiu daca te ajuta, dar macar sa tii minte ca daca ai un mediu in care se schimba infatisarea faciala, va fi mult de munca. Stiu ca imediat dupa pandemie s-au actualizat multi algoritmi si fac recunoastere inclusiv cu masca faciala normala.

Eu le-as da un email celor de https://paybyface.io/ - care sunt niste romani foarte misto si cu siguranta iti vor aprinde lumina in zona asta.

1 Like

Mulţumesc pentru recomandare, am să încerc o discuţie cu ei.

În cazul meu nu este nevoie de recunoaştere (persona detectată este X) ci de estimare atribute sex, vârstă etc deci nu am nevoie de o bază de date cu feţe.

Ok, deci pentru sex si varsta este deja mai complicat daca au masti.

Nu îți va merge opencv, caută o bază de date cu fete clasificate după sex, varsta, un model de face recognition și antrenează-l pe ce vrei.
Pentru antrenare îți trebuie multe resurse, pentru recunoaștere cu un model creat nu.

Poți abuza API-urile Alibaba, Azure, GCP, IBM Watson, AWS ca să îți creezi baza de date de fete clasificate după care să antrenezi AI-ul. Iei trial-urile pe email și card temporar și le folosești pentru asta.

Nu am experienta in zona asta, la o prezentare la care am fost am vazut ca sa dezvoltat destul de mult partea de machine learning care functioneaza pe telefonul mobil

Ceva de genul ai nevoie pentru procesare real time, din cate stiu capabilitatile pe iOS ca si performanta sunt mai bune.

@rolisz te poate ajuta cu un sfat.

Ce te face sa crezi ca OpenCV nu poate de-astea?

Daca ce are nu e multumitor, poate fi cuplat cu TensorFlow Building a Real-Time Object Recognition App with Tensorflow and OpenCV | by Dat Tran | Towards Data Science

1 Like

Am folosit OpenCV pentru crearea de portrete pentru tag-uri din imagini de pe facebook si cand era vorba de filtre, alte unghiuri, parti ascunse din fata sau imagini b&w nu mai mergea (dar iti spunea daca a dat fail) si nu ma interesa sexul sau varsta, doar sa imi dea boundary box la fata.
Imi amintesc si ca am rupt un server dedicat cu 8 core-uri cu 16 Gb de memorie ca sa fac asta, a luat foarte multa memorie si prelucra cam o imagine in 2-3 secunde.

la master m-am jucat cu asta. Detectia de emotii este decenta.
merge decent si nici nu consuma prea mult.


Asta era repo-ul despre care ziceam in primul meu raspuns :slight_smile:

Si ce-i cu asta? Nu inseamna ca l-ai folosit la intreaga capacitate.

Am lucrat cu face detection la un sistem de supravaghere inteligent si acuma fac consultanta in domeniul machine learning.

Promisiunile alea de acuratete sunt vrajeli, ca vin cu o multime de asteriskuri. Majoritatea algoritmilor de recunoastere faciala sunt “rasisti”: au o acuratete cu 20-30 puncte procentuale mai mica pentru persoane de culoare. Tu ce target demografic ai? Pe ce audiente trebuie sa functioneze bine?

Acuratete de 99% nu exista momentan, pentru ca sincer, nici oamenii nu ar avea acuratete de 99% pentru detectarea acestor atribute, si sunt prea putine problemele unde ML da performanta mai buna decat oamenii.

O alta intrebare: care e scopul detectarii acestor atribute? Cum vor fi folosite? Unele modele s-ar putea sa mearga mai bine pentru unele aplicatii, iar altele pentru alte aplicatii.

Problema e ca detectarea acestor atribute nu e bine definita. Eu am barba acuma, dar daca mi-o dau jos, arat cu 5 ani mai tanar. Sau am niste prieteni chinezi care zici ca is cu 10 ani mai tineri decat chiar is.

Detectarea sentimentelor e studiata probabil cel mai bine si acolo probabil poti gasi modele open source care sa functioneze out of the box, dar si aici depinde ce sentimente vrei sa recunosti.

4 Likes

Face mult sens ce zici tu aici, mulţumesc.

Ca să iţi răspund la întrebări:

Tu ce target demografic ai? Pe ce audiente trebuie sa functioneze bine?
  • zona Eu - SUA deci public majoritar caucazian
 care e scopul detectarii acestor atribute?
  • formarea unei imagini de asamblu asupra tipului de persoane ce interacţionează cu un produs.

Eu unul caut următoarele caracteristici la un asemenea sistem:

  1. să poate estima cât mai precis vârstă şi sex
  2. să poată estima în acelaşi timp pentru mai multe feţe , 10 - 20 persoane per frame, 30+ FPS
  3. să poată rula pe dispozitiv dar să nu consume 100% resursele disponibile.

Pentru hardware am găsit jucării precum RK3399PRO ce promit nişte nuclee dedicate pentru AI.

Ca software am tot căutat, prin Asia sunt firme care promit performanţe bune, 100+ persoane per frame dar tind să cred că aceste cifre sunt strict pentru recunoaştere (x este Vasile Ion sau x este o persoană) şi nu pentru estimare (x este bărbat de 23 de ani).

Nu am găsit încă un demo care să mă dea pe spate. Plus că de regulă costurile sunt destul de mari.

Sunt resurse online ce imi arată cum aş putea antrena şi eu un model pornit de la o bază de date cu feţe. Firme precum cele descrise un pic mai sus de mine fac oare fix acelaşi lucru? Sunt chestii mai avansate la care noi, programatori de rând, să nu avem acces?

Vrei sa ruleze pe un device embedded? Nu stiu de acest RK, dar sunt o multime de placute similare, cum ar fi Google Coral sau Nvidia Jetson.

De ce ai nevoie de 30FPS? E foarte mult. Si pe sistemul de supraveghere, rulam undeva la 10 FPS. Persoanele nu se misca atat de mult de la un frame la altul. Ca sa iti faci o idee, cei mai buni algoritmi de object detection ruleaza undeva la 100-200 FPS - pe GPU-uri de ultima generatie. Din cate stiu, fiecare persoana din frame va trebui evaluata separat pentru varsta si sex. Daca tu vrei sa evaluezi varsta si sexul la 20 de persoane pe frame, asta inseamna ca trebuie sa rulezi 2*20*30=1200 inferente pe secunda pe un device embedded - deci de 6 ori mai multe decat merg pe un GPU.

Poti face smecherii gen object tracking. Recunosti o persoana si o urmaresti si atunci nu trebuie sa tot faci reevaluari pentru ea sa ii prezici din nou varsta si sexul. Cu asta reduci foarte mult necesarul de inferente.

Partea misto la ML e ca research-ul de top e facut relativ in public. Si cei de la Google, Facebook, Amazon, Microsoft, etc, publica articole stiintifice cu progresele lor si chiar fac publica modelele de antrenare pe GitHub cu licenta open source. Deci teoretic, da, poti sa iti antrenezi tu propriul model, daca ai datele necesare. Dar atentie, iti cam trebuie multe date (fara cateva mii de fete anotate cu varsta si sex nu are rost) si pentru a optimiza modelul atat ca acuratete cat si ca viteza de inferenta, trebuie e destul de mult de lucru.

Inca o intrebare: e neaparat sa se faca detectia de sex si varsta doar din față (chip)? Nu se vede mai mult din corpul persoanelor? Intuitiv ma gandesc ca e mai usor sa iti dai seama daca cineva e barbat sau femeie daca ii vezi si pieptul.

1 Like

Object tracking mă gândeam să folosesc dacă aş fi mers pe soluţii API/cloud based, cum ar fi Amazon sau Microsoft. M-ar fi ajutat să reduc nişte costuri dar îmi pare că m-aş fi scărpinat cu mâna stângă la urechea dreaptă.

Ce e drept, în soluţiile testate până acum nu am văzut mai mult de 30FPS. Şi frame-urile procesate scad cu cât introduc mai multe feţe pe ecran, nimic neaşteptat.

RK este un chip RockChip, mă uitam la el pentru că am găsit un model PRO ce este lăudat pentru că are nişte extra nuclee speciale pentru AI şi pentru că poate rula Android. Doar că nici unul dintre producătorii de soluţii software din ce am testat până acum nu au auzit/folosit aşa ceva :D.

Legat de estimare de sex din caracteristicile trupului: nici nu am întâlnit, nici nu mi-am imaginat o asemenea soluţie. De la Facebook am văzut un detector foarte mişto pentru schelet/postură umană dar nu ştiu ce particularităţi ar avea un sex sau altul.