O rețea neuronală a fost învățată să recunoască fețele în videoclipuri folosind un eșantion de fotografie

lecturi Reșetnev. 2017

SOLUȚIONAREA PROBLEMELOR DE RECUNOAȘTERE FEȚEI ȘI FAMILIEI UTILIZAREA REȚELELOR NEURALE CONVOLUȚIONALE

D. V. Plotnikov*, E. A. Sopov

Universitatea de Stat Siberian de Știință și Tehnologie numită după Academicianul M. F. Reshetnev Federația Rusă, 660037, Krasnoyarsk, av. ei. gaz. „Lucrător Krasnoyarsk”, 31

E-shaP: [email protected]

A fost efectuat un studiu experimental al eficienței rețelelor neuronale convoluționale în rezolvarea problemelor de recunoaștere a feței umane și a expresiilor faciale.

Cuvinte cheie: rețea neuronală convoluțională, recunoaștere a feței, recunoaștere a expresiei faciale.

REzolvarea sarcinilor de reconstituire a feței și a expresiei faciale folosind rețele neuronale convoluționale

D. V. Plotnikov*, E. A. Sopov

Universitatea de Stat de Știință și Tehnologie Reșetnev Siberian 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Federația Rusă E-mail: [email protected]

Această lucrare realizează cercetări experimentale ale performanței rețelelor neuronale convoluționale operate cu sarcini de recunoaștere a feței și a feței.

Cuvinte cheie: rețea neuronală convoluțională, recunoaștere a feței, recunoaștere a expresiei faciale.

Introducere. Nevoia umană de a dezvolta tehnologii de recunoaștere facială există de mult timp. Astăzi, astfel de algoritmi își găsesc aplicarea în multe domenii - sisteme de securitate, verificare etc. Desigur, sunt îmbunătățiți în mod constant și arată rezultate mai bune. Unul dintre acești algoritmi este o rețea neuronală convoluțională, care, datorită structurii sale și a algoritmilor utilizați în ea, este capabilă să lucreze cu orice imagini și fluxuri video.

Această lucrare analizează eficiența CNN cu diverse sarcini de recunoaștere, și anume, recunoașterea feței și expresiile faciale umane. Întrucât fiecare sarcină de recunoaștere are caracteristici unice (cum ar fi numărul de exemple de antrenament și de testare, dimensiunea, numărul de clase etc.), apare următoarea întrebare: este întotdeauna posibil să se obțină o eficiență ridicată a algoritmului (CNN) folosind doar clasicul configuratii? Și creșterea hiperparametrilor modelului duce întotdeauna la creșterea eficienței?

Au fost alese următoarele sarcini de testare: „Baza de date ORL a fețelor” și „Recunoașterea expresiei faciale 2013”.

Baza de date „Baza de date ORL a fețelor”. Prima sarcină de testare a fost problema recunoașterii feței. Baza de date constă din 400 de fotografii cu patruzeci de persoane diferite (Fig. 1). Toate fotografiile sunt prezentate în tonuri de gri. Eșantionul de testare este format după cum urmează: trebuie să selectați aleatoriu o fotografie a fiecărei persoane. Algoritmul dezvoltat trebuie, pe baza a 360 de fotografii de antrenament, să clasifice celelalte 40, adică să identifice persoanele reprezentate în ele.

Baza de date „The Facial Expression Recognition 2013”. A doua sarcină de testare a fost problema recunoașterii emoțiilor. Baza de date este un set de imagini cu persoane cu expresii faciale diferite. Persoana din imagine poate fi supărată, dezgustată, frică, fericită, tristă, surprinsă sau calmă.

Orez. 1. Exemple de fotografii luate din baza de date ORL a fețelor

Metode matematice de modelare, management și analiză a datelor

Orez. 2. Exemple de fotografii luate din baza de date „The Facial Expression Recognition 2013”

Structura unei rețele neuronale convoluționale pentru lucrul cu „Baza de date ORL a fețelor”

Numărul stratului Parametrii stratului

Număr de nuclee Dimensiunea nucleelor ​​Funcție de activare

1 Strat convoluțional 1 20 5x5 Tangenta hiperbolică

3 Stratul convoluțional 2 50 5x5 Tangentă hiperbolică

Dimensiunea convoluției Funcția de convoluție

2 Strat de subeșantionare 1 2x2 Funcție maximă

4 Reducere eșantionare Layer 2 2x2 Funcție maximă

Numărul de neuroni Funcția de activare

5 Stratul complet conectat 1 500 Tangenta hiperbolica

6 Stratul complet conectat 2 40 Tangenta hiperbolica

Structura 1 Structura 2

Orez. 3. Dinamica eficienței antrenamentului CNN (Structura 1 și Structura 2)

Eșantionul constă din 28.709 exemple de antrenament și 7.178 de exemple de testare. Fiecare imagine are o rezoluție de 48x48 pixeli.

Rezultate experimentale. Baza de date „Baza de date ORL a fețelor”. Principiul de funcționare al CNN poate fi găsit în.

În timpul lucrărilor, au fost folosite și alte structuri pentru a lucra cu baza de date „The ORL Database of Faces”. Cu toate acestea, s-au dovedit a fi ineficiente. Pe de o parte, configurațiile mai complexe și mai intensive din punct de vedere computațional nu au arătat rezultate mai bune. Și structurile mai simple nu puteau fi antrenate deloc. Astfel, cel mai bine pregătit cadru realizează o eficiență de clasificare de 97,5%.

Baza de date „The Facial Expression Recognition 2013”. Deoarece dimensiunea acestei probleme este relativ mare, s-a decis reducerea dimensiunii (la 28x28). În acest caz, o imagine de o dimensiune mai mică va fi alimentată la intrarea rețelei neuronale. Practica a arătat că timpul de antrenament CNN cu imagini de intrare de 48x48 pixeli este de 4 ori mai lung decât cu imaginile de intrare de 28x28 pixeli. În plus, dinamica de învățare în rețea rămâne aproape neschimbată.

Următoarea etapă este testarea ipotezei că valorile hiperparametrilor CNN afectează viteza

antrenament. Pentru rezolvarea problemei au fost folosite două structuri: Structura 1 - identică cu cea care a fost folosită pentru a lucra cu baza de date „The ORL Database of Faces”.

Structura 2 este Structura 1 cu valori crescute ale hiperparametrului (acum numărul de nuclee ale primului strat convoluțional = 50, al doilea strat convoluțional = 125) (Fig. 3).

