SPECIALIZAREA: ELECTRONICĂ APLICATĂ PRELUCRAREA DE IMAGINI PENTRU DETECȚIA ȘI CLASIFICAREA TIPURILOR DE FLORI Îndrumător proiect, Sl. Dr. Ing…. [308531]
[anonimizat]. Laurențiu BAICU
Absolvent: [anonimizat]
2019
SPECIALIZAREA: [anonimizat]. Laurențiu BAICU
Absolvent: [anonimizat]2019
Anexa 1 la Regulamentul de întocmire a proiectelor de diplomă și a lucrărilor de disertație
Departamentul Elctronică și Telecomunicații
PROIECT DE DIPLOMĂ
Numele si prenumele absolvent: [anonimizat]: Niculai Silviu Traian
Domeniul / Specializarea: [anonimizat]/ Electronică Aplicată.
Tema proiectului de diplomă: PRELUCRAREA DE IMAGINI PENTRU DETECȚIA ȘI CLASIFICAREA TIPURILOR DE FLORI
Conducător științific: Sl. Dr. Ing. Baicu Laurențiu Consultant de specialitate:
Data primirii temei:
La elaborarea proiectului de diplomă se va respecta Regulamentul de întocmire a proiectelor de diplomă și a [anonimizat]-ul facultății http://www.aciee.ugal.ro/studenti/finalizare-studii/regulamente-si-[anonimizat]: [anonimizat] 2 la Regulamentul de întocmire a proiectelor de diplomă și a lucrărilor de disertație
Nr. _____/__________________
Aprobat,
[anonimizat], absolvent a [anonimizat], [anonimizat], [anonimizat], specializarea (licență) [anonimizat] 2015-2019, [anonimizat] 2019.
Am ales proiectul de diplomă cu titlul „ PRELUCRAREA DE IMAGINI PENTRU DETECȚIA ȘI CLASIFICAREA TIPURILOR DE FLORI” sub îndrumarea Sl. Dr. Ing. Baicu Laurențiu.
Am citit cu atenție REGULAMENTUL DE ÎNTOCMIRE A PROIECTELOR DE DIPLOMĂ ȘI LUCRĂRILOR DE DISERTAȚIE și l-am respectat integral.
Data: __________________________ Semnătura ____________________________
Viza îndrumătorului proiectului/coordonatorului lucrării__________________________
Viza Directorului de departament ce coordonează programul __________________
Anexa 3 la Regulamentul de întocmire a proiectelor de diplomă și a [anonimizat]: [anonimizat], Calculatoare, [anonimizat] “Dunărea de Jos” [anonimizat] 2015-2019, [anonimizat] „ PRELUCRAREA DE IMAGINI PENTRU DETECȚIA ȘI CLASIFICAREA TIPURILOR DE FLORI” este elaborat de mine și nu a mai fost prezentat niciodată la o altă facultate sau instituție de învățământ superior din țară sau străinătate. [anonimizat], [anonimizat]/lucrare, cu respectarea regulilor de evitare a plagiatului.
“Plagiatul: [anonimizat], procedurilor, tehnologiilor, [anonimizat], prezentându-le drept creație proprie.”
Am luat la cunoștință că prezentarea unui proiect plagiate va conduce la anularea diplomei de licență.
Lucrarea conține un număr de 46 pagini.
Data: ________________ Semnătura ____________________________
Anexa 4 la Regulamentul de întocmire a proiectelor de diplomă și a lucrărilor de disertație
ACORD PRIVIND TRANSFERUL REZULTATELOR PROIECTULUI DE DIPLOMĂ
Subsemnatul, Niculai Silviu Traian, absolvent al Facultății de Automatică, Calculatoare, Inginerie Electrică și Electronică, din cadrul Universității “Dunărea de Jos” din Galați, promoția 2015-2019, specializare Electronică Aplicată,
NU SUNT DE ACORD * să cedez rezultatele software și hardware – aferente proiectului de diplomă– în favoarea Facultății de Automatică, Calculatoare, Inginerie Electrică și Electronică, din cadrul Universității “Dunărea de Jos” din Galați, pentru creșterea dotării materiale a facultății și în folosul exclusiv al studenților.
Proiectul conține următoarele:
Partea hardware compusă din: Laptop Lenovo Legion Y720, smartphone/ camera web a laptop-ului.
Partea software compusă din: MATLAB 2018a, MATLAB 2018b, IP Webcam.
Data: ________________ Semnătura ____________________________
Notă:
* Se taie (bifează), după caz
Anexa 5 la Regulamentul de întocmire a proiectelor de diplomă și a lucrărilor de disertație
Departamentul __________________________________________________________________________
Sesiunea:_________________________________________________________________________________
REFERAT DE EVALUARE
a proiectului de diplomă / lucrării de disertație cu titlul ________________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Elaborat (ă) de absolventul _______________________________________________________________________
Perioada de documentare și pregătire ___________________________________________________________
Conținutul proiectului _____________________________________________________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Contribuții personale ale autorului _______________________________________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Respectă regulile de întocmire și redactare? DA / NU *
Se propune ADMITEREA / RESPINGEREA proiectului / lucrării pentru susținerea publică.
Nota propusă _________________________ (această notă nu va fi luată în calculul mediei finale)
Data, Conducător științific,
Notă:
* Se taie (bifează), după caz
Conducător științific,
REZUMAT
În acestă lucrare, s-a dezvoltat o rețea neuronală convoluțională cu scopul de a ajuta la rezolvarea diferitelor probleme de clasificare. S-a pornit de la o rețea neuronală artificială, care a fost folosită pentru clasificarea a 1000 de clase. Această rețea a fost adaptată și îmbunătățită pentru clasificarea unei singure clase, dar care conține mai multe subclase. Folosind o camera video, conectată wireless, rețeaua neuronală trebuie să fie capabilă să clasifice corect cele 102 specii de flori din baza de date și să afișeze textul “Not a flower” (Nu este o floare) în cazul în care, camera indentifică altceva decât o floare cum ar fi un obiect, persoană, etc.
Suplimentar, pentru a nu fi nevoie de MATLAB, am realizat și o aplicație, cu ajutorul extensiei “Application Compiler” din MATLAB, care conține “creierul” rețelei neuronale și care poate fi folosită de orice mașinărie, dacă se folosește conexiunea directă, cu o camera web și cu un sistem de operare windows.
Prin pornirea aplicației, aceasta va realiza o conexiune direct cu camera sau o conexiune wireless dacă se va folosi aplicația IP Webcam.
Rețeaua neuronală este realizată din 5 straturi convoluționale și 3 straturi complet conectate. Inițial, rețeaua a fost antrenată pe 51 de clase, adică aproximativ 108 000 imagini, iar rezultatul obținut a fost unul acceptabil (75.14%) pentru timpul de antrenare (cu cât rețeaua are mai multe staturi și clase/imagini cu atât este nevoie de mai mult timp pentru antrenare și putere de procesare).
Pentru realizarea acestei lucrări am utilizat:
Laptop Lenovo Legion Y710, I7-2.8 GHz, NVIDIA GTX 1060 6GB VRAM, 24 GB RAM
MATLAB 2018a
MATLAB 2018b (modificarea rețelelor neuronale este mai ușoară prin folosirea unei interfețe adaugate în această versiune)
IP Webcam
Smartphone
Pe viitor, lucrarea poate fi dezvoltată suplimentar și folosită în proiecte mai complexe unde se urmărește folosirea rețelelor neuronale atât pentru identificarea speciilor de flori cât și pentru comandarea echipamentelor dintr-o seră automatizată în vederea obținerii unui mediu ambiant propice pentru fiecare specie.
CUPRINS
LISTA FIGURILOR
Fig. 1.1: Domeniile în care este folosită prelucrarea de imagini 2
Fig. 1.2: Progresul validării dintre învățarea prin transfer și antrenarea de la zero pentru rețeaua lui Mario Lasseck[6] 3
Fig. 1.3: Detectarea ROI în imaginile cu flori[1] 4
Fig. 1.4: Rezultatele obținute pentru GoogleNet 5
Fig. 1.5: Rata de predicție a celor 3 5
Fig. 1.6: Acuratețea clasificatorilor folosiți în [8] 6
Fig. 1.7: Prezentarea sistemului propus în [12] 7
Fig. 2.1: Topologia unei rețele neuronale feed-forward 9
Fig. 2.2: Complexitatea caracteristicilor extrase la fiecare strat de catre o rețea 10
Fig. 2.3: Procesul de lucru al unei rețele neuronale convoluționale 11
Fig. 2.4: Exemplu de rețea neuronală cu mai multe straturi convoluționale 12
Fig. 2.5: Arhitectura simplificată a unei rețele neuronale convoluționale [17] 13
Fig. 2.6: Explicarea stratului de convoluție 13
Fig. 2.7: Explicarea stratului de convoluție 14
Fig. 2.8: Rezultatul obținut în urma procesului de convoluție 14
Fig. 2.9: Operația de max pooling 15
Fig. 2.10: Operația de max pooling asupra unei imagini 15
Fig. 2.11: Funcția de activare ReLU 17
Fig. 2.12: Repartiția probabilității într-un exemplu de către funcția Sotfmax 17
Fig. 2.13: Training from Scratch vs. Transfer Learning 19
Fig. 3.1: Exemple de imagini din setul de 102 clase 21
Fig. 3.2: Exemple de imagini din setul segmentat 22
Fig. 3.3: Distribuția imaginilor in setul de date 23
Fig. 3.4: Exemplu de redimensionare 24
Fig. 3.5: Arhitectura rețelei AlexNet 25
Fig. 3.6: Diagrama unui bloc residual cu “identity mapping” 26
Fig. 3.7: Arhitectura rețelei ResNet50 27
Fig. 3.8: Modul Inception 28
Fig. 3.9: Reprezentarea graphică pentru înlocuirea filtrelor de dimensiuni mari 29
Fig. 3.10: Arhitectura rețelei VGG 16 30
Fig. 3.11: Arhitectura rețelei 30
Fig. 3.12: Opțiunile pentru antrenarea rețelei 31
Fig. 3.13: Caracteristicile învățate în primul strat convoluțional din rețea 31
Fig. 3.14: Interfața noii abordări 32
Fig. 3.15: Exemplu de clasificare corectă folosind noua interfață 33
Fig. 3.16: Secțiune din codul sursă pentru realizarea aplicației 33
Fig. 4.1: Testul nr. 1 pentru AlexNet 34
Fig. 4.2: Testul nr. 2 pentru AlexNet 35
Fig. 4.3: Rezultatul antrenării rețelei ResNet50 35
Fig. 4.4: Rezultatul obținut în urma antrenării rețelei GoogleNet 36
Fig. 4.5: Rezultatul obținut în urma antrenării rețelei VGG16 37
Fig. 4.6: Matricea de confuzie pentru 15 clase 37
Fig. 4.7: Graficul de antrenare pentru rețeaua antrenată de la zero 38
Fig. 4.8: Rezultatul obținut pentru fiecare test 38
Fig. 4.9: Exemplu de validare unde toate rezultatele sunt corecte 40
Fig. 4.10: Exemple de validări live greșite 40
Fig. 4.11: Exemplu de eroare unde fluctuațiile de culoare influențează rezultatul 41
Fig. 4.12: Alte exemple de clasificare 42
Fig. 4.13: Rezultatele obținute de rețea folosind imagini imprimate 43
LISTA TABELURILOR
Tabelul 1: Datele necesare pentru reproducerea testelor 39
INTRODUCERE
Deep learning-ul este o tehnică de învățare a mașinăriilor care ajută calculatoarele să se dezvolte folosind un principiu similar ca cel folosit de oameni în mod natural: învățatul din experiență. Deep learning-ul este o tehnologie cheie în spatele mașinilor fără șofer, permițându-le să recunoască un semn de oprire sau să distingă un pieton de o lampă. Este cheia controlului vocal în dispozitivele de consum, cum ar fi telefoanele, tabletele, televizoarele și difuzoarele hands-free. Deep learning-ul are o atenție deosebită în ultima vreme și pentru un motiv foarte bun. Obține rezultate care nu au fost posibile înainte.
Identificarea plantelor este o sarcină importantă pentru cercetători, studenți și practicieni în domeniul agriculturii, pădurilor, protecției biodiversității și așa mai departe. Recent, datorită cercetărilor avansate din domeniul viziunii computerice, o serie de lucrări au fost dedicate identificării automate a plantelor pe baza imaginilor organelor plantelor (de exemplu frunze, fructe, tulpini, flori). Dintre acestea, imaginea creată de flori joacă un rol important pentru identificarea plantelor, deoarece aspectele ei (culoare, formă, textură) sunt deosebit de distinctive. Aspectul florilor sunt stabile și mai puțin invariante de condițiile meteorologice sau vârsta plantei. În opinia experților botanici, imaginile cu flori sunt, prin urmare, cea mai valoroasă sursă pentru sarcina de identificare a plantelor. Cu toate acestea, pentru a dezvolta un sistem automatizat de identificare a plantelor pe baza imaginilor de flori, tehnicile propuse se confruntă cu multe provocări, cum ar fi similitudinea între clase, variații de lumină și culoare, dar și unghiul de captură, dezordinea din fundal și deformări ale obiectelor.
Abordările asupra identificării florilor, de obicei constau în patru etape:
preprocesare
segmentare
extragerea caracteristicilor
clasificare
Dar datorită faptului că imaginile cu flori au un fundal complex, aceste etape sunt consumatoare de timp și precizia obținută este încă scăzută, în special cu un număr mare de clase. Recent Rețelele Neuronale Convoluționale (CNN sau ConvNet) prezintă o serie de succese în diferite teme din domeniul viziunii computerice, cum ar fi detectarea obiectelor, segmentarea si clasificarea imaginilor. [1]
În această lucrare voi dezvolta o rețea neuronală, explicații asupra arhitecturii, rezultatele antrenării și compararea lor cu alte rețele pre-antrenate pe același tip de date, avantajele și dezavantajele antrenării unei rețele neuronale proprii, metode de a îmbunătăți o rețea, precum și observațiile din timpul testelor.
PREZENTARE GENERALĂ ȘI DIVERSE ABORDĂRI
Conform lucrării intitulate „Leaf and Flower Recognition Using Preferential Image Segmentation Algorithm” de N. Valliammal și S.N. Geethalakshmi, publicată în 2011, procesarea digitală a imaginilor constă în utilizarea unor algoritmi și a unor proceduri pentru operațiuni cum ar fi îmbunătățirea imaginii, comprimarea imaginilor, analiza imaginii, cartografiere, etc.[2] Recent influența și impactul imaginilor digitale asupra societății moderne a devenit enormă și este considerată ca o componentă critică în varietatea de domenii în care se aplică, inclusiv recunoașterea unui tipar, viziunea pe calculator, industriile de automatizare și de asistență medicală. Subiectele legate de prelucrarea imaginilor pot fi clasificate după cum urmează: imagistică, restaurarea imaginii, codarea imaginii, segmentarea imaginii, transformarea imaginii, reprezentarea obiectului și recunoașterea lui, și recuperarea imaginilor cu conținutul de bază.
Fig. .: Domeniile în care este folosită prelucrarea de imagini
ImageCLEF/PlantCLEF
ImageCLEF reprezintă un concurs care a fost lansat în 2003 ca parte a forumului de evaluare a limbilor străine (Cross Language Evaluation Forum) și conține are mai multe secțiuni printre care și PlantCLEF care se ocupă cu clasificarea speciilor de plante folosind inteligența artificială. Principalul obiectiv al acestui concurs este de a spirjini dezvoltarea în domeniul analizei și al clasificării prin dezvoltarea infrastructurii necesare pentru evaluarea sistemelor de recuperare a informațiilor din imagini.
Abordarea câștigătorului
Mario Lasseck, câștigătorul PlantCLEF 2017, a obținut o acuratețe de 91% în cadrul concursului. Pentru a ajunge la acest rezultat, Mario Lasseck a ales o metodă des folosită azi si anume învățarea prin transfer (transfer learning) pe trei rețele neuronale populare pentru rezultatele lor:
GoogLeNet [3]
ResNet [4]
ResNeXT [5]
GoogLeNet și ResNeXT au fost pre-antrenate pe setul de date ILSVRC care conține 1000 de clase cu un total aproximativ de 1.2 milioane de poze, iar ResNet a fost antrenat pe o baza de date de zece ori mai mare care conține 11k clase. Pentru antrenare a folosit o rată de învățăre fixa de 0.01 care scade scade cu 2-10 factori de multiplicare oricând acuratețea se oprește din a mai crește. Ca și optimizator a folosit Stochastic Gradient Descent (SGD) pentru rețelele ResNet și ResNeXT și Nesterov’s Accelerated Gradien (NAG).
Alte abordări folosind deep learning
În [1] s-a ales o metodă interesantă pentru preprocesarea setului de date și anume segmentarea pozelor folosind saliency-segmentation sau saliency map (are ca scop simplificarea unei imagini pentru a fi mai ușor de analizat prin reprezentarea pixelilor cu calități unice într-o imagine separată) pentru a selecta doar regiunea de interes (ROI –Region Of Interest) din poze.
Pentru rezolvarea problemei de clasificare s-au ales trei rețele neuronale convoluționale pre-antrenate cu arhitecturi diferite pe care s-a folosit tehnica de transfer learning:
AlexNet [7]
Caffenet [8]
GoogLeNet
Pentru antrenare s-a folosit setul de date PlantCLEF 2015 din care 27.975 imagini au fost folosite pentru antrenare, 8.327 imagini pentru validare și 967 imagini pentru test, iar ca rată de învățare s-a folosit 0.001 cu pasul 10000 și numărul de loturi a fost 5. În urma primului test, GoogleNet a obținut o acuratețe de 66.60%, urmată de Caffenet cu 54,84% și Alexnet cu 50.60%, iar după testul numărul 10, GoogleNet a obținut o acuratețe de 90.82% pe imaginile neprelucrate și 90.23% pe imaginile prelucrate.
Lucrarea [9] are un grad de dificultate mai ridicat deaoarece foloseșe caracteristici multiple pentru definirea unei categorii de flori cum ar fi: culoarea, textura, forma, modele binare locale (un proces prin care fiecarui pixel i se atribuie un numar binar), histograma gradienților orientați [10], segmentarea și concatenarea caracteristicilor globale. Setul de date ales pentru antrenare este FLOWERS17 la care s-au mai adaugat încă 11 clase. Setul de date conține 2240 de imagini cu 1680 pentru antrenare și 560 pentru test. Pentru clasificarea imaginilor s-au folosit parametrii învățați de rețeaua OverFeat unde a fost înlocuit doar ultimul nivel (Fully connected layer). Rețeaua OverFeat acceptă doar imagini cu un format 231x231x3, unde 231 reprezintă înălțimea respectiv lățimea, iar 3 reprezintă canalul de culoare RGB.
În urma testelor au fost folosiți mai multi clasificatori, iar cel mai slab rezultat pentru clasificatorul Logistic Regression [11] a fost de 82.32% iar cel mai bun a fost de 97.5%, urmat de 72% și 94.82% pentru clasificatorul Random Forest.
Fig. .: Acuratețea clasificatorilor folosiți în [8]
Clasificarea folosind Random forests
În lucrarea [12], pentru prelucrarea setului de date s-a ales metoda GrabCut [13], un tip de segmentare semi-automată bazată pe un algoritm de tăiere în graf. Scopul unei segmentări este de a subdiviza o imagine în regiuni și, astfel, de a simplifica reprezentarea acesteia. În cazul nostru, vom lua în considerare două tipuri de regiuni: regiuni de obiect și regiuni de fundal. Ieșirea este o imagine binară cu o valoare reprezentând un "obiect", iar cealaltă, un "fundal". Ambele segmente "obiect" și "fundal" pot fi compuse din mai multe părți izolate. Fiecare regiune conține pixeli cu anumite caracteristici comune. Segmentele create în acest fel trebuie să corespundă datelor de intrare, iar imaginea binară de ieșire poate fi mai ușor de analizat. Astfel, obiectivul tăierii în graf este de a separa obiectul de care avem nevoie de fundalul imaginii.
Pentru extragerea caracteristicilor s-a decis folosirea culorii ca și caracteristică principală. Folosind 8 „dulăpioare ” (bins sau buckets) pentru fiecare canal de culoare RGB au ajuns la 512 dimensiuni vectoriale. Pentru rezolvarea problemei de clasificare s-a ales Random Forest Classifier, care funcționează sub forma unei multitudini de arbori decizionali. În urma testelor, pe un set de date cu 15 clase cu 100 de imagini fiecare clasă, s-a obținut o acuratețe de 86.14%.
Fig. .: Prezentarea sistemului propus în [12]
TEHNOLOGII FOLOSITE
Acest capitol este unul teoretic destinat explicării pe scurt a noțiunile teoretice ce au fost folosite pentru a realiza și îmbunătăți o rețea neuronală, felul în care funcționează aceasta, precum și a metodele de instruire folosite pentru rezolvarea problemei de clasificare. Pe baza informațiilor obținute din acest capitol, ar trebui să înțelegem cum funcționează elementele care alcătuiesc o arhitectură de rețea și ce metodă de instruire este mai optimă pentru folosire în funcție de complexitatea problemei adresate.
Rețele Neuronale Artificiale
Rețelele neuronale artificiale (RNA) reprezintă un sistem de procesare a informației, a cărui mecanism este inspirat din circuitele neuronale biologice. Rețeua neuronală în sine nu este un algoritm, ci un framework (ansamblu ce conține mai multe scripturi ce se aplică unui singur tip de problemă) pentru diferiți algoritmi de machine learning care lucrează împreună pentru procesarea unor date de intrare complexe. Asemenea sisteme învață să execute sarcini folosindu-se de exemple, fără a fi programate specific în acest sens. De exemplu, în recunoașterea imaginilor, sistemele pot învăța să identifice un anumit tip de obiect prin simpla analiză a unor imagini ce au fost etichetate cu numele acelui obiect și folosind rezultatele pentru a identifica în alte imagini acel obiect. Acest proces se realizează făra ca sistemul să dețină cunoștinte anterioare despre obiect, cum ar fi culoare, formă sau alte caracteristici specifice.
Rețelele neuronale artificiale au în componență 3 elemente: modelul adoptat pentru elementul de procesare individual (neuronul), structura particulară de interconexiuni (arhitectura care poate fi descrisă prin numărul de neuroni, numărul de straturi și tipul de conexiuni dintre straturi) și mecanismul de ajustare a legaturilor dintre neuroni (algoritmul de învățare).
Rețeaua de tip feed-foward cu mai multe straturi este cea mai cunoscută. Rețeaua este realizată dintr-un strat de intrare, unul sau mai multe straturi ascunse și un strat de ieșire. Fiecare strat poate deține un număr diferit de neuroni și fiecare strat este conectat aleator de stratul anterior. În această rețea, informațiile se deplasează într-o singură direcție, înainte, de la nodurile de intrare, prin nodurile ascunse (dacă există) și prin nodurile de ieșire. Nu există cicluri sau bucle în rețea. Într-o rețea de tip feed-forward, informația poate fi trimisă doar înainte, de la stratul de intrare, prin straturile ascunse și apoi la stratul de ieșire. Datorită acestui lucru informația nu atinge niciodată un nod de două ori. Rețelele cu mai multe straturi utilizează o varietate de tehnici de învățare, cele mai populare tehnici fiind cele de propagarea înapoi. Aici, valorile de ieșire sunt comparate cu răspunsul corect pentru a calcula valoarea unei funcții de eroare predefinite. Prin diverse tehnici, eroarea este trimisă înapoi prin rețea. Folosind aceste informații, algoritmul ajustează ponderile fiecărei conexiuni pentru a reduce valoarea funcției de eroare cu o valoare relativ mică. După repetarea acestui proces de mai multe ori, rețeaua ajunge într-o stare în care funcția de eroarea este mică.
Pentru rețeaua principală folosită în acestă lucrare s-a folosit modelul de rețea de tip feed-forward cu mai multe straturi ascunse.
Tehnologia Deep learning
Deep learning-ul reprezintă o clasă de algoritmi de învățare a mașinăriilor care:
folosește o multitudine de staturi nelineare pentru extracția și transmformarea caracteristicilor. Fiecare strat succesiv folosește ieșirea stratului anterior ca intare
învață într-o manieră supravegheată
învață multiple niveluri de reprezentare care corespund unor niveluri diferite de abstractizare. Niveluri formează o ierarhie de concepte [14]
Cuvântul „deep” din „deep learning” se referă la numărul de straturi prin care datele trec pentru a fi transformate. Fiecare nivel învață să-și transforme datele de intrare într-o reprezentare mai asbtractă și mai compusă. Într-o aplicație de recunoaștere a imaginii, datele de intrare poat fi o matrice de pixeli; primul strat reprezentant poate abstracționa pixelii și poate codifica marginile; cel de-al doilea strat poate compune și codifica aranjamentele marginilor; cel de-al treilea strat poate codifica un nas și ochi; iar al patrulea strat poate recunoaște că imaginea conține o față. Un proces de „deep learning” poate afla ce caracteristi sunt importante de învățat și la ce nivel este optim să învețe acel lucru [15]. În rețelele neuronale de învățare produndă, fiecare strat ascuns învață noi caracteristici distince bazate pe informația primită de la stratul precedent. Pe baza informațiilor acestora putem construi o reprezentare ierarhică a caracteristicilor care va arată astfel: pixel, margine(se poate observa în capitolul 3.3.1), textură, parte, obiect. În alte cuvinte, cu cât arhitectura rețelei conține mai multe straturi ascunse, cu atât ea este mai profundă sau “deep”.
Data mining
Extragerea datelor sau „data mining” este procesul de descoperire a tiparelor în seturi de date mari. Explorarea datelor este un subdomeniu al informaticii și statisticii, cu scopul general de a extrage informații dintr-un set de date și de a transforma informațiile într-o structură inteligibilă pentru o utilizare ulterioară.
Rețele neuronale convoluționale
O rețea neuronală convoluțională (CNN sau ConvNet) este unul dintre cei mai populari algoritmi de învățare, prin care o mașină învață să efectueze sarcini de clasificare direct din imagini, video, text sau sunet.
CNN-urile sunt deosebit de utile pentru găsirea de tipare în imagini pentru a recunoaște obiecte, fețe și scene. Ele învață direct de la datele de imagine, folosind modele pentru a clasifica imaginile și pentru a elimina necesitatea extragerii caracteristicilor manuale.
Aplicațiile care solicită recunoașterea obiectului și viziunea pe computer – cum ar fi autovehiculele și aplicațiile de recunoaștere a feței – se bazează foarte mult pe CNN-uri. În funcție de aplicație, putem construi un CNN de la zero sau să utilizăm un model preantrenat folosind setul propriu de date.
Utilizarea CNN pentru deep learning a devenit din ce în ce mai populară datorită a trei factori importanți:
rețelele neuronale elimină necesitatea extragerii caracteristicilor manuale – caracteristicile sunt învățate direct de către CNN
CNN oferă rezultate satisfăcătoare într-un timp relativ scurt
rețelele neuronale pot fi reantrenate pentru noi sarcini de recunoaștere
Fig. .: Procesul de lucru al unei rețele neuronale convoluționale
O rețea neuronală convoluțională poate avea zeci sau sute de straturi, unde fiecare învață să identifice caracteristici diferite ale unei imagini. Filtrele sunt aplicate fiecărei imagini de antrenare la rezoluții diferite, iar ieșirea fiecărei imagini este utilizată
ca intrare în stratul următor. Filtrele pot porni ca trăsături foarte simple, cum ar fi luminozitatea și marginile, și sporesc complexitatea față de caracteristicile care definesc în mod unic un obiect.
Un CNN este compus dintr-un strat de intrare, un strat de ieșire și multe straturi ascunse între cele două straturi. Aceste straturi realizează operații care modifică datele cu intenția de a învăța caracteristici specifice datelor. Trei dintre cele mai comune straturi folosite sunt cele de: convoluție, activare sau ReLU și unificare.
Stratul de convoluție pune imaginile de intrare printr-un set de filtre convoluționale, fiecare dintre acestea activând anumite caracteristici din imagini.
Stratul ReLU
Stratul de unificare simplifică ieșirea prin efectuarea de sub-eșantionare nelineara reducând numărul de parametri pe care rețeaua trebuie să le învețe.
Aceste operații sunt repetate de-a lungul a sute sau mii de straturi, unde fiecare strat învață să identifice caracteristici diferite.
După învățarea caracteristicilor de-a lungul mai multor straturi, rețeaua trece la clasificarea pozelor. Penultimul strat este un strat complet conectat care transmite un vector de dimensiuni K, unde K este numărul de clase pe care rețeaua le va putea cunoaște. Acest vector conține probabilitățile pentru fiecare clasă a oricărei imagini care este clasificată. Stratul final al arhitecturii CNN utilizează un strat de clasificare cum ar fi softmax pentru a obține rezultatul de clasificare.
În [16] o rețea neuronală convoluțională este instruită pe sute, mii sau chiar milioane de imagini. Când lucrăm cu cantități mari de date și arhitecturi complexe, folosirea unei placi video în loc de un procesor, poate accelera semnificativ timpul de procesare pentru a pregăti un model. Odată ce un CNN este instruit, acesta poate fi folosit în aplicații în timp real, cum ar fi detecția pietonilor în sistemele avansate de asistență a șoferului (ADAS).
Pentru rezolvarea problemei de clasificare din lucrare de licență, s-a decis dezvoltarea unei rețele neuronale convoluțională datorită faptului că se pot folosi straturile antrenate de la altă rețea ca bază de plecare pentru învățarea unor noi caracteristici.
Arhitectura unei rețele neuronale
Datele de intrare în rețele convoluționale se transformă, trecând prin toate nivelurile. În imaginea de mai jos putem oberva structura de bază a unei rețele neuronale.
Fig. .: Arhitectura simplificată a unei rețele neuronale convoluționale [17]
Arhitectura unei rețele neuronale convoluționale este realizată din trei grupuri majore: stratul de intrare (input layer), straturile de extragere al caracteristicilor (feature extraction layers) și straturile de clasificare (classification layers). Prin stratul de intrare se acceptă date tridimensionale, adică pe langă lațime și lungime, pozele au și canal de culoare, acesta fiind cel RGB de cele mai multe ori. Straturile din care reies caracteristicile repetă de obicei secvența: strat de convoluție, strat de pooling. Trăsăturile care reies din imagini sunt trimise mai departe în următorul strat unde se găsesc trăsături mai complexe. Rezultatele obținute din straturile de extragere sunt trecute prin straturile de clasificare care pot fi alcătuite din unul sau mai multe straturi complet conectate (fully connected).
Stratul de convoluție
De exemplu avem o imagine de mărime 6 x 6. Definim o matrice care să extragă doar anumite caracteristici din imagine.
Am inițializat matricea de pondere sau weight ca o matrice 3 x 3. Această dimensiune va trece peste imagine, astfel încât toți pixelii să fie acoperiți cel puțin o dată, pentru a obține o ieșire de convoluție. Valoarea 429 de mai sus este obținută prin însumarea valorilor principale din matricea 3 x 3. Valorile principale au fost notate cu “1” în weight.
Fig. .: Explicarea stratului de convoluție
Prin șiftare, imaginea 6 x 6 este transformată acum într-o imagine 4 x 4. Matricea de greutate poate fi văzută ca o pensulă de vopsea ce pictează un perete. Pensula, picteaza primul perete orizontal și apoi coboară și pictează rândul următor în același mod. Valorile pixelilor sunt folosite din nou când matricea de pondere se deplasează de-a lungul imaginii. Acest lucru permite partajarea parametrilor într-o rețea neuronală convoluțională.
Fig. .: Rezultatul obținut în urma procesului de convoluție
Matricea de pondere se comportă ca un filtru într-o imagine care extrage informații specifice din matricea originală a imaginii. O combinație de weights ar putea fi extragerea marginilor, în timp ce o altă combinație poate însemna o anumită culoare, în timp ce alta ar putea bloca doar zgomotul nedorit.
Aceste ponderi sunt învățate astfel încât funcția de pierdere este minimizată. Prin urmare, ponderile sunt învățate să extragă caracteristici din imaginea originală care ajută rețeaua să prezică corect. Când avem mai multe straturi convoluționale, stratul inițial extrage mai multe caracteristici generice, în timp ce rețeaua devine mai profundă, caracteristicile extrase de matricele de greutate sunt tot mai complexe.
Rețeaua dezvoltată în această lucrare conține cinci astfel de straturi convoluționale care au 96 de filtre de dimensiune 11, 256 filtre de dimensiune 5. Ultimile 3 straturi au dimensiunile egale cu 3 și conțin 384, 384 și respectiv 256 de filtre.
Fig. 2.9: Porțiune din funcția folosită pentru straturile convoluționale
În figura 2.9 este ilustrată una din funcțiile folosite pentru straturile convoluționale. Aceasta a fost prelucrată și adaptată pentru nevoiile rețelei. Acest strat utilizează mai multe funcții, dar doar această parte necesită modificări.
Stratul de Pooling
Uneori, când imaginile sunt prea mari, ar trebui să reducem numărul de parametri instruiți. Se dorește apoi introducerea periodică a straturilor de unificare între straturile de convoluție ulterioare. Unificarea se face numai în scopul reducerii dimensiunii spațiale a imaginii. Îmbinarea se face independent pe fiecare dimensiune de adâncime, prin urmare profunzimea imaginii rămâne neschimbată. Cea mai obișnuită formă a stratului de unificare sau pooling, aplicată în general, este unificarea maximă.
Se observă că folosind operația de max pooling pe primul strat, cu un filtru de 2 x 2, obținem un al doilea strat cu dimensiunea de 2 x 2. Mai jos putem observa efectul asupra unei imagini reale folosind max pooling.
Fig. .: Operația de max pooling asupra unei imagini
După cum se poate observa, după aplicarea operației de max pooling, imaginea încă păstrează informațiile importante despre mașină, iar dimensiunile imaginii au fost înjumătățite. Acest lucru ajută la reducerea parametrilor folosiți. În această lucrare, rețeaua neuronală folosită acceptă la intrate doar imagini cu dimensiunea de 227 x 227 x 3, iar pentru a micșora dimensiunile imaginii și în același timp și a puterii de procesare necesară, acest strat apare de 3 ori în arhitectura rețelei.
Fig. 2.12: Funcția folosită în cadrul stratului de unificare
Identic stratului de convoluție, funcția standard a stratului de unificare, a fost adaptată în vederea obținerii unei perfomanțe cât mai ridicată.
Funții de activare
În rețelele neuronale artificiale, funcția de activare a unui nod definește ieșirea acelui nod sau "neuron", dată de o intrare sau un set de intrări. Această ieșire este apoi utilizată ca intrare pentru nodul următor și așa mai departe până când se găsește o soluție dorită la problema inițială.
Funcția de activare cartografiază valorile rezultate în intervalul dorit, de exemplu între 0 și 1 sau -1 până la 1 etc. (în funcție de alegerea funcției de activare). De exemplu, utilizarea funcției de activare logistică (logistic activation) v-a cartografia toate intrările din domeniul numărului real în intervalul de la 0 la 1.
Un circuit integrat de calculator standard poate fi văzut ca o rețea digitală de funcții de activare care poate fi "ON" (1) sau "OFF" (0), în funcție de intrare. Acest lucru este similar cu comportamentul perceptronului liniar în rețelele neuronale. Cu toate acestea, numai funcțiile de activare neliniare permit unor astfel de rețele să calculeze probleme complexe, utilizând doar un număr mic de noduri. În rețelele neuronale artificiale, această funcție este numită și funcția de transfer [18].
În cadrul arhitecturii propuse în această lucrare s-au folosit funcțiile de activare ReLU și Softmax.
Funcția de activare ReLU
Straturile de normalizare de tip convoluție și lot sunt de obicei urmate de o funcție de activare neliniare, cum ar fi o unitate liniară rectificată (ReLU-rectified linear unit), specificată de un strat ReLU. Un strat ReLU efectuează o operație de prag pentru fiecare element, unde orice valoare de intrare mai mică decât zero este setată la zero, adică,
Stratul ReLU nu modifică dimensiunea intrărilor. Există extensii ale stratului standard ReLU care efectuează operații ușor diferite și pot îmbunătăți performanța pentru unele aplicații. Un strat ReLU parcurs face o operație de prag, în care orice valoare de intrare mai mică de zero este înmulțită cu un scalar fix [19]. Aceată funcție de activare este superioara celorlate funcții folosite în trecut (tanh si sigmoid) datorită faptului că poate fi ușor implementată pentru că nu folosește funcții exponențiale și are un comportament linear, lucru care face optimizarea rețelei mai ușoară. Aceată funcție este prezentă în fiecare strat ascuns din arhitectura rețelei folosite pentru rezolvarea problemei de clasificare.
Funcția de activare Softmax
Softmax este o generalizare a logistic regression, ea putând fi folosită pe date continue, nu doar pe clasificări binare. Softmax se ocupă de sisteme de etichetare multinomiale, fiind în general găsită în straturile de ieșire. Un exemplu de folosire al funcției de activare softmax, este atunci când avem o problemă de clasificare cu mai multe clase, și ne interesează doar cel mai bun rezultat dintre acele clase. În acest caz folosim la stratul de ieșire funcția de activare softmax, pentru a obține reprezentantul cu cel mai bun rezultat dintre toate clasele. Pe scurt această funcție atribuie fiecărei clase o valoare de probabilitate, iar suma tuturor probabilităților nu trebuie să fie mai mare decât 1.
Fig. .: Repartiția probabilității într-un exemplu de către funcția Sotfmax
Straturi complet conectate (fully connected)
După mai multe straturi de convoluție avem nevoie de un strat care să ne ofere răspunsul sub forma unei clase. Straturile de convoluție și unificare ar putea numai să extragă caracteristici și să reducă numărul de parametri din imaginile originale. Cu toate acestea, pentru a genera rezultatul final trebuie să aplicăm un strat complet conectat pentru a genera o ieșire egală cu numărul de clase de care avem nevoie. Dimensiunea ultimului strat este de 1 x1 x N, unde N reprezintă numărul de clase pentru care evaluăm. Acest strat are legături între toți neuronii din strat, și toți neuronii din stratul anterior.
Instruirea de la zero (Training from scratch)
Crearea unei rețele de la zero înseamnă că putem stabili configurația rețelei după cum dorim. Această alegere oferă un control mai mare asupra rețelei neuronale și poate oferi rezultate considerabile, dar necesită o înțelegere ridicată asupra structurii unei rețele și a numeroaselor opțiuni pentru tipurile de straturi și configurație.
Deși rezultatele finale pot depăși uneori rezultatele obținute cu ajutorul învățării prin transfer (transfer learning), această metodă necesită mai multe imagini (de ordinul sutelor de mii sau chiar milioane) pentru instruire, deoarece o nouă rețea are nevoie de multe exemple de obiecte pentru a înțelege variația caracteristicilor. Timpul de antrenament al rețelei este adesea mai lung și există multe combinații de straturi care pot fi copleșitoare pentru a configura o rețea de la zero.
Învățarea prin transfer (Transfer learning)
Reglarea fină a unei rețele precompilate folosind învățarea prin transfer learning este de obicei mult mai rapidă și mai ușoară decât instruirea de la zero. Este nevoie de o cantitate de date redusă și de puține resurse de calcul. Transfer learning folosește cunoștințe de la un tip de problemă pentru a rezolva probleme similare. Un avantaj al învățării prin transfer este că rețeaua pre-antrenată a învățat deja un set bogat de caracteristici. Aceste caracteristici pot fi aplicate la o gamă largă de alte activități similare. De exemplu, putem lua o rețea instruită pe milioane de imagini și să o refolosim pentru o nouă clasificare a obiectului folosind doar sute de imagini.
Este destul de greu să antrenăm o rețea neuronală de la zero, deoarece acestea necesită seturi de date foarte mari și astfel de seturi se găsesc cu dificultate. Cel mai cunoscut set de date este ImageNet care conține peste 1.2 milioane de poze și 1000 de categorii.
În cazul în care o rețea este folosită ca și o modalitate de extragere a caracteristicilor, scoatem ultimul strat pe deplin conectat și folosim restul rețelei ca un extractor de caracteristici. În cazul rețelei AlexNet antrenată pe ImageNet, dacă scoate stratul de clasificare rețeaua o să calculeze un vector de 4096 pentru fiecare imagine, care conține activările de pe straturile ascunse înainte să intre în clasificator. O dată extrase acele caracteristici, le putem folosi pentru a antrena un clasificator pentru noul set de date.
Instruirea de la zero (Training from scratch) vs. Învățarea prin transfer (Transfer learning)
Cele două abordări utilizate în mod obișnuit pentru deep learning sunt realizarea unui model de la zero și cea de transfer learning. Ambele abordări au beneficii și pot fi utilizate pentru diferite sarcini profunde de învățare.
Dezvoltarea unui model de rețea neuronală de la zero, este mai avantajoasă pentru sarcini foarte clare, cum ar fi denumirea unui nou tip de problemă, pentru care modelele preexistente nu pot sau nu au fost instruite încă. Dezavantajul este că această abordare necesită în mod obișnuit o cantitate mare de date pentru a produce rezultate exacte – de exemplu, când textul trebuie să fie verificat și este disponibilă o cantitate mare de exemple. Dacă nu avem acces la un model prestabilit pentru o sarcină de analiză de text, este recomandată dezvoltarea unui model de la zero.
Transfer learning este util pentru sarcinile de recunoaștere a obiectelor, pentru care pot fi folosite ca punct de plecare o varietate de modele populare pre-antrenate, cum ar fi AlexNet și GoogLeNet. De exemplu, dacă avem un proiect de botanică în care florile trebuie clasificate (tema abordată în această lucrare) și există date limitate disponibile, putem transfera ponderile și straturile de la modelul AlexNet, care clasifică imaginile în 1000 de categorii diferite, mai puțin ultimul strat pe care îl vom înlocui cu stratul nostru fully connected.
În scopul obținerii unei rate de eroare cât mai mică, în cadrul lucrării s-au folosite ambele tipuri de instruire. Instruirea de la zero a fost folosită pentru a dezvolta în rețea, un set propriu de caracteristici pentru exemplarele de flori folosind un set de imagini considerabil, iar cu ajutorul procesului de transfer learning s-a reușit creșterea predicției cu aproximativ 7 procente.
MATLAB
Pentru dezvoltarea rețelei neuronale și antrenarea ei, s-a folosit programul MATLAB. MATLAB este un mediu de dezvoltare pentru calcul numeric și analiză statistică ce conține limbajul de programare cu același nume, creat de MathWorks. MATLAB permite manipularea matricilor, vizualizarea funcțiilor, implementarea algoritmilor, crearea de interfețe și poate interacționa cu alte aplicații. Chiar dacă e specializat în calcul numeric, există pachete care îi permit să interacționeze cu motoarele de calcul simbolic precum Maple [20].
PREZENTAREA MODULUI DE ABORDARE
Seturile de date
Pentru antrenarea rețelei și testarea ei s-au folosit următoarele seturi de date:
102 Category Flower Dataset [21]
Flowers Recognition [22] – 5 flowers data set
FGVCx Flower Classification Challenge 2018 [23]
102 Category Flower Dataset
Acest set conține imagini cu flori pentru 102+1 clase diferite. Imaginile au fost obținute prin cautarea pe web (google, bing) și prin realizarea de fotografii. Pentru fiecare clasă există între 40 și 250 de poze. Atât dimensiunile cât și luminile imaginilor sunt variabile, dar toate sunt reprezentate folosind cele 3 canale de culoare RGB.
Setul a fost prelucrat, pentru a obține o formă mai aranjată. Folosind datele oferite de set, imaginile au fost mutate în directoare care poartă numele specific acelei clase pentru a oferi un răspuns în urma procesului de clasificare.
Tot pentru acest set, există și o versiune segmentată, unde fundalul din imagini a fost eliminat folosind metoda propusă în [24], pentru a diminua sanșele ca rețelele neuronale să învețe caracteristi false obținute din fundal. Dar datorită faptului că segmentarea a fost făcută automat, din multe imagini a fost șters mai mult decât trebuia, în unele cazuri chiar și floarea. Acest lucru a dus la micșorarea setului de date, astfel devenind prea mic pentru ca rețeaua să învețe suficiente caracteristici pentru o predicție corectă.
Denumirile florilor din setul de date sunt în engleză (se pot găsi pe pagina oficială Visual Geometry Group de la Universitatea Oxford) și cuprinde următoarele exemplare la care s-a adaugat încă o clasă pentru categoria “not a flower” (nu este o floare): alpine sea holly, anthurium, artichoke, azalea, ball moss, balloon flower, barbeton daisy, bearded iris, bee balm, bird of paradise, bishop of llandaff, black-eyed susan, blackberry lily, blanket flower, bolero deep blue, bougainvillea, bromelia, buttercup, californian poppy, camellia, canna lily, canterbury bells, cape flower, carnation, cautleya spicata, clematis, colt's foot, columbine, common, dandelion, corn poppy, cyclamen, daffodil, desert-rose, english marigold, fire lily, foxglove, frangipani, fritillary, garden phlox, gaura, gazania, geranium, giant white arum, globe thistle, globe-flower, grape hyacinth, great masterwort, lily, hard-leaved pocket orchid, hibiscus, hippeastrum, japanese anemone, king protea, lenten rose, lotus, love in the mist, magnolia, mallow, marigold, mexican aster, mexican petunia, monkshood, moon orchid, morning glory, orange dahlia, osteospermum, oxeye daisy, passion flower, pelargonium, peruvian lily, petunia, pincushion flower, pink primrose, pink-yellow dahlia, poinsettia, primula, prince of wales feathers, purple coneflower, red ginger, rose, ruby-lipped cattleya, siam tulip, silverbush, snapdragon, spear thistle, spring crocus, stemless gentian, sunflower, sweet pea, sweet william, sword lily, thorn apple, tiger lily, toad lily, tree mallow, tree poppy, trumpet creeper, wallflower, water lily, watercress, wild pansy, windflower, yellow iris.
Flower Recognition – 5 flowers data set
Acest set de date conține 4242 imagini de flori. Colectarea datelor se bazează pe server-ul flickr, imagini Google, imagini yandex. Imaginile sunt împărțite în cinci clase: mușețel, lalea, trandafir, floarea-soarelui, păpădie. Pentru fiecare clasă există aproximativ 800 de fotografii. Fotografiile nu au rezoluție mare, aproximativ 320×240 pixeli. Fotografiile nu sunt reduse la o singură dimensiune, au proporții diferite. Având doar 5 clase și un număr mare de mostre pentru fiecare clase, setul de date este perfect pentru testare și învățare de caracteristici, dar fiind doar 5 clase, utilizarea lui este limitată.
Fig. .: Distribuția imaginilor in setul de date
FGVCx Flower Classification Challenge 2018
Pentru concursul Flower Classification Challenge, care a avut loc în 2018, s-a folosit un set de date curat creat Xingse app și PictureThis app conținând peste 669.000 de imagini pentru 997 de specii de flori. Acest set este ideal pentru antrenarea unei rețele de la zero dacă dorim să avem o bază solidă de plecare pentru caracteristici.
Datorită faptului că 669.000 de imagini necesită o putere computațională mare, s-a decis să se creeze un set de date mai mic de doar 49+1 clase având 150.000 de imagini pentru antrenarea rețelei neuronale.
Rețele pre-antrenate
De-a lungul testelor s-au folosit mai multe rețele și abordari pentru a obține e eroare cât mai mică. Rețelele pre-antrenate sunt folosite în aceată lucrare ca modele de comparație pentru rețeua dezvoltată. Pentru a le putea folosi în problema de clasificare a tipurilor de flori, s-a folosit tehnica de transfer de cunoștințe și au fost antrenate pe setul de date 102 Category Flower Dataset folosind vechile weight-uri. Astfel are loc procesul de ajustare (fine-tunning).
AlexNet
Această rețea rezolvă problema clasificării imaginilor în cazul în care intrarea este o imagine a uneia dintre cele 1000 de clase diferite (de ex. pisici, câini etc.), iar rezultatul este un vector cu 1000 de numere. Elementul i al vectorului de ieșire este interpretat ca fiind probabilitatea ca imaginea de la intrare să aparțină clasei i. Prin urmare, suma tuturor elementelor vectorului de ieșire este 1.
Intrarea către AlexNet este o imagine RGB de dimensiune 256 × 256. Aceasta înseamnă că toate imaginile din setul de antrenament și toate imaginile test trebuie să aibă dimensiunea de 256 × 256.
Dacă imaginea de intrare nu este 256 × 256, trebuie să fie convertită la 256 × 256 înainte de a o folosi pentru instruirea rețelei. Pentru a realiza acest lucru, dimensiunea mai mică este redimensionată la 256 pixeli și apoi imaginea rezultată este tăiată pentru a obține o imagine de 256 × 256. Figura de mai jos prezintă un exemplu.
Fig. .: Exemplu de redimensionare
Arhitectura rețelei AlexNet
AlexNet a fost o rețea mult mai mare decât CNN-urile anterioare folosite pentru sarcinile de vizionare pe computer. Are 60 de milioane de parametri și 650.000 de neuroni și a fost nevoie de cinci până la șase zile pentru antrenare pe două GPU-uri GTX 580 3GB. Astăzi există CNN-uri mult mai complexe care pot funcționa pe un GPU mai rapid, chiar și pe seturi de date foarte mari.
Fig. .: Arhitectura rețelei AlexNet
AlexNet este formată din 5 straturi convoluționale și 3 straturi complet conectate.
Conectorii multipli Kernels (a.k.a filtre) extrag caracteristici importante dintr-o imagine. Într-un singur strat convoluțional, există, de obicei, multe filtre de aceeași mărime. De exemplu, în primul strat conv, AlexNet conține 96 de filtre de dimensiunea 11x11x3. Lățimea și înălțimea filtrelor sunt de obicei aceleași, iar adâncimea este aceeași cu numărul de canale.
Primele două straturi convoluționale sunt urmate de straturile de suprapunere maximă (max pooling). Cel de-al treilea, al patrulea și al cincilea strat de convoluție sunt conectate direct. Cel de-al cincilea strat convoluțional este urmat de un strat de suprapunere maximă de îmbinare, a cărui ieșire merge într-o serie de două straturi complet conectate. Cel de-al doilea strat complet conectat, trimite datele într-un clasificator softmax cu 1000 de clase.
Funcția ReLU este aplicată după toate straturile de convoluție și complet conectate. Nelinearitatea ReLU a primului și a celui de-al doilea strat de convoluție este urmată de o etapă de normalizare locală înainte de a efectua punerea în comun. Dar cercetătorii nu au găsit normalizarea ca fiind foarte folositoare.
ResNet50
După victoria celebrată de rețeaua AlexNet la concursul de clasificare LSVRC2012, rețeaua profundă a fost, fără îndoială, cea mai importantă lucrare în viziunea calculatorului/comunitatea de deep learning din ultimii ani. ResNet face posibilă formarea a până la sute sau chiar mii de straturi și încă realizează performanțe convingătoare.
Profitând de capacitatea sa puternică de reprezentare, performanța multor aplicații de vizionare a computerului, altele decât clasificarea imaginilor, a fost stimulată, cum ar fi detectarea obiectelor și recunoașterea facială.
Conform teoremei de aproximare universală, având suficientă capacitate, știm că o rețea de tip feedforward (informația este trimisă într-o singură direcție, de la nodurile de intrare către nodurile ascunse și apoi către nodurile de ieșire) cu un singur strat este suficientă pentru a reprezenta orice funcție. Cu toate acestea, stratul poate fi masiv și rețeaua este predispusă la suprasolicitarea datelor. Prin urmare, există o tendință comună în comunitatea de cercetare ca arhitectura rețelei trebuie să fie mai adâncă.
Cu toate acestea, creșterea adâncimii unei rețele nu funcționează prin simpla încărcare a straturilor. Rețelele adânci sunt greu de antrenat din cauza problemei gradientului de dispariție – întrucât gradientul este propagat înapoi în straturile anterioare, multiplicarea repetată poate face ca gradientul să fie foarte de mic. Ca urmare, pe măsură ce rețeaua devine mai adâncă, performanța sa devine saturată sau chiar începe să se degradeze rapid.
Ideea de bază a rețelei ResNet este că se introduce o așa-numită "conexiune rapidă de identitate" care sare peste unul sau mai multe straturi, după cum se arată în figura următoare[25]:
În [26], straturile de bază sunt în mare aceleași ca și în cazul arhitecturii VGG. Majoritatea straturile convoluționale au filtre 3×3 și folosesc două reguli simple de proiectare: pentru ieșirile a caror hărți de caracteristiti au aceleași dimensiuni, straturile au același număr de filtre; și dacă dimensiunile hărții caracteristicilor este înjumătățită, numărul de filtre este de două ori mai mare, astfel încât timpul petrecut pe strat să se mențină. Se afectuează punerea în comun (pooling) pe straturile convoluționale care au pasul setat la 2. Rețeaua se termină cu un strat complet conectat de 1000 de clase.
GoogleNet Inception v1
Câștigătorul concursului ILSVRC 2014 a fost GoogleNet (a.k.a. Inception V1) de la Google. A obținut o rată de eroare de top de 6,67%. Acestă eroare a fost foarte apropiată de performanța la nivel uman pe care organizatorii provocării au fost forțați să le evalueze. După cum s-a dovededit, acest lucru a fost de fapt destul de greu de realizat și a necesitat o pregătire umană pentru a putea acuza acuratețea utilizatorului. După câteva zile de formare, expertul uman (Andrej Karpathy) a reușit să atingă o rată de eroare de 5,1%. Rețeaua a folosit un CNN inspirat de LeNet, dar a fost implementat un element nou care este denumit “modul de inițiere”. A fost folosită normalizarea loturilor, distorsiunile imaginii și RMSprop. Acest modul se bazează pe câteva convoluții foarte mici pentru a reduce drastic numărul de parametri. Arhitectura celor de la Google a constat într-un CNN de 22 de straturi profunde, dar a redus numărul de parametri de la 60 de milioane (AlexNet) la 4 milioane.
In [27], o rețea Inception este o rețea formată din module din figura 3.8, puse una peste cealaltă, cu straturi ocazionale max-pooling cu pasul 2. Din motive tehnice (eficiența memoriei în timpul antrenamentului), părea benefic să utilizam modulele de inițiere numai la straturile superioare, păstrând în același timp straturile inferioare în mod tradițional convoluțional. Acest lucru nu este strict necesar, reflectând pur și simplu unele ineficiențe de infrastructură în implementarea actuală. Un aspect util al acestei arhitecturi este faptul că permite creșterea numărului de unități în fiecare etapă în mod semnificativ fără o explozie necontrolată în complexitatea computațională la etapele ulterioare.
VGG 16
VGG 16 este o rețea neuronală convoluțională propusă de K. Simonyan [28] pentru concursul ImageNet. Modelul a obținut o auratețe de 92.7% pe un set de date cu 14 milioane de imagini pentru 1000 de clase. A fost una dintre cele mai faimoase modele înscrise pentru ILSVRC-2014. Aduce îmbunătățiri față de AlexNet înlocuind filtrele de dimensiuni mari cu filtre multiple de dimensiuni 3×3 consecutive. VGG 16 a fost antrenată de-a lungul mai multor săptămâni folosind placi video NVIDIA Titan Black.
Arhitectura VGG 16
Stratul de convoluție de la intrare are dimensiunea fixă de 224 x 224 RGB. Imaginea este trecută printr-un teanc de straturi de convoluție, unde filtrele un câmp receptiv foarte mic: 3 × 3 (cea mai mică dimensiune pentru a capta noțiunea de stânga / dreapta, sus / jos, centru ). În una dintre configurații se utilizează și un filtru de 1×1, filtru care poate fi văzut ca o transformare lineară a stratului de intrate. Pasul este setat la 1 pixel; operația de punere în comun se realizează cu o fereastră cu dimensiunile 2×2 pixeli și pasul 2.
După mai multe straturi convoluționale urmează cele trei straturi complet conectate. Primele două au 4096 de canale fiecare, iar al treilea efectuează clasificarea pe 1000 de canele (un canal pentru fiecare clasă). Stratul final este stratul soft-max. Configurația straturilor complet conectate este aceeași în toate rețelele.
Toate straturile ascunse sunt echipate cu nelinearitatea de rectificare (ReLU). De asemenea, se remarcă faptul că nici una dintre rețele (cu excepția uneia) nu conține normalizarea răspunsului local (LRN), o astfel de normalizare nu îmbunătățește performanța setului de date ILSVRC, ci conduce la creșterea consumului de memorie și a timpului de calcul.
Rețeaua antrenată de la zero
Pentru arhitectura rețelei neuronale a fost folosit modelul rețelei AlexNet, dar fară straturile de normalizare care conform [29] nu ajută la îmbunătățirea predicției. Ulterior, acest fapt dovedindu-se fals în urma testelor unde fără straturile de normalizare rata de eroare ajungea și la 50%, iar în testele unde aceste straturi sunt prezente, rata scade cu aproximativ 20%. Rețeua constă în 5 straturi convoluționale și 3 straturi complet conectate. Doar primele 2 straturi și ultimul strat convoluțional sunt urmate de un strat de unificare pentru a nu redimensiona imaginea mai mult decât trebuie. Stratul de dropout este aplicat înainte de primul și al doilea strat complet conectat. Stratul de intrare necesită ca imaginile de intrate să fie de dimensiuni 227x227x3.
Antrenarea
Pentru antrenare rețelei s-a folosit setul de date personalizat cu 50 de clase aparținând florilor și o clasa aparținând celorlalte clase care nu sunt flori (obiecte, animale, oameni) care conține aproximativ 100.000 de imagini.
Rețeaua a avut nevoie de 9 dintre cele 80 de epoci oferite sau 2050 de iterații pentru a ajunge la un rezultat cu care se poate lucra, rețeaua ajungând la plafonare dupa a 9 epocă. Timpul de antrenare a fost 603 minute pe o placă video NVIDIA GTX 1060 cu 6 GB VRAM. Ca optimizator s-a folosit SGDM ( gradient descendent stohastic) cu rate inițială de învățare de 0.01 și este împărțită la 10 atunci cand acuratețea stagnează. BatchSize-ul este de 256 și răbdarea (patience) este setată la 5. Dacă timp ce 5 iterații rețeaua nu mai învața nimic, atunci antrenarea se oprește.
Pentru a crește acuratețea, după sfârșitul antrenamentului, rețeaua nerunală a fost supusă procesului de transfer learning.
Fig. .: Opțiunile pentru antrenarea rețelei
Fig. .: Caracteristicile învățate în primul strat convoluțional din rețea
Realizarea unei aplicații softwere
Suplimentar, pe lăngă dezolvatarea unei rețele neuronale convoluționale, s-a realizat și o aplicație cu o interfață simplă pentru a simplifica procesul de utilizare a rețelei.
Pentru a nu fi necesară instalarea softwere-ului Matlab pentru a putea folosi această rețea, s-a folosit Application Compiler, extensie a Matlab-ului, pentru a realiza o aplicație simplă pentru sistemul de operare windows, care crează automat o conexiune între program și cameră (dacă există) și care returnează un rezultat indiferent de ce se află în fața camerei.
În scurt timp, această abordare a fost abandonată datorită calității inferioare a camerei și s-a orientat către o soluție mai puțin costisitoare. Și anume folosirea camerei de la un telefon android. Majoritatea camerelor video din ansamblul telefoanelor, au o calitate superioară și care ar putea crește predicția datorită numărului mai mare de pixeli din imaginea transmisă.
Pentru a realiza o conexiune wireless între telefon și laptop, este necesar să creăm un server de streaming pe care să îl apelăm din Matlab. Pentru realizarea server-ului de streaming am folosit aplicația de android IP Webcam. Din meniul aplicației selectăm Start server și o să obținem o adresă http, la care adăugăm extensia /video, pe care o să o folosim în Matlab pentru a realiza conexiunea. În plus pentru a înțelege mai bine ce vede rețeaua, s-a adăgaut opțiunea de a oberva primele cinci predicții pentru testare.
Dezavantajul în momentul de față al aplicației este că poate fi folosită doar dacă ultilizatorul este conectat la o rețea de internet specifică. Când aplicația a fost generată, aceasta utiliza ip-ul generat de rețeaua de internet a cartelei SIM a telefonului. Astfel, doar device-urile conectate la acea rețea pot folosi această aplicație.
Fig. .: Exemplu de clasificare corectă folosind noua interfață
Algoritmul de implemantare al aplicației conține următorii pași:
Încărcarea rețelei neuronale antrenate într-o variabilă x
Apelarea și salvarea doar a straturilor rețelei într-o varibilă y
Definirea ip-ului de pe care se va accesa stream-ul video folosind fucția ipcam
Realizarea interfeței folosind două grafice, unul pentru stream și al doilea pentru afișarea primelor 5 predicții
Folosirea unei bucle infite (while) pentru a putea clasifica continuu
Fig. .: Secțiune din codul sursă pentru realizarea aplicației
REZULTATE OBȚINUTE
Pentru că se lucrează cu diminesiuni ale imaginilor destul de mari și un număr mare de mostre pentru această placă video, numărul testelor pentru fiecare rețea pre-antrenată este de 1-2 deoarece ele prezintă deja o rată a erorii foarte mică. Teste multiple s-au realizat pentru rețeua antrenată de la zero.
AlexNet
Pentru executarea operației de transfer learning și învățare de noi caracteristici, s-a folosit setul de date format din 103 clase. Pentru această arhitectură, s-au folosit rate inițiale de învățare de 0.01. Rata de învățare este împărțită la 10 atunci când acuratețea stagnează. Numărul de epoci a fost setat la 20 și numărul de batch-uri la 64 și 50, iar răbdarea (ValidationPatience) este setată la 5 pentru al doilea test. Pentru pentru test s-a obținut o acuratețe de 88.94% iar pentru al doilea test s-a obținut 86.48%. Timpul de atrenare a fost de 52 de minute după 2080 de iterații și respectiv 20 de minute după ce nivelul răbdării a fost atins la 1000 de iterații din 2660. Ambele rețele folosc ca optimizator SGDM (stochastic gradient with descendent momentum).
ResNet50
Această arhitectură a fost antrenată pe un set de date de doar de 5 clase și a fost antrenat doar ultimul strat complet conectat. Rată de învățare inițială a fost setată la 0.001, fără posibilitatea de a fi împărțită la 10 dacă apare stagnare la predicție. Numărul de epoci a fost setat la 10, la fel și pentru numărul de batch-uri. Optimizatorul folosit este SGDM. După 67 de minute de antrenare, procesul a fost oprit la 1005 iterații din 3450 datorită stagnării și s-a obținut o acuratețe de 90.17%.
GoogleNet
Pentru această arhitectură s-au păstrat opțiunile de antrenare ca și la ResNet50 și setul de date folosit pentru antrenament a fost cel format din 5 clase. Identic cu ResNet50, doar ultimul strat complet conectat a fost antrenat. După 125 de minute și 3450 de iterații s-a obținut o acuratețe de 87.05%, cu aproximativ 3% mai puțin decât ResNet50.
VGG 16
Această arhitectură a obținut cea mai mare acuratețe în urma testului. Setul de date folosit pentru antrenare este cel de 103 clase. Rata de învățare este de 0.001, numărul de epoci 20, iar numărul de batch-uri 40. Ca și optimizator a fost folosit SGDM. Timpul de antrenare a fost de 180 de minute, iar după 3260 de iterații a fost obținută o acuratețe de 94.12%.
Rețeaua antrenată de la zero și prin transfer learning
În urma opțiunilor selectate pentru antrenare a rețelei de la subcapitolul 3.3.1, folosind setul de date FGVCx Flower Classification de 49+1 clase, fiind împărțit în 0.6% pentru antrenare, 0.2% pentru test și 0.2% pentru validare. S-a obținut o predicție de 75.14% după 603 minute și 2050 de iterații din 20160 posibili.
Pentru a vedea dacă acuratețea este corectă putem folosi matricea de confuzie. Realizăm suma pe diagonala principală și rezultatul îl împărțim la suma tuturor elementelor din matrice. Matricea este realizată pentru doar 15 clase din cele 50 posibile.
Rezultate obținute prin transfer learning
Acum că am oferit o bază de caracteristici rețelei, putem trece la procesul de transfer al cunoștințelor pentru a ridica procentul de acuratețe. Pentru antrenare s-au folosit atât setul de date normal de 102 clase cât și cel de 102 clase, unde imaginile sunt segmentate. Mai jos se pot observa rezultatele obținute în urma testelor. Seturile de date au fost împărțite în 0.8% pentru antrenare și 0.2% pentru teste.
Tabelul : Datele necesare pentru reproducerea testelor
*În urma procesului de segmentare automată, multe dintre imagini prezentau o segmentare completă, iar în unele imagini segmentarea a fost făcută greșit. Aceste lucru a dus la micșorarea setului de date, micșorând totodată și procentul de acuratețe.
Pentru un set de date propriu ce conține 13 clase rata de eroare este de doar 10% obținând o precizie de 90%, dar această rată este influențată de numărul de clase.
Validarea rezultatelor
Pentru validarea rezultatelor, inițial s-a ales o metodă de testare live, unde o personă așează o specie de floare (cunoscută de rețea) în fața camerei web, iar această va întoarce o predicție, care poarte fi falsă sau adevarată, fiind influențată de mulți factori. În exemplul de mai jos, primele trei imagini prezintă predicții folosind imaginile de test și a patra reprezința predicția asupra unei transmisii live.
În timpul testelor nu toate rezultatele au fost la fel de precise ca în exemplul de mai sus.
Erori de validare
În cadrul testelor s-au observant și apariția unor erori de validare datorate unor factori externi greu controlabili. Pentru clasificarea în timp real s-au folosit imagini filmate de pe un display. Acest lucru, în funcție de display, a dus la fluctuații de culoare (noanțele de roșu pot fi șterse sau mai apropiate de un roz) sau în unele cazuri pixeli din display se regăseaua în imaginile capturate de smartphone. Chiar și în aceste circumstanțe, răspunsul corect s-a regăsesit în top 5 predicții.
Fig. .: Exemplu de eroare unde fluctuațiile de culoare influențează rezultatul
Fig. .: Alte exemple de clasificare
În unele cazuri poziționarea oblică a unui obiect a dus la clasificarea greșită a obiectului respectiv, deși în poziție verticală, rețeaua nu a avut probleme în a clasifica corect acel obiect (exemplu linia 4 din figura 4.12).
O altă abordare a fost folosirea imaginilor imprimate pe foi de carton în procesul de clasificare pentru a rezolva problema reflectării lumii. În urma unor teste, această metodă s-a dovedit a fi mai folositoare întrucât din 4 teste, 3 validări au fost corecte.
Fig. .: Rezultatele obținute de rețea folosind imagini imprimate
CONCLUZII
În această lucrare a fost abordată problema recunoașterii diferitelor tipuri flori, un lucru care poate fi dificil pentru foarte mulți. Folosind tehnici de machine learning, această problemă poate fi rezolvată cu ușurință.
Folosind tehnici de transfer learning și antrenare de la zero, s-au obținute rezultate foarte acceptabile în toate tipurile de rețele folosite. Totuși s-au observat diferențe notabile între rețelele antrenate de la zero și cele pre-antrenate. Rezultatele obținute de rețelele pre-antrenate au ieșit în evidență, cel mai bun rezultat fiind înregistrat de arhitectura VGG16 pre-antrenată pe setul de date ImageNet de 94%, față de 75% obținut la rețeaua antrenată de la zero.
Pentru a îmbunătăți acuratețea rețelei antrenate de la zero, am folosit straturi de normalizare care conform [28] nu ajută, dar testele au aratat contrariul și am folosit tehnica de transfer learning pentru a îmbunătăți caracteristicile învățate, ajungând astfel la o acuratețe de 81.61% pentru cel mai bun model folosind setul de date format din 102 clase.
Pentru a îmbunătăți și mai mult rețeaua se pot încerca diferite abordări în preprocesare datelor, curățarea setului de date prin folosirea pozelor bine definite, cu o claritate ridicată și cu un fundal cât mai simplu. Segmentarea pozelor, teoretic ar ajuta la îmbunătățire, dacă segmentarea este făcută corect și nu micșorează setul de date. În rețea imaginile au fost redimensionate la 227 x 227. Din aceată cauza multe poze au devenit distorsionate, ceea ce poate duce la învățarea unor caracteristici eronate. Pentru a evita acest lucru se poate recurge la decuparea pozei la dimensiunile dorite după modelul rețelei AlexNet. Pentru obținerea unui rezultat cât mai ridicat, rețeua antrenată de la zero se poate antrena suplimentar pe un set foarte mare de date (cu cât mai mult cu atât mai bine), dar acest lucru necesită o putere computațională foarte mare și foarte mult timp.
Pentru validarea video, este necesar ca între cameră și subiect să nu existe mișcare pentru a evita obținerea unui rezultat negativ. Adăugarea unei opțiuni de ROI (region of interest) ne poate ajută să înțelegem mai bine ce „vede” rețeaua și astfel putem adapta setul de date, arhitectura și opțiunile de antrenare pentru a obține rezultate cu o eroare cât mai mică. În testele direct pe setul de date, rata de clasficare este foarte ridicată, dar în testele fizice, adesea clasificarile sunt făcute greșit. Acest lucru este datorat faptului că pentru teste s-au folosit exemple filmate de pe un display și nu exemplare reale. În astfel de cazuri, prinipala cauză a clasificării greșite este variația de culoare de la monitor.
Lucrarea poate fi dezvoltată și utilizată mai departe în diferite domenii în care este utilă folosirea tehnicilor de prelucrare de imagini precum: în serviciile de informații pentru urmărirea persoanelor folosind detecția facială, în domeniul automotivelor pentru realizarea sistemelor de conducere automată, sistemul agricol pentru realizarea unui ambient perfect de creștere a alimentelor și obținerea unei producții cât mai mari, etc.
BIBLIOGRAFIE
[1] Thi Thanh Nhan Nguyen, Van Tuan Le, Thi Lan Le, Hai Vu1 Natapon Pantuwong, Yasushi Yagi Flower species identification using deep convolutional neural networks, AUN/SEED-Net Regional Conference for Computer and Information Engineering 2016
[2] Valliammal N., Geethalakshmi S.N. (2011) Leaf and Flower Recognition Using Preferential Image Segmentation Algorithm. In: Nagamalai D., Renault E., Dhanuskodi M. (eds) Trends in Computer Science, Engineering and Information Technology. CCSEIT 2011. Communications in Computer and Information Science, vol 204. Springer, Berlin, Heidelberg
[3] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich, Going Deeper with Convolutions, 17 Sep 2014
[4] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, Deep Residual Learning for Image Recognition, 10 Dec 2015
[5] Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He, Aggregated Residual Transformations for Deep Neural Networks, 16 Nov 2016
[6] Mario Lasseck, Image-based Plant Species Identification with Deep Convolutional Neural Networks
[7] Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton, ImageNet Classification with Deep Convolutional Neural Networks
[8] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev, Jonathan Long, Ross Girshick, Sergio Guadarrama, Trevor Darrell, Convolutional Architecture for Fast Feature Embedding, SUBMITTED to ACM MULTIMEDIA 2014 OPEN SOURCE SOFTWARE COMPETITION UC Berkeley EECS, Berkeley, CA 94702
[9] Gogul, I & Kumar, Sathiesh. (2017). Flower species recognition system using convolution neural networks and transfer learning. 1-6. 10.1109/ICSCN.2017.8085675.
[10] R. Danescu, Sisteme de Recunoastere a Formelor – Laborator 3-4 Histograma Orientarilor Gradientilor, 2012/2013
[11] https://en.wikipedia.org/wiki/Logistic_regression
[12] Warisara Pardee, Prawaran Yusungnern, Peeraya Sripian, Flower Identification System by Image Processing, Conference: 3rd International Conference on Creative Technology CRETECH 2015, At Bangkok, Thailand, Volume: 1 2015
[13] Rother, C., Kolmogorov, V., and Blake, A. Grabcut: Interactive foreground extraction using iterated graph cuts. ACM Transactions on Graphics (TOG) 23, 309-314 (2004).
[14] Deng, L.; Yu, D. (2014). "Deep Learning: Methods and Applications" (PDF). Foundations and Trends in Signal Processing. 7 (3–4): 1–199.
[15] Bengio, Y.; Courville, A.; Vincent, P. (2013). "Representation Learning: A Review and New Perspectives". IEEE Transactions on Pattern Analysis and Machine Intelligence. 35 (8): 1798–1828.
[16] https://www.mathworks.com/solutions/deep-learning/convolutional-neural-network.html
[17] Melinte Tudor Matei. (2018)"Recunoasterea automata a expresiilor faciale"
[18] https://ro.wikipedia.org/wiki/MATLAB
[19] https://en.wikipedia.org/wiki/Activation_function
[20] Nair, Vinod, and Geoffrey E. Hinton. "Rectified linear units improve restricted boltzmann machines." In Proceedings of the 27th international conference on machine learning (ICML-10), pp. 807-814. 2010.
[21] http://www.robots.ox.ac.uk/~vgg/data/flowers/102/
[22] https://www.kaggle.com/alxmamaev/flowers-recognition
[23] https://www.kaggle.com/c/fgvc2018-flower
[24] Maria-Elena Nilsback; Andrew Zisserman; Delving into the whorl of flower segmentation, Deparment of Engineering Sciene, University of Oxford
[25] https://towardsdatascience.com/an-overview-of-resnet-and-its-variants-5281e2f56035
[26] Kaiming He; Xiangyu Zhang; Shaoqing Ren; Jian Sun; Deep Residual Learning for Image Recognition
[27] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich; Google Inc. University of North Carolina, Chapel HillUniversity of Michigan, Ann Arbor Magic Leap Inc. Going Deeper with Convolutions
[28] Karen Simonyan, Andrew Zisserman; VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION; Visual Geometry Group, Department of Engineering Science, University of Oxford
[29] https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: SPECIALIZAREA: ELECTRONICĂ APLICATĂ PRELUCRAREA DE IMAGINI PENTRU DETECȚIA ȘI CLASIFICAREA TIPURILOR DE FLORI Îndrumător proiect, Sl. Dr. Ing…. [308531] (ID: 308531)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
