Dezvoltarea bruscă a rețelelor de socializare a dus la crearea unor instrumente ce au ca scop monitorizarea conținutului scris publicat în cadrul acestora. Soluțiile acestea software devin ineficiente atunci când sunt puse să analizeze un context bogat vizual, dar sărac în ceea ce privește informația scrisă.
Principalul scop al domeniului computer vision este recunoașterea obiectelor, iar recunoașterea de logo-uri este considerată parte din aceasta. Chiar dacă problema este una deja studiată, taskul de a depăși state of the art-ul actual nu este unul obișnuit.
Recunoașterea de logo-uri este o problemă importantă în cadrul protejării proprietății intelectuale, dar ea poate fi întâlnită și în plasamentul de reclame și validarea acestuia și în managementul online al brandurilor. Drept urmare, prin găsirea unei soluții viabile, putem acoperi mai multe domenii care își centrează activitatea în jurul celor mai sus menționate.
Content Marketing Institute afirmă că 63% din postările în cadrul rețelelor de socializare sunt conțin imagini, iar în termen de vizualizări conținutul care înglobează imagini are cu 94% mai multe accesări decât cel fără. Astfel, putem afirma cu multă siguranță că imaginile domină rețelele de socializare.
Odată cu brusca evoluție a mediei sociale moderne de la începutul anilor 2000, companiile au introdus mijloace de urmărire a conținutului scris pentru rețele de socializare ca Facebook, Twitter etc. . Uneltele devin redundante în cazul în care imaginile nu sunt acompaniate de scris. Fără capacități de interpretare vizuale, aceste imagini își pierd valoarea, iar odată cu aceasta marii producători pierd și informație importantă. Fenomenul este întâlnit în cadrul rețelelor ca Instagram, Pinterest, care sunt masiv dominate de conținut vizual, dar în ultimii ani chiar și Facebook și Twitter au evoluat spre o strategie similară.
Dacă analizăm cazul Instagramului, unde softuri specializate ar putea extrage informația doar din hashtaguri sau puținul scris asociat imaginii, se poate ușor lua în calcul faptul că utilizatorul ar putea asocia greșit un hashtag. Drept urmare, ar putea apărea neconcordanțe între conținutul scris și cel vizual.
Oricare companie are o serie de utilizatori care sunt cu adevărat pasionați cu privire la brand într-o asemenea măsură încât devin promotori pentru el. Această categorie este cea care distribuie și creează material nou menit să promoveze într-un mod pozitiv sau negativ produsele brandului.
Industria marketingului poate beneficia mult dacă un produs software este capabil să identifice logo-ul brandului tău și să te alerteze în cazul în care postările sunt negative. Astfel posibile controverse pot fi evitate înainte de a începe.
De aceea, problema ce se dorește a fi rezolvată are ca scop final recunoașterea mai multor logo-uri ale unor companii celebre. Ea se împarte în două taskuri mari și anume: detecția și recunoașterea logo-urilor.
În cadrul detecției, scopul principal este identificarea instanțelor ce descriu un logo în cadrul imaginilor sau a video-urilor.
Procesul de recunoaștere se referă la încadrarea unei instanțe ce reprezintă un logo în una din cele "n" categorii pe care un algoritm a fost antrenat.
Câteva din rezultatele ce au la bază arhitecturi neuronale menite să recunoască logo-urile au fost publicate la sfârșitul anilor '90. Rețelele neuronale au jucat un rol important în cadrul detectării de logo-uri. O astfel de rețea neuronală recurentă a fost folosită pentru clasificarea logo-urilor alb negru. Pentru detectarea watermarkurilor la televiziune s-a încercat folosirea unui rețele neuronale convenționale cu două straturi de convoluție.
Luând în considerare faptul că problema de clasificare s-a încercat a fi rezolvată folosind rețele neuronale, dar din cauza faptului că arhitectura normală de straturi în totalitate interconectate nu a dat rezultate remarcabile, s-a încercat o altă abordare. Astfel s-a ajuns la rețele neuronale convenționale, a cărei natură permite să ia în considerare spațialitatea unei imagini. Spre exemplu, ea nu tratează pixelii de intrare care sunt depărtați unul de celălalt la fel ca pe cei apropiați. Din cauza acestui fapt, o astfel de alegere se pretează foarte bine pentru clasificarea de imagini. Rețelele neuronale care folosesc convoluții au trei idei de bază: local receptive fields, shared weights, și pooling.
Local receptive fields sunt ferestre de pixeli de dimensiune pătrată folosite pe stratul de input al rețelei, aceasta își schimbă poziția în care se află mutându-se mai la dreapta sau în jos cu un număr de coloane sau rânduri, în funcție de dimensiunea stride-ului. Numărul de pixeli cu care se mută local receptive fields este numit stride. Acesta de regulă are valoare 1, dar se poate experimenta și cu alte valori. Fiecare element din cadrul ferestrei se leagă de un neuron de pe un strat ascuns imediat următor, având un weight și un bias general pentru fiecare fereastră. Elementele obținute de la fiecare pixel sunt puse într-o sumă, acestea numindu-se feature maps. Toate weighturile și, respectiv, baisurile ce ajung într-o structură ca aceasta, sunt numite shared weights și shared bias. În final, în cadrul unui neuron de pe stratul ascuns imediat următor se află valoarea sumei:
unde sigma este o funcție de activare ca cea sigmoidală sau rectified linear untis (ReLU), cea din urmă fiind folosită în cadrul algoritmului și n este dimensiunea ferestrei. Se deduce astfel, că toți neuronii din primul strat ascuns detectează aceleași caracteristici doar că la locații diferite ale imaginii de input.
În idei puțin mai clare, să presupunem că weighturile și bias-ul sunt de o așa natură că pot selecta trăsături drept colțuri verticale într-un anume receptive field. Această abilitate dobândită e posibil să fie utilă și în alte locuri ale imaginii. Astfel este util să aplicăm același detector de caracteristici peste tot în cadrul imaginii.
Un strat de pooling simplifică informația primită ca output de la stratul de convoluție. Acest procedeu urmează de regulă imediat după stratul de convoluție. Stratul de pooling constă în crearea unei ferestre de o dimensiune n x n care se mișcă în cadrul inputului colectând o anumită valoare. Unde n este dimensiunea ferestrei, aceasta putând fi diferită de cea din cadrul local receptive fieldsurilor. În cazul acesta am folosit max pooling, unde dintr-o regiune se ia valoarea maximă.
Figura 1: Operația de max pooling având dimensiunea 2x2. Din acesta se extrage elementul maxim.
Ultimul strat al unei rețele de tipul acesta este conectat în totalitate, astfel fiecare neuron provenit de pe stratul de pooling este conectat cu fiecare neuron din stratul final.
Pentru ca o rețea de tipul acesta să fie eficientă trebuie să existe mai multe straturi de convoluție și mai multe de pooling. De asemenea, un feature map nu este suficient pentru a face recunoaștere de imagini. Foarte important de menționat în acest caz este că dacă lucrăm cu imagini color vom avea trei caracteristici de tip input pentru fiecare pixel, corespunzând canalului roșu, verde și albastru, toate acestea find adiționale feature map-urilor deja existente.
Figura 2: Schema unei rețele convoluțională aplicată peste o imagine color (cu 3 canale: RGB), având un singur strat de convoluție fiind descrise 3 feature maps, urmate de un strat de max pooling cu un număr egal de feature maps ca cel anterior. De asemenea, este vizibil și stratul final în întregime conectat cu fiecare pixel din stratul de pooling³.
Deoarece acest experiment vizează învățarea supervizată vom folosi baza de date FlickrLogos-32. Acest cluster de imagini adnotate conține logo-uri pentru 32 de branduri diferite, fiind alcătuit din 8240 de imagini, dintre care 4280 pentru antrenare și 3960 pentru testare. Toate imaginile au o etichetă care reflectă brandul prezentat.
Antrenamentul a fost făcut folosind o rețea VGG19 pre-antrenată pe setul de date ImageNet. CNN-ul este scris în Tensorflow folosind Python ca limbaj de programare. Această rețea va fi folosită exclusiv pentru cerința de recunoaștere.
VGG19 este constituit din mai multe straturi de convoluție urmate de max pooling, iar la final avem trei straturi în totalitate conectate. Ultimul strat este cel decizional pe care este aplicat o funcție softmax pentru a obține unt tensor 32 de probabilități. Acestea reprezentând predicțiile făcute de algoritm pentru o anumită imagine. În general, tensorul conține același număr de clase ca cele definite la începutul antrenamentului. Deoarece algoritmul inițial a fost pre-antrenat pe ImageNet, stratul decizional returna un tensor cu 1000 de probabilități. Am schimbat acest lucru tăind stratul decizional și weighturile aferente și în final reantrenând pentru doar 32 de clase.
Figura 3: Reprezintă arhitectura rețelei VGG19 cu straturile de convoluție urmate de operația de max pooling, în final având 3 straturi în tonalitate conectate, dintre care unul e strat decizional.
Singurele preprocesări făcute pe imagini au fost decuparea logo-urilor pentru a minimiza zgomotul, urmată de o redimensionare a setului de date la 224x224 păstrând proporțiile inițiale.
Antrenarea folosește batches a câte 10 imagini, rata de învățare de 0.001, iar pentru a diminua overfittingul, algoritmul folosește un dropout cu valoarea de 0.5. Am decis ca la anumite valori ale lossului acuratețea algoritmului să fie verificată, iar în tabelul de mai jos sunt menționate valorile obținute. Pentru un loss în valoare de 0.01 am obținut un procent de acuratețe de ≈81%. După ce am lăsat algoritmul să conveargă, acuratețea a crescut la 91.2%.
Mai jos în Figura 4, am inserat rezultatele oferite în urma evaluării imaginii din partea dreaptă. Rezultatele prezintă o listă de probabilități ordonate descrescător, ultimul element având cea mai mare probabilitate, poziția lui în final determină și clasa din care face parte imaginea. Imaginea dată ca input a fost recunoscută cu o probabilitate de 99.9%.
Figura 4: Prezintă rezultatele obținute în urma evaluării produsului "Ritter Sport" din dreapta.
În concluzie, calitatea și varietatea setului de date este importantă, dar trebuie luat în considerare faptul că un brand poate avea mai mult variații ale logo-ului. De exemplu, Disney în ultimii 27 de ani și-au schimbat logo-ul de mai mult de 30 de ori. Doar imaginați-vă cum ar trebui să arate un set de date care ar include companii ca Disney.
Datorită faptului că am ales să rezolvăm doar partea de recunoaștere a problemei pentru imaginile venite ca input, se face un crop central care se trimite spre evaluare. Dacă acesta nu conține o parte a logo-ului, algoritmul nu va clasifica corect inputul. Totodată algoritmul funcționează doar pe variațiile de logo-uri pe care a fost antrenat. De aceea, VGG19 nu va recunoaște produse ce conțin noul logo "Adidas".