În fig. 3: axa x - iterații de antrenament de rețea, axa y - precizie de antrenament. Se poate observa că la iterația 125, Structura 1 atinge nivelul său de stagnare, în timp ce Structura 2 continuă să crească acuratețea recunoașterii.

Concluzii. Rezultatele au arătat că pentru rezolvarea diferitelor probleme de recunoaștere a feței umane (sau a emoțiilor), utilizarea aceleiași structuri clasice poate să nu fie eficientă. Este necesar să se pornească de la obiectiv și să se caute un compromis între eficiența și puterea de calcul a hardware-ului, deoarece timpul de rulare al unui CNN este extrem de sensibil la dimensiunea datelor de intrare, iar rezultatul nu va depinde întotdeauna de dimensiunea de eșantionul de antrenament. Când lucrați cu structuri complexe, sunt necesare preprocesarea datelor și reglarea fină a rețelei.

Această direcție va face obiectul cercetărilor ulterioare.

PewemHeecKye umeHUH. 2017

1. Recunoașterea feței: o abordare a rețelei neuronale convoluționale / S. Lawrence, C. L. Giles, Ah Chung Tsoi și A. D. Back // IEEE Trans. Rețele neuronale. 1997. Vol. 8, nr 1. P. 98-113.

2. Krizhevsky A., Sutskever I., Hinton G. E. Clasificare ImageNet cu rețele neuronale convoluționale profunde, Adv. Neural Inf. Proces. Syst. 2012. P. 1-9.

3. LeCun Y., Boser B., Denker J. S. et al. Backpropa-gation aplicată recunoașterii codului poștal scris de mână. Calculator neuronal. 1989. Nr. 1 (4). P. 541-551.

4. Lin M., Chen Q., Yan S. Network In Network. arXiv Prepr. 2013:10.

5. Sopov E., Ivanov I. Proiectați tehnologii eficiente pentru analiza contextului imaginii în dialog HCI folosind algoritmul genetic de căutare a noutății auto-configurabil. Robot de control automat al informaticii (ICINCO), 2014. 11th Int Conf. 2014. Nr 2. P. 832-839.

© nn0THHK0B fl. B., ConoB E. A., 2017

În acest jurnal scriu despre tot ce întâlnesc pentru prima dată. De data aceasta am cedat isteriei generale și vom vorbi despre rețelele neuronale convoluționale. Din nou, voi încerca să descriu în detaliu procesul gândurilor mele, și nu doar să enumerez rezultatele și modalitățile de a le obține. Prin urmare, vor fi „multe bukaf”.
Foarte mult timp am rezistat unor astfel de rețele neuronale „murdare, artificiale”, preferând SVM-ul „pur, natural”. Băieții serioși rezolvă probleme folosind rețele neuronale convoluționale de mult timp. Am nevoie de o problemă simplă, de preferință una pe care am rezolvat-o deja într-o altă paradigmă, pentru a testa o tehnologie care este nouă pentru mine. Hotărât: recunoașteți fețele. Pentru a încălzi videoclipul produsului final:
https://www.youtube.com/watch?v=mwDbGpAZdxU

Instrumente

După cum știți, rețelele neuronale se antrenează mult mai eficient pe GPU-uri decât pe procesoare. Nu am un desktop cu placa video. Din fericire, acum câțiva ani, când mi-am cumpărat un laptop, mi-am cumpărat un laptop de gaming cu așteptarea că voi avea nevoie să stăpânesc GPU computing și l-am cumpărat cu o placă video nvidia geforce gt 650m 2Gb. Deci, ce aveam când am început să lucrez: o serie de articole despre învățarea automată este distracție pur și simplu genială pentru un începător, ceva experiență în viziune computerizată, materiale de pe site-ul face-rec.org. Trebuie să decideți asupra instrumentelor. Desigur, acesta va fi limbajul C++, biblioteca opencv computer vision, dar cu cadrul de recunoaștere a feței totul s-a dovedit a fi mai complicat. Se pare că OpenFace, pe care îl folosește Adam, este scris în Python și folosește torch, care la rândul său este scris în lua. Practic am nevoie de o soluție monolitică în C++. A fost găsit rapid un dlib ușor, care la acea vreme avea un detector de fețe de înaltă calitate, avea instrumente pentru lucrul cu rețele convoluționale, inclusiv utilizarea GPU-urilor, dar nu avea funcționalitate de recunoaștere a feței. Exact ce ai nevoie!
Să începem să o desfășurăm. Trebuie să descărcați sursele și să construiți folosind cmake. După niște chinuri, mi-am dat seama că pentru a folosi placa video, trebuie să instalați CUDA Toolkit și cuDNN de pe site-ul Nvidia. Calea de instalare nu trebuie să conțină spații. Pentru a începe proiectul meu să utilizeze dlib, m-am uitat la parametrii din cazurile de testare. Pe lângă lista de biblioteci, trebuie să specificați definiția preprocesorului DLIB_USE_CUDA și să setați parametrii de optimizare. Am instalat și utilitarul util GPUZ pentru a monitoriza utilizarea plăcii video în timpul antrenamentului.

Am rulat mai multe configurații de testare ale rețelelor neuronale pentru binecunoscutul set de date MNIST:


  • Perceptronul cu două straturi a fost antrenat timp de o jumătate de oră pe un nucleu de procesor. Precizie pe setul de antrenament și pe setul de testare: (0,9908, 0,9792).

  • Rețeaua LeNet (Lekun) s-a antrenat timp de aproape 6 ore pe un nucleu de procesor și 15 minute pe o placă video! Precizie atinsă (0,99975, 0,9915).

  • Rețea ResNet - 1 oră și 15 minute pe o placă video, precizie (0,9938).

  • Rețea de inițiere - aproximativ 4 ore pe o placă video, precizie (0,999217, 0,9904).

Acum să aruncăm o privire la setul de antrenament. Am trecut prin lista bazelor de date deschise, am descărcat tot ce se putea descărca, am primit acces de unde am putut acces rapid, am descărcat, parțial convertit, parțial am lucrat cu mâinile mele, până la urmă, pentru început, am obținut o bază de date de 65.000 de imagini de 6.700 de persoane diferite, cu capacitatea de a dubla timpii bazei de date, dacă învingi lenea.

Enunțarea problemei și prima soluție
Să trecem acum la sarcina principală. Vreau să construiesc un clasificator destul de fiabil pentru un grup mic de fețe (până la 100 de persoane), pe baza a 3-5 fotografii ale fiecăruia. În mod normal, clasificatorul trebuie să „digere” imagini foarte variabile. Într-adevăr, în funcție de unghiul de vizualizare, de condițiile de iluminare, de prezența unei coafuri, de ochelari și de expresia feței, se vor obține imagini foarte diferite. Este clar că, cu un eșantion de antrenament atât de mic (3-5 fotografii ale unei perone), are sens să folosiți doar un clasificator liniar. Și avem nevoie de un descriptor de foarte înaltă calitate, pe care îl vom aplica în prealabil, al cărui scop este să evidențiem diferențele dintre fotografiile diferitelor persoane și asemănările dintre diferitele fotografii ale aceleiași persoane.

Se știe că un strat al rețelei neuronale efectuează diviziunea liniară. Dacă ultimul strat al rețelei noastre neuronale se clasifică liniar, atuncirestul rețelei neuronale poate fi considerată ca o „transformare prin compresie-rectificare” a vectorilor imaginii feței înun spațiu în care aceste persoane sunt liniar separabile. Să profităm de asta.


Prima idee care mi-a venit în minte a fost să antrenez o rețea neuronală pentru a căuta diferențele. Pentru a face acest lucru, furnizați intrării o pereche de imagini și o indicație dacă aceste imagini aparțin aceleiași persoane sau altora diferite.

Dacă da grila este antrenată cu succes, apoi puteți obține un descriptor trimițând câteva imagini, una - un descriptor La pe care îl calculăm, iar al doilea - orice imagine, singurul lucru important este că este întotdeauna aceeași. Am găsit o imagine medie a unei fețe online.Ca vector descriptor, puteți lua penultimul strat al rețelei neuronale, ultimul va fi format din doar doi neuroni.


Prima configurație este foarte simplă, similară cu Lenet, include o pereche de straturi convoluționale și trei complet conectate:
static const size_t MINI_BATCH_SIZE = 128 ; //128; const unsigned long descriptor_size = 128 ; static const cv:: Size DATASET_IMAGE_SIZE = ( 128 , 128 ) ; //Grid ca LeNet//LeCun, Yann, et al. „Învățare bazată pe gradient aplicată recunoașterii documentelor”.< dlib:: fc < 2 , dlib:: fc < 128 , //Proceedings of the IEEE 86.11 (1998): 2278-2324. folosind net_type = dlib::loss_multiclass_log > >>> >>> >> >> > > > ;
//!!!RELU RITAT AICI

dlib::relu<< "net initialization..." << std:: endl ; net_type net; Antrenamentul arată astfel: Std::cout<< "trainer initialization..." << std:: endl ; dlib:: dnn_trainer < net_type>//Codul de mai jos folosește coborârea gradientului stocastic în mini-lot cu o rată inițială de învățare de 0,01 pentru a realiza acest lucru. std::cout antrenor(net);//dnn_trainer< dlib:: matrix < unsigned char >antrenor(net, adam(0,0005, 0,9, 0,999), (0, 0, 0, 0));< unsigned long >trainer.set_learning_rate(0,01);<< "traning..." << std:: endl ; while (trainer.get_learning_rate () >//1e-3 trainer.set_min_learning_rate (MIN_LEARNING_RATE) ; trainer.set_mini_batch_size (MINI_BATCH_SIZE) ; trainer.be_verbose(); trainer.set_synchronization_file ("lenet_faces_sync" , std::chrono::seconds (180) ) ;//Tren std::vector<< std:: endl ; net.clean () ; > mini_batch_samples; std::vector<< net; etichete_mini_loturi;

După finalizarea antrenamentului, plasa este folosită ca descriptor. Folosind un eșantion de testare separat, un clasificator liniar este antrenat și testat în spațiul vectorilor obținuți din răspunsurile celui de-al doilea strat complet conectat al rețelei neuronale la o pereche de imagini. Eșantionul de testare conține aproximativ 1500 de imagini pentru 15 persoane diferite. Clasificatorul este antrenat pe 5 imagini de persoană. Testare - pentru toată lumea.
//Instruirea clasificatorului Std::cout<< "Traning classifier..." << std:: endl ; TSVMClassifier classifier({ cv:: ml :: SVM :: POLY ,2 ,2 } ) ; static const long NL = 5 ; long i = 0 ; std:: vector < long >isum(dataset.ClassNumber());< unsigned char >cv:: Mat descr(1 , descriptor_size, CV_32FC1) , train_data(dataset.ClassNumber () * NL, descriptor_size, CV_32FC1) , train_classes(dataset.ClassNumber () * NL, 1 , CV_32SC1) , test_data ()dataset () , descriptor_size, CV_32FC1) , test_classes(dataset.Size () , 1 , CV_32SC1) , predicted_classes(dataset.Size () , 1 , CV_32FC1) , media = cv::imread ("../AveragedMan.jpg" ) CV_GRAY_SCALEIMAGE ; dlib::matrix averaged_dlib(DATASET_IMAGE_SIZE.height , DATASET_IMAGE_SIZE.width ), sample_dlib; //Pregătirea feței medii TFaceDetector FaceDetector(< dlib:: rectangle >„shape_predictor_68_face_landmarks.dat”< dlib:: matrix < unsigned char >); std::vector face_rects = FaceDetector.Detect(averged) ;< dataset.Size () ; idx++ ) { try { sample_dlib = dataset.GetSample (idx) ; win.set_image (sample_dlib) ; std:: cout << dataset.GetLabelIdx (idx) << " " << dataset.GetLabelByIdx (dataset.GetLabelIdx (idx) ) << std:: endl ; } catch (exception & e) { TException * E = dynamic_cast < TException * >dlib::array<< E- >> fețe;<< std:: endl ; else std:: cout << e.what () << std:: endl ; continue ; } ; net(dataset.MakeInputSamplePair (& averaged_dlib, & sample_dlib) ) ; for (unsigned long iv = 0 ; iv < dlib:: layer < 2 >FaceDetector.ExtractFaces(averged, face_rects, faces) ;< float >if (faces.size () == 1 ) resize_image(faces[ 0 ] , averaged_dlib) ;< 2 >dlib::image_window win;< long >//Ne antrenăm pe 5 obiecte din fiecare clasă și testăm pe toate< long >pentru (idx lung nesemnat = 0; idx< NL) { (&e) ; dacă (E) std::cout ce()(net).get_output().size();< long >iv++ ) descr.at< long >(iv) = dlib::layer< long >(net).get_output().host()[iv];<< train_data.cols << " " << train_data.rows << " " << train_classes.cols << " " << train_classes.rows << std:: endl ; classifier.Train (train_data, train_classes) ; classifier.Save ("classifier.txt" ) ; descr.copyTo(test_data.row(idx)); Std::cout<< test_classes.at<< std:: endl ; classifier.Predict (test_data, predicted_classes) ; unsigned long num_right = 0 , num_wrong = 0 ; for (unsigned long idx = 0 ; idx < dataset.Size () ; idx++ ) if (test_classes.at < long >(idx) = (lung) dataset.GetLabelIdx (idx) ;< float >dacă (isum[ test_classes.at<< "training num_right: " << num_right << std:: endl ; std:: cout << "training num_wrong: " << num_wrong << std:: endl ; std:: cout << "training accuracy: " << num_right/ (double ) (num_right+ num_wrong) << std:: endl ; std:: cin >(idx)]

//train_data.push_back(descr);


//train_classes.push_back(test_classes.at (idx));descr.copyTo(train_data.row(i));Exista o opțiune de a rula detectorul prin toate imaginile în avans și de a salva rezultatul pe disc, apoi de a lucra cu el.Dar nu mi-a plăcut această opțiune, deoarece ar trebui să stochez două baze de date voluminoase pe disc, deoarece pot schimba detectorul în viitor și sunt obligat să stochez imagini „brute” neprocesate. Există și o opțiune de stocare în cache. Întregul eșantion este împărțit în blocuri care se potrivesc în RAM. Selectăm aleatoriu un bloc și antrenăm subseturile sale aleatoare de imagini până când fiecare imagine este folosită n dată. Apoi trecem la următorul bloc. În acest fel, puteți reduce numărul de citiri de disc cu un factor de n.

Am paralelizat detectarea feței folosind un grup de fire din aceeași bibliotecă dlib și am obținut un câștig de timp de 5-6 ori.
struct TR ( TDataset * Dataset; bool Positive; dlib::matrix< unsigned char >SamplePair;< TR>Etichetă lungă nesemnată;< dlib:: future < TR>);< batch_size; i++ ) { trv.push_back (TR() = { this , positive} ) ; fv[ i] = trv[ i] ; ... dacă (UseMultiThreading) ( std::vector trv; std::vector> fv(batch_size) ;< batch_size; i++ ) { batch_sample_pairs.push_back (fv[ i] .get () .SamplePair ) ; batch_labels.push_back (fv[ i] .get () .Label ) ; pentru (nesemnat lung i = 0; i //Puteți, desigur, să vă descurcați fără lambda ThreadPool- > add_task_by_value( (TR & val) ( val.Dataset - > GetInputSamplePair(val.Positive, val.SamplePair, val.Label) ; ) , fv[ i] ) ;< batch_size; i++ ) { GetInputSamplePair(positive, sample_pair, label) ; batch_sample_pairs.push_back (sample_pair) ; batch_labels.push_back (label) ; positive = ! positive; pozitiv = ! pozitiv; ); } ; }

//Fiecare fir are nevoie de propria instanță a detectorului, deoarece poate fi de diferite dimensiuni etc.

ThreadPool-> wait_for_all_tasks() ;

pentru (nesemnat lung i = 0; i//batch_sample_pairs.push_back(tfv[i].SamplePair);

//batch_labels.push_back(tfv[i].Label);

);

Dar ceva timp mai târziu, studiind statisticile mondiale privind căutarea vizuală, comerțul online și mobil, tendințele generale pe piața globală de retail, ne-am dat seama că interesul afacerilor pentru recunoașterea mobilă a îmbrăcămintei, încălțămintei și accesoriilor (în cadrul echipei numim acest cuvânt general fashion). ) este în creștere rapidă.

Să ilustrăm.

Unele numere

Industriile de îmbrăcăminte, modă și produse de lux sunt o piață foarte promițătoare. Marketerii și finanțatorii de la McKinsey spun în studiul lor că industria globală de îmbrăcăminte va experimenta o creștere de două cifre între 2014 și 2020. Mai mult, creșterea se va produce din cauza piețelor emergente (Rusia, desigur, se aplică și aici) și în mare parte datorită cumpărătorilor asiatici (rata de urbanizare a Chinei este acum de 10 ori mai rapidă decât procesul similar din Marea Britanie în secolul al XIX-lea).

Dacă vorbim doar de piața de îmbrăcăminte pentru femei, atunci în următorii 12 ani creșterea acesteia va fi de peste 50% la nivel mondial (conform studiului McKinsey - Unleashing Fashion Growth City by City).

Hainele sunt aranjate. Ne-am dat seama că piața este în creștere, ceea ce înseamnă că există oportunități pentru dezvoltarea tehnologiei. Amenda.

În continuare, am început să studiem tendințele de cumpărături online. Ne-am uitat în America. În 2015, 205 milioane de americani (dintr-o populație de 325 de milioane - adică mai mult de 60%) au căutat măcar o dată bunuri pe internet, au comparat prețuri sau au cumpărat ceva online. Se așteaptă ca până în 2019 această cifră să ajungă la 224 de milioane.

O tendință similară este observată la nivel global: un studiu pentru Conferința Națiunilor Unite pentru Comerț și Dezvoltare afirmă că până în 2018, aproximativ 1,623 miliarde de oameni din întreaga lume vor cumpăra bunuri și servicii online (comparativ cu 1,039 miliarde în 2013).

În același timp, este interesant de observat că și segmentul comerțului mobil (adică achizițiile efectuate de pe dispozitive mobile) este în creștere. Numai în America, conform previziunilor eMarketer, veniturile din retailul mobil vor ajunge la 130,12 miliarde de dolari până în 2018 (de la 56,67 miliarde de dolari în 2014) – mai mult decât dublarea.

Este evidentă și tendința globală spre „mobilizarea” cumpărăturilor online. Goldman Sachs a publicat un raport conform căruia peste 5 ani segmentul m-commerce din punct de vedere al numărului de utilizatori va crește de 5 ori: de la 379 de milioane de utilizatori în 2013 la peste 1 miliard de cumpărători în 2018 (de menționat că raportul nu ia în considerare achizițiile online din segmentul „Călătorii”).

Îmbrăcămintea, trebuie spus, conform cercetărilor Nielsen, este categoria cel mai frecvent cumpărată online. Doar cărțile, rechizitele de birou și muzica concurează cu ea.

În esență, așa se întâmplă: până acum, piața de acces la Internet a atins punctul de saturație, creșterea utilizatorilor a încetinit semnificativ (proiectată la 5-10% în anii următori). Creșterea pieței smartphone-urilor se îndreaptă și ea spre zero.

De exemplu, urmăriți prezentarea discursului lui Mark Zuckerberg la conferința Facebook F8.

Aceasta înseamnă că internetul și piața smartphone-urilor au devenit ceea ce se numește o marfă, bunuri de larg consum, parte din viața de zi cu zi. Dar achizițiile prin intermediul dispozitivelor mobile sunt noi modele de comportament care oferă spațiu pentru dezvoltarea de noi tehnologii.

Toate aceste fapte au servit drept bază pentru a ne gândi la modul în care putem aplica tehnologia rețelei neuronale și să facem ceva interesant și necesar în acest domeniu. Așa că, în 2014, am început să dezvoltăm un sistem mobil de recunoaștere a îmbrăcămintei.

Cum și de ce să înveți sistemul să recunoască rochiile?

Ideea însăși a recunoașterii mobile este simplă: utilizatorul vede un articol de modă care îi place (pe o persoană pe stradă, în vitrina unui magazin sau pe coperta unei reviste), îi face o fotografie pe un dispozitiv mobil, încarcă fotografia în aplicația mobilă instalată, care recunoaște produsul din imagine și selectează produse similare din sortimentul magazinului. Bunurile, desigur, pot fi achiziționate imediat. Toate.

Cu alte cuvinte, așteptările utilizatorilor de la serviciu pot fi reduse la trei pași: ferăstrău - fotografiat - cumpărat.

Pentru a dezvolta și a construi un astfel de sistem, a trebuit să procesăm peste 30.000.000 de imagini, să înțelegem diferența dintre un pulover și un pulover (există și pulovere și cardigane, și toate acestea sunt lucruri diferite), cizme derby și călugări, duffle și tote genți și deschideți „kunstkamera” noastră „, închiriați manechine, simțiți-vă ca tineri (ei, nu chiar tineri, bine) creatori de modă - și multe altele. Dar mai întâi lucrurile.

Am decis să construim sistemul de recunoaștere mobil pe rețele neuronale este chintesența tehnologiei de deep learning. Rețelele imită munca neuronilor din creierul uman în ceea ce privește învățarea și corectarea erorilor: rețeaua învață independent (cu suficiente date de antrenament) și acționează pe baza experienței anterioare, făcând din ce în ce mai puține erori cu fiecare nouă învățare.

Un neuron este un element de calcul separat al unei rețele; fiecare neuron este conectat la neuronii straturilor anterioare și următoare ale rețelei. Când un fișier imagine, video sau audio ajunge ca intrare, acesta este procesat secvenţial de către toate straturile rețelei. În funcție de rezultate, rețeaua își poate modifica configurația (parametrii fiecărui neuron).

Pentru sarcina noastră, rețelele neuronale sunt bune, deoarece, având în vedere cantitatea necesară de date de antrenament, pot învăța să recunoască aproape orice tip de obiect.

Pasul 1: Aflați totul despre modă

Deci, din punct de vedere tehnologic, sistemul ar trebui să funcționeze în următoarea succesiune: analiza fotografiei încărcate de sistem - evidențierea zonelor care pot conține un produs - determinarea categoriei de produs - separarea unui obiect de fundal - crearea unei amprente digitale a imaginii produsului - căutarea de produse similare într-o anumită categorie.

Primul punct din planul de cercetare și dezvoltare a fost crearea unei clasificări corecte, complete și precise a modei.

Am decis să începem cu clasificarea pantofilor. Iar femeilor, noua ni s-a parut ca e mai usor (trebuia sa ne crucim imediat, prostii naivi). Înțelegem: pentru ca sistemul să recunoască corect categoriile, avem nevoie de o clasificare detaliată a tipurilor de pantofi de damă. Au folosit Wikipedia, dicționare explicative, site-uri de magazine de pantofi online și imagini de la Google, astfel:

În paralel cu căutarea imaginilor pe categorii și marcare, am creat un folder intern „Kunstkamera”, care a început să fie completat cu exemple de pantofi neobișnuiți (sau chiar de-a dreptul ciudați), dintre care unii am vrut să „nevădăm” imediat. De exemplu, avem următoarele exponate:

Noi, desigur, nu am făcut astfel de imagini pentru a antrena rețeaua. Aceasta este pentru mine – „doar să râd” (c).

Și ne-am dat seama că există pantofi unisex. De exemplu, categoriile de pantofi precum espadrile, mocasini sau timberlands pot fi foarte asemănătoare ca aspect - atât pentru bărbați, cât și pentru femei.

În total, am clasificat 10 categorii ca fiind unisex.

Așa că, în total, am identificat ceva mai puțin de 100 de categorii de pantofi, după care am rezumat ce provocări trebuia să ne confruntăm la acest pas.

Primul- Aceasta este o clasificare în sine. Ce categorii ar trebui să evidențiem? Vor fi prea mici? Sau, dimpotrivă, excesiv mărită?

Aici am fost ajutati de structura cataloagelor clientilor nostri finali - magazine online. Am luat ca bază categorizarea lor, aducând-o într-o formă care să ne satisfacă cerințele (să fie universală pentru magazinele rusești și americane, nu prea generală și nici prea detaliată).

Doilea– controversă în clasificarea unor bunuri într-o anumită categorie. De exemplu, ce este asta? Botine sau adidași?

În exterior, desigur, arată ca niște botine, dar pe site-urile unor magazine online astfel de pantofi sunt clasificați ca adidași. De unde știi în ce categorie clientul va dori să caute cizme asemănătoare?

Treilea– detaliu clasificator. Uneori a fost necesar să se „plictisească” și, pentru o căutare mai precisă, să selecteze categorii suplimentare care nu se corelează întotdeauna cu categoriile de magazine (a nu se confunda cu filtrele de căutare!) pentru a obține rezultate de recunoaștere mai bune.

Așa am obținut botine cu pană, botine cu toc stiletto, botine cu toc lat, botine căptușite cu blană etc.

Patrulea– dificultate în selectarea imaginilor în anumite categorii. A existat o perioadă în care, de exemplu, imaginile cu pantofii de barca puteau fi găsite doar pe resurse străine - acești pantofi nu erau încă reprezentați pe scară largă în magazinele noastre.

ŞI dura. Nu am înțeles cum se va comporta neuronul în determinarea materialului de încălțăminte. Adică, rețeaua de cizme înalte din piele va căuta în mod special cizme din piele, sau rezultatele căutării vor conține toate cizmele de formă similară, dar din materiale diferite?

Și, ca urmare, nu am știut dacă să separăm categoriile după material: pantofi din piele, pantofi din piele intoarsă, pantofi din material etc.

Pentru testare, am realizat 2 categorii: „Cizme din piele intoarsa” si „Cizme din piele” (desigur, se suprapun cu alte categorii - cizme inalte, cizme cu pane si altele). Rețeaua le recunoaște corect. Dar, până la urmă, nu am împărțit toate tipurile de pantofi după material în categorii care nu se suprapun - ar fi fost inutil. Dar aceste două categorii „stabilite istoric” au fost lăsate. Ele nu interferează cu munca corectă.

În general, după ce am pregătit un clasificator de pantofi, am început să ne considerăm un fel de amestec de Alexander Vasiliev, Vyacheslav Zaitsev și Valentin Yudashkin.

Corespondența noastră internă

Apoi, folosind același principiu, am început să distingem genți pentru femei și pentru bărbați, apoi îmbrăcăminte pentru femei și pentru bărbați.

Pasul 2: Antrenează rețelele neuronale pentru a distinge călugării de mocasini și un pulover de un jumper

Deci, am identificat categoriile de modă cu care va funcționa sistemul nostru. Acum trebuie să antrenăm rețelele neuronale pentru a recunoaște categoriile dintr-o fotografie: adică să stabilim unde se află în imagine obiectul dorit și să-l clasificăm corect.

Pentru a antrena o rețea neuronală să recunoască o categorie, primul lucru pe care trebuie să-l faceți este să selectați și să încărcați în rețea (numim acest proces „alimentarea rețelelor”) un număr considerabil de imagini: de la o mie la câteva sute de mii.

Adică, pentru a învăța sistemul să recunoască categoria „Pantofi cu toc înalt”, trebuie să descărcați de pe Internet două sau mai multe mii de imagini diferite cu pantofi cu toc înalt. Principiul este simplu: mai multe date de antrenament înseamnă o performanță mai bună a rețelei (mai precis, recunoaștere).

Descărcarea imaginilor pentru antrenament se face pe jumătate automat de algoritmii noștri interni, pe jumătate manual. Ulterior, gama de fotografii este verificată pentru a se asigura că nu există duplicate sau imagini neadecvate aleatorii. În plus, toate fișierele primesc nume uniforme și același format (extensie).

Și apoi începe partea cea mai dificilă: marcarea manuală a produselor din imagine. Angajații noștri desenează un cadru în jurul produsului din fotografie și determină categoria acestuia.

De exemplu:

Acest lucru este necesar pentru ca sistemul să înțeleagă: exact ceea ce este în dreptunghi este un produs dintr-o anumită categorie. Lucrarea de marcare necesită cel mai mult timp: sarcina este minuțioasă și nu se mișcă foarte repede. Dacă măsurați orele de lucru petrecute pentru marcarea în cești de cafea, atunci rezultatul va fi mai mult de o tonă de băutură revigorantă.

Cu ce ​​te lupți?

La pasul de marcare, lipsa de experiență și previziune s-au întors: după identificarea unor noi categorii de genți și haine, a trebuit să reetichetăm fotografiile marcate anterior ale pantofilor în produse noi. Din cauza lipsei de marcaje pentru categorii noi, sistemul a găsit haine, dar a considerat că s-a greșit și a adăugat produsele găsite în „fond”.

Adică dacă am identificat mai întâi toate categoriile posibile de pantofi, îmbrăcăminte și accesorii (am adus clasificatorul în forma în care este acum) și abia apoi am marcat imaginile pe Toate categorii deodată, atunci am economisi o mulțime de resurse.

Un alt blocaj a fost faptul că mai mulți angajați au fost implicați în marcare. Și s-a întâmplat că fiecare avea propria înțelegere a articolului de îmbrăcăminte din care categorie (am scris despre cazuri controversate mai sus). Prin urmare, a fost desemnat un angajat responsabil care a acceptat fotografiile marcate de la colegii săi și a verificat de două ori toate dosarele și imaginile pentru corectitudinea marcajelor.

Iată cum arată clasificatorul nostru de modă folosind pantofi de damă ca exemplu (una dintre pagini):

Rețelele neuronale sunt acum utilizate pe scară largă pentru procesarea și recunoașterea imaginilor, în sistemele de recunoaștere a vorbirii, analitice video și securitate intelectuală. Rețelele creează muzică ( Jukedeck). Momentul nu este departe când vor apărea boții de rețea neuronală, înlocuind inteligența umană într-o serie de activități (de exemplu, într-un call center care sfătuiește un client cu privire la probleme de bază).

În general, trebuie spus că foarte mulți oameni sunt implicați în rețele. Aceștia sunt rechinii pieței Internet: "Yandex"(de exemplu, caracteristica lor recentă pentru Auto.ru - recunoașterea mărcii și modelului unei mașini dintr-o imagine), Microsoft(serviciu Ce-Dog.net, identificarea raselor de câini din fotografii), Mail.ruŞi Facebook(o divizie a Facebook AI Research) și, desigur, Google. Dar acestea sunt și startup-uri tinere (doar cele care au suficiente fonduri pentru putere de calcul).

Rețelele sunt studiate cu sârguință în universitățile tehnice din întreaga lume, în special în MIPT Poate că acum vrei să te implici și în rețele. Rece!

Apoi vom exprima imediat două puncte pentru care trebuie să fii pregătit.

Să spunem încă o dată că o parte importantă a tehnologiei sunt datele de antrenament. Acesta este primul „dar”. Pentru ca rețeaua să poată distinge cu succes un tip de obiect, este necesar să se colecteze câteva mii de exemple ale acestui obiect pe care s-ar face antrenament. Adesea, numărul de obiecte este de sute. Bazele de date de antrenament rezultate pot număra sute de mii sau milioane de obiecte.

Prin urmare, pregătirea bazei este un proces foarte intensiv în muncă. Uneori, startup-urile vin la noi și ne spun, ei bine, vrem să facem recunoaștere precum Pinterest, cu link-uri către produse de pe Amazon. „Mișto”, spunem noi, „putem aranja. Dar aveți nevoie de o mulțime de poze pentru fiecare produs pentru ca rețeaua să funcționeze. O putem colecta? După aceasta, din anumite motive clienții dispar în spațiu.

Deși trebuie menționat că acum apar diverse tehnologii de învățare accelerată. De exemplu, o gamă disponibilă public de imagini deja pregătite ImageNet; rețele neuronale pre-antrenate care pot recunoaște imaginile și nu necesită pregătirea îndelungată a rețelei pentru funcționare.

Progresul este vizibil și pe partea hardware - există plăci video de înaltă performanță care vă permit să antrenați și să utilizați rețelele de câteva sute de ori mai rapid.

Și în al doilea rând, stocarea și procesarea unor cantități mari de date necesită o putere de calcul semnificativă și fonduri de infrastructură. Pentru a antrena și opera rețele, aveți nevoie de carduri cu cel puțin 3-4 GB de memorie, iar pentru unele arhitecturi sunt necesare toate cele 11 giga-uri. Cardurile nu sunt ieftine: un proiect mic necesită un card care costă aproximativ 100.000 de ruble. În plus, este nevoie de mult spațiu pe disc pentru datele în sine.

Astfel, tehnologia rețelelor neuronale se dezvoltă pe scară largă, iar cererea pentru aceasta este mare. Pe Internet puteți găsi o mulțime de literatură și cercetări pe această temă, chiar și codul de program pentru rețele. Adică, pe de o parte, tehnologia pare să fie general disponibilă, dar, pe de altă parte, în prezent rămâne complexă și prost înțeleasă. Companiile mari organizează în mod regulat tot felul de competiții pentru cei mai buni algoritmi și adesea lupta este pentru doar zecimi și sutimi din precizia algoritmilor.

Așa că, cu lucrarea noastră despre recunoașterea mobilului în domeniul modei, am ajuns în finală KDD, cea mai mare conferință din lume în domeniul Knowledge Discovery și Data Mining. Textul raportului este disponibil la link.

Continuăm să lucrăm la dezvoltarea tehnologiei.

Cercetătorii HSE au propus o nouă metodă de recunoaștere a oamenilor în videoclipuri folosind o rețea neuronală profundă. Abordarea nu necesită un număr mare de fotografii, poate îmbunătăți semnificativ acuratețea recunoașterii în comparație cu analogii cunoscuți anterior, chiar dacă este disponibilă o singură fotografie frontală a unei persoane. Rezultatele lucrării au fost publicate în articolele „Analiza neclară și rețelele neuronale de convoluție profundă în recunoașterea foto-video” și „Identificarea neconstrânsă a feței folosind probabilitatea maximă a distanțelor între caracteristicile profunde de la raft”.

Sistemele de recunoaștere facială au cunoscut o dezvoltare rapidă în ultimii ani. Tehnologii similare de verificare și identificare sunt folosite astăzi într-o varietate de domenii – de la lupta împotriva terorismului până la rețelele sociale și aplicațiile mobile.

Recunoașterea poate avea loc în moduri diferite, dar recent cele mai bune rezultate au fost demonstrate de rețele neuronale ultra-precise. În același timp, cu cât rețeaua neuronală arată mai multe mostre de imagini, cu atât va funcționa mai bine. În timpul procesului de învățare, sistemul identifică caracteristicile cheie și construiește conexiuni între ele, apoi folosește cunoștințele dobândite pentru a recunoaște imagini necunoscute.

Din ce în ce mai multe seturi de fotografii pe care sunt antrenate rețelele neuronale devin disponibile gratuit. Pentru datele controlate (cu aceeași poziție în cadru, iluminare etc.), acuratețea algoritmilor a obținut mult timp rezultate comparabile cu cele ale oamenilor. Dar obținerea unei precizii ridicate în recunoașterea datelor video care sunt colectate în condiții necontrolate cu iluminare, unghi și dimensiune variate este încă dificilă.

„Rețeaua poate recunoaște cu o acuratețe de 100%, de exemplu, un actor celebru (numărul de imagini din rețea este de milioane). Dar asta nu înseamnă deloc că atunci când transferă cunoștințele acumulate într-o rețea neuronală, se adaptează și recunoaște o persoană pentru care este disponibilă o singură fotografie ca eșantion”, explică Andrey Savchenko, profesor la Departamentul de Sisteme și Tehnologii Informaționale la Școala superioară de economie din Nijni Novgorod.

Pentru a rezolva această problemă, cercetătorii HSE au folosit teoria mulțimilor fuzzy și teoria probabilității. Ei au dezvoltat un algoritm care poate crește semnificativ acuratețea (cu 2-6% față de experimentele efectuate anterior) de identificare a fețelor din video în timp real cu un număr limitat de imagini. Această soluție funcționează cu arhitecturile de rețele neuronale VGGFace, VGGFace2, ResFace și LightCNN.

Ca bază de testare, cercetătorii au folosit mai multe seturi de date tradiționale pentru a evalua metodele de recunoaștere a feței video - IJB-A (IARPA Janus Benchmark A) și YTF (YouTube Faces). Aceste seturi au inclus imagini disponibile public cu oameni celebri (actori, politicieni, persoane publice) care au fost colectate din surse deschise în condiții necontrolate în momente diferite. Algoritmul trebuia să recunoască fețele pe videoclipurile YouTube, folosind ca mostre mai multe fotografii ale acelorași oameni dintr-un alt set de date - LFW (Labeled Faces in the Wild). LFW a folosit o rezoluție mai mare și fotografiile au fost făcute în momente diferite, variind din anii 1970 până în anii 2010.

Modul în care funcționează această abordare este prin utilizarea informațiilor despre modul în care fotografiile de referință sunt legate între ele, și anume cât de aproape sau de departe sunt acestea una de cealaltă. Legătura (distanța în modelul matematic) între oameni asemănători este mai mică, iar între oameni diferiți este mai mare. Cunoașterea cât de diferiți sunt oamenii unul față de celălalt permite sistemului să corecteze erorile în procesul de recunoaștere a cadrelor video.

„Algoritmul evaluează cât de aproape este un cadru de o persoană și altul de altul. Apoi compară cât de asemănători sunt cei doi oameni unul cu celălalt. Apoi adaugă o a treia persoană și evaluează de cine este mai aproape - prima sau a doua. Pe baza acestei proximități, corectează încă o dată erorile de recunoaștere”, spune profesorul Savchenko.

Acum, acest algoritm a fost deja implementat pentru computerele desktop în Python, ceea ce vă permite să găsiți și să grupați fețele diferitelor persoane în albume foto, să estimați anul nașterii, sexul și alți parametri. A fost dezvoltat un prototip al unei aplicații Android care detectează vârsta și sexul persoanelor din fotografii și videoclipuri. Analiza unei galerii foto face posibilă evaluarea automată a gradului de activitate socială a utilizatorului și evidențierea prietenilor și rudelor apropiați. Pentru smartphone-urile moderne, aplicația prototip procesează 15 cadre pe secundă. Cercetătorii susțin că, datorită algoritmului dezvoltat, recunoașterea feței poate fi mai precisă.

Recunoașterea feței  este o problemă fundamentală în domeniul viziunii computerizate și un pas cheie către crearea de aplicații care pot recunoaște și distinge oamenii după chipul lor. Metodele de recunoaștere a feței au fost studiate activ în ultimii 20 de ani, timp în care s-au propus metode precise și eficiente care funcționează în anumite condiții.

Cu toate acestea, tehnicile moderne de recunoaștere a feței au obținut rezultate impresionante atunci când lucrați cu imagini de fețe medii și mari eficiența lucrului cu imagini mici este nesatisfăcătoare. Principala dificultate în recunoașterea fețelor mici (de exemplu, 10x10 pixeli în dimensiune) este lipsa detaliilor faciale pentru a le distinge de fundal. O altă problemă este că metodele actuale de recunoaștere a feței se bazează pe rețele neuronale convoluționale și folosesc hărți de caracteristici convoluționale cu o rată de eșantionare scăzută și un pas mare pentru a reprezenta o față (8, 16, 32), care pierd informații și sunt prea inexacte pentru a descrie mici. - imagini de dimensiunea .

Pentru a depăși aceste dificultăți pe calea unei recunoașteri mai bune, a fost propusă o rețea neuronală convoluțională universală bazată pe o rețea neuronală clasică generativă adversară. Este format din două subrețele: generatorŞi discriminator.

Generatorul folosește o rețea neuronală SRN (rețea super-rezoluție) pentru a crește rezoluția. Spre deosebire de upscaling biliniar, SRN nu adaugă artefacte imaginilor generate și îmbunătățește calitatea acestora datorită factorilor mari de scalare. În ciuda acestui fapt, atunci când foloseau SRN și alte rețele neuronale avansate, cercetătorii au primit imagini foarte neclare, fără detalii fine. Aceasta este o consecință a rezoluției foarte scăzute a imaginilor de intrare.

O rețea neuronală „îmbunătățită” a fost folosită pentru a restabili detaliile lipsă din imaginile rezultate și pentru a crea imagini precise de înaltă rezoluție pentru sarcinile de clasificare RN (rețea de rafinare). Imaginile finale și reale sunt trecute printr-un discriminator care determină dacă ambele imagini sunt reale sau create și dacă arată fețe sau nu. Feedback-ul determină generatorul să creeze imagini cu trăsături faciale mai precise.

Arhitectura rețelei neuronale

Mai întâi, să ne uităm la structura generatorului. Este format din două părți — Rețea neuronală SRN și rețea neuronală de îmbunătățire. Prima rețea neuronală crește rezoluția imaginii de intrare. Deoarece imaginile cu fețe mici nu au detalii și, de asemenea, din cauza influenței pierderii rădăcinii pătratice medii, imaginile generate de prima rețea neuronală sunt de obicei neclare. Prin urmare, se folosește o a doua rețea neuronală care îmbunătățește aceste imagini. În cele din urmă la discriminator se adaugă o ramură de clasificare pentru recunoașterea feței, care permite discriminatorului să clasifice fețele și alte obiecte, precum și să distingă între imaginile generate și cele reale.

Arhitectura generatoare și discriminatoare

Generator

Rețeaua neuronală îmbunătățită a generatorului are o arhitectură de rețea neuronală convoluțională. După fiecare strat convoluțional, cu excepția ultimului, s-a efectuat normalizarea (normalizarea lotului) și activarea ReLU.

Rețeaua neuronală SRN din generator crește rezoluția fragmentelor de imagine selectate de 4 ori. Fragmentele rezultate au fost neclare dacă fața era departe de cameră sau în mișcare. Îmbunătățirea rețelei neuronale prelucrează aceste fragmente şi produce imagini mai detaliate, în care discriminatorul poate recunoaște cu ușurință fețele.

Discriminator

Discriminatorul folosește rețeaua neuronală ca rețea neuronală principală VGG19, din care stratul de subeșantionare a fost îndepărtat pentru a elimina diferite operații de reducere a rezoluției. În plus, toate straturile complet conectate (adică f c6, f c7, f c8) sunt înlocuite cu două straturi paralele complet conectate fcGAN și fcclc. O imagine cu rezoluție crescută este furnizată la intrare. Ramura fcGAN oferă probabilitatea ca imaginea de intrare să fie reală, iar ramura fcclc oferă probabilitatea ca imaginea de intrare să conțină o față.

Funcția de pierdere

Pierdere per pixel: Intrarea generatorului este imagini mici neclare, nu zgomot aleatoriu. O modalitate naturală de a face imaginea de ieșire a generatorului aproape de cea reală este să utilizați eroarea pătratică medie rădăcină per pixel, care este calculată ca:

unde ILR și IHR denotă fragmente mici neclare (rezoluție scăzută) și imagini de înaltă rezoluție (rezoluție înaltă), respectiv, G1 — SNR rețea neuronală, G2 — îmbunătățirea rețelei neuronale, w  - Parametrii generatorului.

Pierderi adverse: Pentru a obține rezultate mai realiste, sunt introduse pierderi contradictorii, definite astfel:

Pierderea adversară forțează rețeaua neuronală să genereze detalii mai clare de înaltă frecvență pentru a „păcăli” Discriminatorul.

Pierderi de clasificare: Pentru a face mai ușor de recunoscut imaginile restaurate de generator, sunt introduse pierderi de clasificare. Formula de calcul a pierderilor de clasificare este următoarea:

Pierderile de clasificare sunt utilizate din două motive. În primul rând, ele permit Discriminatorului să determine dacă imaginile reale și generate conțin fețe sau nu. Și în al doilea rând, stimulează generatorul să creeze imagini mai detaliate.

Funcția obiectivă: pierderile adverse și de clasificare sunt incluse în pierderile rms per pixel. O rețea neuronală adversară generativă poate fi antrenată folosind o funcție obiectivă. Pentru un comportament mai bun în gradient, funcțiile de pierdere ale Generatorului G și Discriminatorului D au fost modificate după cum urmează:


Prima ecuație constă din pierderi adverse, pătrate medii și de clasificare, ceea ce face ca imaginile reconstruite să fie similare cu imaginile reale de înaltă rezoluție la nivelurile de detaliu de înaltă frecvență, pixeli și, respectiv, semantic. Funcția de pierdere discriminator D din a doua ecuație adaugă o pierdere de clasificare pentru a determina dacă fețele sunt prezente în imaginile de înaltă rezoluție. Adăugând pierderi de clasificare, imaginile reconstruite ale Generatorului sunt mai realiste decât rezultatele optimizate folosind pierderi adverse și pătrate medii.