Analiza imaginilor faciale pentru identificarea stării de ebrietate [632027]

Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Analiza imaginilor faciale pentru identificarea stării de ebrietate
utilizând rețele neurale

Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Calculatoare și Tehnologia Informației
programul de studii de licență Ingineria Informației

Conducător științific Absolvent: [anonimizat].Dr.Ing.Victor-Emil NEAGOE Alexandru-Ionel SOLTUZ

Anul 2019

Copyright © 2019 , Alexandru-Ionel Soltuz

Toate drepturile rezervate

Autorul acordă UPB dreptul de a reproduce și de a distribui public copii pe hîrtie sau
electronice ale acestei lucrări, în formă integrală sau parțială.

Cuprins

Lista figurilor ……………………………………………………………………………………………………………………. 10
Lista tabelelor ………………………………………………………………………………………………………………….. 12
Lista acronimelor ………………………………………………………………………………………………………………. 13
Introducere ………………………………………………………………………………………………………………………. 14
1. Identificarea stării de ebrietate (State of the Art) ………………………………………………………………… 15
2. Deep CNN ……………………………………………………………………………………………………………………. 17
2.1 Deep Learning ………………………………………………………………………………………………….. 17
2.2 Rețele neurale convoluționale – descriere generală ………………………………………………… 19
2.3 Straturile unei rețele neurale convoluționale ………………………………………………………….. 20
2.3.1 Stratul de intrare …………………………………………………………………………………… 20
2.3.2 Stratul convoluținal ………………………………………………………………………………. 21
2.3.3 Stratul de normalizare a lotului ……………………………………………………………….. 24
2.3.4 Stratul de activare neliniară ……………………………………………………………………. 24
2.3.5 Stratul de pooling …………………………………………………………………………………. 25
2.3.6 Stratul de dropout …………………………………………………………………………………. 26
2.3.7 Stratul complet conectat ………………………………………………………………………… 26
2.3.8 Straturile de ieșire ………………………………………………………………………………… 26
3. Model propus. Implementarea algoritmului ……………………………………………………………………….. 28
3.1 Bazele de date …………………………………………………………………………………………………… 28
3.1.1 Baza de date A ……………………………………………………………………………………… 28
3.1.2 Baza de date B ……………………………………………………………………………………… 29
3.2 Implementarea algoritmului ………………………………………………………………………………… 32
3.2.1 Modelul Deep CNN 1 ……………………………………………………………………………. 33
3.2.2 Modelul Deep CNN 2 ……………………………………………………………………………. 36
4. Rezultate experimentale …………………………………………………………………………………………………. 38
4.1 Clasificarea imaginilor și precizia rețelei ………………………………………………………………. 38
4.2 Indici de evaluare a performanțelor ………………………………………………………………………. 41
4.3 Rezultate experimentale ……………………………………………………………………………………… 42
5. Concluzii ……………………………………………………………………………………………………………………… 67
6. Bibliografie …………………………………………………………………………………………………………………… 69
7. Anexe ………………………………………………………………………………………………………………………….. 71
7.1 Anexa 1 – codul sursă pentru prima rețea neurală …………………………………………………… 71
7.2 Anexa 2 – codul celei de-a doua rețele neurale ……………………………………………………….. 72
7.3 Anexa 3 – codul care modifică imaginile color în imagini alb-negru …………………………. 73

Lista figurilor

Figura 2.1: Structura unei rețele neurale convoluționale de clasificare care are în componență straturi
de convoluție (Convolution), straturi de activare (ReLU), straturi de Pooling și un strat de clasificare
(FC). Sursa: [10] ……………………………………………………………………………………………………………….. 19
Figura 2.2: Convoluția unei imagini cu un filtru de 3×3 (imaginea inițială este cea de jos, cu
dimensiunea 4×4, imaginea rezultată este cea de sus, cu dimensiunea 2×2). Sursa: [11] ……………… 21
Figura 2.3: Aplicarea unui filtru de 3×3 dilatat cu un factor de 2×2. Sursa: [11] ………………………… 22
Figura 2.4: Convoluția unei imagini bordate cu zero cu un filtru de 3×3. Sursa: [11] ………………….. 22
Figura 2.5: Graficul funcției ReLU. Sursa: [15] ……………………………………………………………………. 24
Figura 2.6: Modul de funcționare al funcției softmax. Sursa: [18] ……………………………………………. 26
Figura 3.1: Imaginea unui subiect în stare de normalitate ……………………………………………………….. 28
Figura 3.2: Imaginea unui subiect în stare de ebrietate ……………………………………………………………. 29
Figura 3.3: Imagine color ……………………………………………………………………………………………………. 30
Figura 3.4: Imagine alb-negru …………………………………………………………………………………………….. 30
Figura 3.5: Imaginea unui subiect în stare de normalitate ……………………………………………………….. 31
Figura 3.6: Imaginea unui subiect în stare de ebrietate ……………………………………………………………. 31
Figura 3.7: Obiect de tip ImageDatastore ……………………………………………………………………………… 32
Figura 3.8: Diagrama primei rețelei neurale ………………………………………………………………………….. 35
Figura 3.9: Diagrama celei de-a doua rețele neurale ……………………………………………………………….. 37
Figura 4.1: Graficul preciziei rețelei …………………………………………………………………………………….. 39
Figura 4.2: Graficul funcției de pierderi ………………………………………………………………………………… 39
Figura 4.3: Legenda graficelor …………………………………………………………………………………………….. 39
Figura 4.4: Informații legate de procesul de antrenare …………………………………………………………….. 40
Figura 4.5: Exemplu de matrice de confuzie ………………………………………………………………………….. 41
Figura 4.6: Graficul variației preciziei ………………………………………………………………………………….. 42
Figura 4.7: Graficul funcției de pierderi ………………………………………………………………………………… 42
Figura 4.8: Informații despre procesul de antrenare ………………………………………………………………… 43
Figura 4.9: Matricea de confuzie …………………………………………………………………………………………. 43
Figura 4.10: Graficul variației preciziei ………………………………………………………………………………… 44
Figura 4.11: Graficul funcției de pierderi ………………………………………………………………………………. 44
Figura 4.12: Informații despre procesul de antrenare ………………………………………………………………. 44
Figura 4.13: Matricea de confuzie ……………………………………………………………………………………….. 45
Figura 4.14: Graficul variației preciziei ………………………………………………………………………………… 45
Figura 4.15: Graficul funcției de pierderi ………………………………………………………………………………. 45
Figura 4.16: Informații despre procesul de antrenare ………………………………………………………………. 46
Figura 4.17: Matricea de confuzie ……………………………………………………………………………………….. 46
Figura 4.18: Graficul variației preciziei ………………………………………………………………………………… 47
Figura 4.19: Graficul funcției de pierderi ………………………………………………………………………………. 47
Figura 4.20: Informații despre procesul de antrenare ………………………………………………………………. 47
Figura 4.21: Matricea de confuzie ……………………………………………………………………………………….. 48
Figura 4.22: Graficul variației preciziei ………………………………………………………………………………… 48
Figura 4.23: Graficul funcției de pierderi ………………………………………………………………………………. 48
Figura 4.24: Informații despre procesul de antrenare ………………………………………………………………. 49

Figura 4.25: Matricea de confuzie ……………………………………………………………………………………….. 49
Figura 4.26: Graficul variației preciziei ………………………………………………………………………………… 50
Figura 4.27: Graficul funcției de pierderi ………………………………………………………………………………. 50
Figura 4.28: Informații despre procesul de antrenare ………………………………………………………………. 50
Figura 4.29: Matricea de confuzie ……………………………………………………………………………………….. 51
Figura 4.30: Graficul variației preciziei ………………………………………………………………………………… 51
Figura 4.31: Graficul funcției de pierderi ………………………………………………………………………………. 51
Figura 4.32: Informații despre procesul de antrenare ………………………………………………………………. 52
Figura 4.33: Matricea de confuzie ……………………………………………………………………………………….. 52
Figura 4.34: Graficul variației preciziei ………………………………………………………………………………… 53
Figura 4.35: Graficul funcției de pierderi ………………………………………………………………………………. 53
Figura 4.36: Informații despre procesul de antrenare ………………………………………………………………. 53
Figura 4.37: Matricea de confuzie ……………………………………………………………………………………….. 54
Figura 4.38: Graficul variației preciziei ………………………………………………………………………………… 55
Figura 4.39: Graficul funcției de pierderi ………………………………………………………………………………. 55
Figura 4.40: Matricea de confuzie ……………………………………………………………………………………….. 55
Figura 4.41: Informații despre procesul de antrenare ………………………………………………………………. 56
Figura 4.42: Graficul variației preciziei ………………………………………………………………………………… 56
Figura 4.43: Graficul funcției de pierderi ………………………………………………………………………………. 56
Figura 4.44: Informații despre procesul de antrenare ………………………………………………………………. 57
Figura 4.45: Matricea de confuzie ……………………………………………………………………………………….. 57
Figura 4.46: Graficul variației preciziei ………………………………………………………………………………… 57
Figura 4.47: Graficul funcției de pierderi ………………………………………………………………………………. 58
Figura 4.48: Informații despre procesul de antrenare ………………………………………………………………. 58
Figura 4.49: Matricea de confuzie ……………………………………………………………………………………….. 58
Figura 4.50: Graficul variației preciziei ………………………………………………………………………………… 59
Figura 4.51: Graficul funcției de pierderi ………………………………………………………………………………. 59
Figura 4.52: Informații despre procesul de antrenare ………………………………………………………………. 59
Figura 4.53: Matricea de confuzie ……………………………………………………………………………………….. 60
Figura 4.54: Graficul variației preciziei ………………………………………………………………………………… 60
Figura 4.55: Graficul funcției de pierderi ………………………………………………………………………………. 60
Figura 4.56: Informații despre procesul de antrenare ………………………………………………………………. 61
Figura 4.57: Matricea de confuzie ……………………………………………………………………………………….. 61
Figura 4.58: Graficul variației preciziei ………………………………………………………………………………… 62
Figura 4.59: Graficul funcției de pierderi ………………………………………………………………………………. 62
Figura 4.60: Informații despre procesul de antrenare ………………………………………………………………. 62
Figura 4.61: Matricea de confuzie ……………………………………………………………………………………….. 63
Figura 4.62: Graficul variației preciziei ………………………………………………………………………………… 63
Figura 4.63: Graficul funcției de pierderi ………………………………………………………………………………. 63
Figura 4.64: Informații despre procesul de antrenare ………………………………………………………………. 64
Figura 4.65: Matricea de confuzie ……………………………………………………………………………………….. 64
Figura 4.66: Graficul variației preciziei ………………………………………………………………………………… 65
Figura 4.67: Graficul funcției de pierderi ………………………………………………………………………………. 65
Figura 4.68: Informații despre procesul de antrenare ………………………………………………………………. 65
Figura 4.69: Matricea de confuzie ……………………………………………………………………………………….. 66

Lista tabelelor

Tabelul 2.1: Lista parametrilor funcției imageInputLayer care descriu input-ul. Sursa: [12] … 20
Tabelul 2.2: Lista parametrilor care descriu stratul, valabilă pentru toate funcțiile de creare de straturi.
Sursa: [12] ……………………………………………………………………………………………………………………….. 21
Tabelul 2.3: Lista parametrilor funcției convolution2dLayer care descriu convoluția. Sursa:
[13] …………………………………………………………………………………………………………………………………. 23
Tabelul 2.4: Lista parametrilor funcției maxPooling2dLayer care descriu metoda de pooling
utilizată. Sursa: [16] …………………………………………………………………………………………………………… 25
Tabelul 3.1: Lista parametrilor funcției imageDatastore . Sursa: [22] ………………………………… 32
Tabelul 4.1: Lista parametrilor funcției trainingOptions . Sursa: [24] …………………………. 38-39
Tabelul 4.2: Centralizarea scorurilor obținute cu prima rețea neurală ……………………………………….. 54
Tabelul 4.3: Centralizarea scorurilor obținute cu a doua rețea neurală ………………………………………. 54
Tabelul 4.4: Centralizarea scorurilor obținute cu prima rețea neurală ……………………………………….. 66
Tabelul 4.5: Centralizarea scorurilor obținute cu a doua rețea neurală ………………………………………. 66
Tabelul 5.1: Centralizarea scorurilor obținute pe baza de date A ……………………………………………… 67
Tabelul 5.2: Centralizarea scorurilor obținute pe baza de date B ……………………………………………… 67

Lista acronimelor

IR – infraroșu
CNN – Convolutional Neural Networks
PCNN – Pulse-Coupled Neural Networks
PCA – Principal Component Analysis
LDA – Linear Discriminant Analysis
SVM – Support Vector Machine
MLP – Multilayer Perceptron
ReLU – Rectified Linear Unit

14
Introducere

La nivel global, guvernele și companiile private (precum Google, Facebook, Microsoft, IBM)
pun tehnologiile biometrice în centrul unor proiecte de cercetare ambițioase, care variază de la
controlul accesului în clădiri la cărți de identitate, permise de conducere și pașapoarte high-tech. Una
dintre cele mai importante zone ale tehnologiei biometrice este recunoașterea feței folosind imagini
din spectrul vizibil și/sau termal. În particular, tehnologia de recunoaștere facială ar putea ajuta la
urmărirea suspecților de terorism. Un domeniu legat de recunoașterea feței este recunoașterea
emoțiilor prin analiza expresiilor faciale; acest domeniu face parte din aria comunicării om-mașină.
Recunoașterea facială bazată pe imagini din domeniul vizibil are mari dificultăți de funcționare în
medii necontrolate. Precizia de recunoaștere a feței scade rapid atunci când iluminarea este slabă sau
când fața nu este luminată în mod uniform. Lumina reflectată de chipurile umane, de asemenea,
variază în funcție de culoarea pielii. Utilizarea imaginilor din spectrul infraroșu (IR) termal poate
îmbunătăți performanța de recunoaștere a feței în condiții de iluminare necontrolată. Spectrul
infraroșu termal care conține domeniul IR cu lungimi medii (3-5 µm), precum și domeniul IR cu
lungimi de undă mari (8-12 µm), a fost sugerat ca sursă alternativă de informație pentru detecția și
recunoașterea fețelor. Senzorii din domeniul termal măsoară energia emisă de obiecte, nu pe cea
reflectată. De aceea, imaginile termale au mari avantaje în recunoașterea facială în condiții de
iluminare scăzută sau chiar în întuneric total, caz în care tehnicile de recunoaștere a feței din spectrul
vizibil eșuează [1][2].
Lucrarea prezintă una dintre aplicațiile recunoașterii faciale, și anume identificarea stării de
ebrietate a unui individ. În vederea realizării acestei aplicații, au fost utilizate două rețele neurale
convoluționale profunde (Deep Convolutional Neural Networks) diferite pentru a evalua și compara
scorurile de clasificare corectă, erorile fals pozitive și cele fals negative, obținute în urma clasificării
a două baze de date diferite. Utilizând cele două rețele neurale, scorurile de clasificare ale imaginilor
subiecților în stare de normalitate și în stare de normalitate au fost de peste 90%, în unele cazuri
depășind chiar 95%.
În continuare, se vor prezenta tema lucrării și tehnologia aleasă pentru implementarea ei,
precum și rezultatele experimentale obținute și concluziile la care am ajuns în urma acestui proiect.

15
Capitolul 1
Identificarea stării de ebrietate (State of the Art)

Accidentele rutiere sunt o amenințare la nivel mondial în fiecare țară. Raportul stării globale
cu privire la siguranța rutieră din 2013 întocmit de Organizația Națiunilor Unite (ONU) prezintă
informații despre siguranța rutieră din 182 de țări, reprezentând aproape 99% din populația lumii [3].
Raportul indică faptul că la nivel mondial numărul total de decese din traficul rutier are o valoare
inacceptabilă de 1.24 de milioane pe an. Doar 28 de țări, acoperind 7% din populația lumii, au legi
cuprinzătoare în materie de siguranță rutieră pe cinci factori cheie de risc: conducerea sub influența
alcoolului, excesul de viteză, utilizarea căștilor de protecție pentru motociclete, centuri de siguranță
și scaune speciale pentru copii. Aceste cifre cresc într-un ritm alarmant de la an la an. În cazul în care
nu se iau măsuri, numărul de decese va crește la 2.4 milioane până în 2030. Un procent semnificativ
al acestor accidente este provocat de conducătorii auto care au gradul de alcoolemie peste limita
legală. Lucrarea curentă abordează această problemă prin analiza imaginilor faciale termale ale
subiecților. Starea de ebrietate este o condiție fiziologică complexă dificil de diagnosticat, mai ales
de la distanță, fără a colabora cu subiectul. Cu toate acestea, majoritatea publicațiilor din acest
domeniu se referă la sistemele auto anti-ebrietate pentru șoferi care folosesc semnale electrice
achizițioante de la nivelul inimii sau al creierului [1][2][2 bis].
Neagoe și Carata au propus o metodă de identificare a stării de ebrietate bazată pe analiza
imaginilor din domeniul infraroșu termal [2][2 bis]. Metoda constă în următoarele etape: (a) achiziția
imaginilor termale; (b) segmentarea imaginilor utilizând rețeaua cu cuplaj prin impulsuri (Pulse-
Coupled Neural Network – PCNN); (c) segmentarea caracteristicilor utilizând algoritmul de Analiză
a componentelor principale (Principal Component Analysis – PCA) cascadat cu algoritmul de Analiză
discriminatorie liniară (Linear Discriminant Analysis – LDA); (d) clasificarea cu Mașina cu vectori
suport (Support Vector Machine – SVM). Baza de date experimentală constă în imagini din domeniul
termal infraroșu a 10 subiecți (6 bărbați și 4 femei). Imaginile termale au fost preluate pentru ambele
condiții: normalitate și ebrietate, imaginile pentru starea de ebrietate fiind achiziționate după ce
persoana a băut o cantitate specificată de alcool. Parametrii PCNN-ului au fost optimizați utilizând
un algoritm genetic. Folosind analiza propusă a imaginilor termale, a fost obținut un scor de detecție
al stării de ebrietate de 97.5% [2][2 bis].
Koukiou și Anastassopoulus au publicat recent mai multe lucrări [4][5][6][7] care au ca scop
diagnosticarea stării de ebrietate folosind procesarea imaginilor faciale din domeniul infraroșu termal.
În lucrarea [4], identificarea stării de ebrietate se desfășoară utilizând imagini termale din
domeniul infraroșu. Sunt propuse două abordări diferite pentru a identifica o persoană în stare de
ebrietate pe baza valorilor radiometrice de pe fața ei.
În prima abordare, caracteristicile sunt valorilor pixelilor din puncte specifice ale feței
persoanei [4]. Este dovedit că cluster-ul acelor puncte ale unei anumite persoane se mișcă în spațiul
de caracteristici dacă persoana consumă alcool. Pentru reducerea dimensionalității spațiului este
folosită discriminarea liniară Fisher. Se constată că spațiul caracteristicilor are dimensiuni foarte mici.
Majoritatea cluster-elor se îndreaptă către aceeași direcție, iar spațiul caracteristicilor se poate separa
ușor în două regiuni: “sobru” și “băut”. Prin urmare, este introdus spațiul de caracteristici “băut”.

16
Acest spațiu poate fi utilizat pentru identificarea persoanelor în stare de ebrietate prin verificarea
poziției cluster-ului de puncte al persoanei în spațiul 2-D transformat [4].
În a doua abordare, sunt evaluate și monitorizate valorile diferențelor termale dintre diverse
puncte ale feței [4]. A fost descoperit că anumite zone ale feței alea unei persoane băute prezintă o
creștere a iluminării termice. Aceste zone sunt cele mai bune pentru identificarea unei persoane în
stare de ebrietat. Conceptul din spatele acestei abordări constă într-o procedură de identificare a feței
bazată pe fiziologie. Rezultatele experimentale au arătat o creștere a temperaturii în regiunile de lângă
gură și nas, precum și regiunile de pe frunte [4].
Ambele metode arată că o persoană băută prezintă diferențe termale față de o persoană sobră
și că aceste diferențe sunt proeminente între anumite regiuni ale feței [4]. Mai exact, potrivit celei de-
a doua metode, imaginea persoanei sobre nu este necesară. Doar fața subiectului este necesară pentru
a decide dacă se află sau nu în stare de ebrietate, din moment ce temperatura nasului este întotdeauna
mai mare decât cea a frunții [4].
În lucrarea [6], distribuția temperaturii de pe suprafața ochilor persoanelor în stare de
normalitate și ebrietate sunt studiate și sunt prezentate rezultate preliminare cu privire la schimbările
de temperatură. Se poate observa utilizând algoritmi simpli de procesare de imagini și tehnici de
modificare a histogramelor că diferența de temperatură dintre sclerotică și iris se mărește atunci când
persoana consumă alcool. Irisul devine mai întunecat, ceea ce înseamnă ca temperatura lui scade
comparativ cu cea a scleroticii [6].
În lucrarea [7], au fost testate rețele neurale pentru identificarea stării de ebrietate pe imagini
din domeniul infraroșu termal. Imaginile au fost preluate înainte și după ce o cantitate fixă de alcool
a fost consumată de 41 de persoane. Au fost utilizate două abordări.
În prima abordare, fiecare regiune a feței a fost examinată utilizând de fiecare dată rețele
neurale diferite, pentru a găsi care regiune poate fi utilizată pentru discriminarea unei persoane băute
față de una sobră. S-a constatat că principala regiune care își schimbă comportamenul termal atunci
când este consumată o anumită cantitate de alcool este fruntea [7].
În a doua procedură, a fost utilizată o singură rețea neurală care a fost antrenată cu imagini ale
întregii fețe. Perfomanța de discriminare a acestei structuri neurale a fost testată pe aceeași față,
precum și pe fețe diferite. Rețelele neurale au avut performanțe de discriminare ridicate chiar și pe
persoane diferite atunci când sunt antrenate cu imagini ale frunții persoanei în stare de normalitate,
respectiv, în stare de ebrietate. Structurile neurale mici au avut rezultate mai bune în procesul de
generalizare [7].
Concluzia la care s-a ajuns în urma tuturor lucrărilor de mai sus este succesul acestui tip de
abordare de bazează pe faptul ca vasele de sânge de pe fața unei persoane în stare de ebrietate își cresc
activitatea, față de vasele unei persoane în stare de normalitate, în urma consumului de alcool [1][2][2
bis].

17
Capitolul 2
Deep CNN

2.1 Deep Learning

Încercarea de a imita eficiența și flexibilitatea cu care creierul uman poate reprezenta
informațiile a fost una dintre cele mai mari provocări cu care cercetătorii din domeniul inteligenței
artificale s-au confruntat în ultimele decenii. Oamenii sunt expuși zilnic la nenumărați stimuli
senzoriali în fiecare secundă a zilei și cumva sunt capabili să rețină doar esențialul acestor informații
într-o manieră care permite utilizarea lor viitoare. Acum 50 de ani, Richard Bellman, cel care a
introdus teoria programării dinamice și a deschis drumul domeniului de control optimal, a afirmat că
numărul mare de dimensiuni al informației este un obstacol greu de depășit în majoritatea aplicațiilor
științifice și inginerești. Principala dificultate care apare, în particular în contextul aplicațiilor de
recunoaștere a formelor, este creșterea exponențială a complexității de învățare o dată cu creșterea
liniară a dimensionalității informației. Acest fenomen poartă denumirea de “blestemul
dimensionalității”. Cea mai comună abordare utilizată pentru depășirea acestui “obstacol” a fost
preprocesarea datelor într-o manieră care sa le reducă numărul de dimensiuni astfel încât informația
rezultată sa poată fi procesată în mod eficient de un modul de clasificare. Această metodă de reducere
a dimensionalității este deseori întâlnită sub denumirea de extragere de caracteristici. Ca urmare,
inteligența din spatele recunoașterii formelor a făcut trecerea către un proces extragere a
caracteristicilor proiectat de oameni, care uneori poate provoca multe probleme și poate să depindă
foarte mult de aplicația în care este utilizat. În plus, dacă sunt extrase caracteristici incomplete sau
eronate, clasificarea va avea o performanță limitată [8].
Selecția caracteristilor poate fi considerată un caz particular de reprezentare a datelor.
Performanțele algoritmilor de învățare ai rețelelor din domeniul Machine Learning (Multilayer
Perceptron, Radial Basis Function Network) depind sensibil de modul de reprezentare a datelor.
Problema constituie o provocare pentru că este dificil de estimat, de exemplu, ce caracteristici sunt
mai importante pentru a recunoaște fiecare obiect într-o anumită scenă analizată. O soluție a acestei
probleme este demersul pe care se bazează Deep Learning și care are la bază faptul că funcția de
machine learning nu trebuie să fie dedicată doar clasificării, ci și “învățării reprezentării”. Învățarea
automată a reprezentării poate conduce la performanțe mult mai bune decât reprezentările proiectate
după o inspirație individuală. Elementul cheie al învățării reprezentării este autocodorul. Autocodorul
realizează o combinație a unei funcții de codare care convertește datele de intrare într-o reprezentare
diferită și o funcție de decodare care convertește noua reprezentare înapoi în formatul original de
date. Autocodorul este antrenat pentru a conserva cât mai multă informație posibilă, conducând,
astfel, la performanțe cât mai bune. Desigur că este foarte dificil să fie extrase caracteristici abstracte
de nivel înalt care să nu fie influențate de factorii de variație, care constituie elemente parazite pentru
clasificarea finală. De exemplu, se consideră o aplicație de recunoaștere automată a vorbirii care să
nu fie influențată de accentul vorbitorului. Este dificil să se elimine factorul de variație consituit de
accentul vorbitorului. Un alt exemplu este analiza de scenă care constă în recunoașterea obiectelor
dintr-o imagine, indiferent de variațiile iluminării și ale perspectivei. Deep Learning rezolvă

18
asemenea probleme dificile de învățare a reprezentărilor, folosind metoda exprimării reprezentărilor
mai complexe în funcție de alte reprezentări mai simple [9].
Descoperirile recente din neuroștiință au furnizat cunoștințe noi despre modul în care creierul
mamiferelor percepe și reprezintă informațiile acumulate. Una dintre descoperirile cheie a fost că
neocortexul, care este asociat cu majoritatea abilităților cognitive, nu preprocesează explicit
semnalele stimulilor primite, ci le trece printr-o ierarhie complexă de module, care, în timp, învață
cum să le asocieze pe baza regularităților pe care le prezintă. Această descoperire a motivat apariția
sub-domeniului de Deep Machine Learning, care se axează pe modelele computaționale de
reprezentare a informației care prezintă caracteristici asemănătoare cu cele ale neocortexului [8].
Sistemul vizual uman are capabilitatea să recunoască eficient obiecte în scene complexe, dar
această sarcină este dificilă pentru majoritatea algoritmilor. Rețelele neurale Deep Learning imită
natura cortexului vizual al mamiferelor, una din aplicațiile cu rezultate promițătoare fiind
recunoașterea imaginilor, sarcină rezolvată cu succes de sistemul vizual uman, dar care, până la
introducerea tehnicilor de Deep Learning, s-a dovedit foarte dificilă pentru machine learning [9].
Pe lângă dimensionalitatea spațială a datelor din viața reală, componenta temporală joacă, de
asemenea, un rol cheie. O secvență de modele poate deseori avea înțeles pentru un observator, în timp
ce fragmente independente ale aceleiași secvențe pot fi greu de descifrat când sunt izolate. Înțelesul
este adesea dedus din evenimentele și observațiile făcute în acel moment de timp. În acest scop,
componenta temporală a observațiilor joacă un rol important în reprezentarea eficientă a informației.
Drept consecință, captarea dependențelor spațio-temporare, bazate pe regularitățile observate, este
obiectivul principal al sistemelor de “învățare profundă” [8].
În rețele de Deep Learning, fiecare strat de neuroni învață un set distinct de caracteristici
bazate pe ieșirea stratului anterior. Cu cât se avansează mai mult în rețeaua neurală, cu atât sunt mai
complexe caracteristicile care pot fi învățate, deoarece acestea combină caracteristicile straturilor
anterioare. Se consideră o rețea neurală Deep Learning obținută prin generalizarea MLP care are ca
sarcină să rezolve o aplicație de analiză de imagini. La intrare se aplică pixelii imaginii. Primul strat
ascuns (hidden layer) extrage marginile. Al doilea strat ascuns extrage contururile și colțurile. Al
treilea strat ascuns extrage părțile obiectelor. Stratul de ieșire recunoaște obiectele scenei [9].
Arhitecturile Deep Learning obțin cele mai bune rezultate atunci când au un număr mare de
straturi și utilizează un număr mare și variat de date de antrenare. Trebuie luat în considerare acest
aspect și utilizat un număr suficient de mare de date de antrenare reprezentative pentru multitudinea
de condiții care pot fi întâlnite în întregul set de date [9].
În concluzie, Deep Learning este un tip special de învățare automată (Machine Learning), care
permite sistemului să se îmbogățească cu experiență și date. Deep Learning, ca model particular de
Machine Learning, este caracterizat prin putere și flexibilitate de nivel înalt, putând fi antrenat să
reprezinte lumea ca o ierarhie complexă de concepte, unde fiecare concept este definit în relație cu
concepte mai simple și reprezentările abstracte complexe pot fi descrise în relație cu reprezentări mai
simple [9].
Cele mai comune implementări de Deep Learning sunt Rețelele Neurale Convoluționale
(Convolutional Neural Networks – CNN) și Rețelele cu Încredere Profundă (Deep Belief Networks –
DBN).

19
2.2 Rețele neurale convoluționale – descriere generală

Rețelele neurale convoluționale (CNN) sunt modele neurale multistrat specializate pe task-uri
de pattern recognition (recunoaștere de forme), fiind dezvoltări inspirate din biologie ale modelului
Multilayer Perceptron (MLP). Comparat cu rețelele standard feedforward cu același număr de starturi,
modelul CNN are mult mai puține conexiuni și implicit parametri, conducând la o antrenare mai
simplă, și totodată la performanțe superioare de recunoaștere [9].
CNN-urile sunt folosite pe scară largă în Deep Learning. Sunt utilizate în mod special pentru
aplicațiile care au ca input imagini, dar pot fi folosite și pentru prelucrarea altor tipuri de date, cum
ar fi text sau semnalele continue [10].
CNN-urile sunt inspirate din structura biologică a cortexului vizual, care conține aranjamente
de celule simple și complexe. Aceste celule sunt responsabile pentru anumite subregiuni ale câmpului
vizual, numite câmpuri receptive. Urmând acest model, neuronii dintr-un strat convoluțional sunt
conectați doar la anumite subregiuni ale unui strat, în loc să fie complet conectați la fel ca în celelalte
tipuri de rețele neurale. Neuronii nu sunt responsabili pentru zonele aflate în afara acestor subregiuni
din imagine. Există posibilitatea ca aceste regiuni să se suprapună, deci neuronii unei rețele
convoluționale produc rezultate corelate spațial, în timp ce în cazul celorlalte rețele neurale, neuronii
produc rezultate independente. În plus, într-o rețea neurală cu neuroni complet conectați, numărul
parametrilor (ponderilor) poate crește rapid o dată odată cu creșterea dimensiunilor intrării. O rețea
neurală convoluțională reduce numărul acestor parametri prin utilizarea unui număr mic de conexiuni
între neuroni, prin utilizarea de ponderi comune și prin sub-eșantionare (scăderea dimensiunilor
imaginii) [10].
O rețea convoluțională poate avea mai multe straturi, cum ar fi: straturi convoluționale, straturi
de pooling, straturi de activare și straturi complet conectate [10].

Figura 2.1: Structura unei rețele neurale convoluționale de clasificare care are în componență
straturi de convoluție (Convolution), straturi de activare (ReLU), straturi de Pooling și un strat de
clasificare (FC). Sursa: [10]

20
2.3 Straturile unei rețele neurale convoluționale

2.3.1 Stratul de intrare

Rolul stratului de intrare este de a introduce imaginile într-o rețea și de a normaliza datele. Se
poate crea utilizând funcția imageInputLayer , cu ajutorul căreia se specifică dimensiunile
imaginii, precum și numărul de canale de culoare ale imaginii respective (1 pentru o imagine alb-
negru, 3 pentru o imagine color) [11][12].

Denumire Exemple de valori Descriere
InputSize [224 224 3] Dimensiunile datelor de la
intrare, specificate sub forma [h
w c], unde h reprezintă înălțimea
imaginii, w reprezintă lățimea ei,
iar c reprezintă numărul de
canale de culoare
Normalization ‘zerocenter’ – scade din imaginea inițială
imaginea medie specificată de
parametrul AverageImage ; imaginea
medie este automat calculată la
antrenarea rețelei (atunci când funcția
trainNetwork este apelată) Tipul de normalizare care se
aplică datelor la intrare

‘none’ – datele de intrare nu sunt
normalizate
AverageImage [224 224 3] Imaginea medie utilizată pentru
normalizarea de tip ‘zerocenter’,
specificată printr-un vector de
forma [h w c], unde h reprezintă
înălțimea imaginii, w reprezintă
lățimea ei, iar c reprezintă
numărul de canale de culoare
DataAugmentation ‘none’ – nu se face nicio transformare
asupra datelor
Transformă datele utilizate la
antrenare ‘randcrop’ – se taie aleator o porțiune
dintr-o imagine egala cu dimensiunea
imaginilor de la intrare
‘randfliplr’ – există o șansă de 50% ca
imaginile sa fie puse în oglindă față de
orizontală
cell array of ‘randcrop’ and ‘randfliplr’ –
transformarea datelor este aplicată în
ordinea specificată în acest vector

Tabelul 2.1: Lista parametrilor funcției imageInputLayer care descriu input-ul. Sursa: [12]

21
Denumire Exemple de valori Descriere
Name nume oarecare Numele stratului
NumInputs 1 Numărul de intrări
InputNames in Denumirile intrărilor
NumOutputs 1 Numărul de ieșiri
OutputNames out Denumirea ieșirilor

Tabelul 2.2: Lista parametrilor care descriu stratul, valabilă pentru toate funcțiile de creare de
straturi. Sursa: [12]

2.3.2 Stratul convoluțional

Straturile convoluționale ale unui CNN pot avea diferite dimensiuni, dar, în acest caz, vor
avea două dimensiuni. Se pot crea utilizând funcția convolution2dLayer și sunt formate din
următoarele componente [11]:
a. Filtrul. Un strat convoluțional are în componență mai mulți neuroni care sunt conectați cu
imaginile de la intrare sau cu ieșirile straturilor anterioare. Stratul învață caracteristicile localizate în
aceste regiuni în timp ce parcurge o imagine. Pentru fiecare regiune, funcția trainNetwork
calculează produsul scalar dintre ponderi și intrare la care se adaugă un termen de pierderi (bias).
Setul de ponderi aplicat unei regiuni se numește filtru. Filtrul parcurge toata imaginea și aplică același
calcul pe fiecare regiune, adică realizează convoluția imaginii cu filtrul. La crearea stratului utilizând
funcția convolution2dLayer , se poate specifica dimensiunea acestor filtre prin intermediul
parametrului filterSize [11].

Figura 2.2: Convoluția unei imagini cu un filtru de 3×3 (imaginea inițială este cea de jos, cu
dimensiunea 4×4, imaginea rezultată este cea de sus, cu dimensiunea 2×2). Sursa: [11]

22
b. Pasul. Distanța cu care filtrul parcurge imaginea se numește pas. Pasul poate fi specificat
prin utilizarea parametrului ‘Stride’. În funcție de valorile parametrilor filterSize și ‘Stride’,
regiunile locale la care sunt conectați neuronii stratului se pot suprapune. În figura 2.2, pasul ales are
valoarea 1 [11].
Numărul de ponderi ale unui filtru este egal cu produsul dintre h * w * c, unde h este înălțimea
filtrului, w este lățimea lui, iar c este numărul de canale ale intrării. Numărul de filtre se poate
specifica utilizând argumentul numFilters al funcției convolution2dLayer [11].
c. Convoluția dilatată are loc atunci când filtrele sunt extinse cu spații inserate între ponderile
filtrului. Factorul de dilatație se poate specifica folosind argumentul ‘ DilationFactor ’.
Convoluțiile dilatate se pot folosi pentru a crește câmpul receptiv al filtrului fără a crește numărul de
parametri ai calculului. Stratul extinde filtrul inserând zerouri între toate elementele filtrului. Factorul
de dilatare determină dimensiunea pasului cu care este eșantionată intrarea [11].
Figura 2.3: Aplicarea unui filtru de 3×3 dilatat cu un factor de 2×2. Sursa: [11]

Filtrul expandat corespunde unui filtru de dimensiune (dimensiune filtru – 1) .* factor de
dilatație + 1. De exemplu, un filtru de 3×3 cu un factor de dilatare egal cu [2 2] este echivalent cu un
filtru de 5×5 care are zerouri între elemente (figura 2.3) [11].
d. Harta de caracteristici . Pe măsură ce filtrul parcurge imaginea de la intrare, se folosește
același set de ponderi și același termen de bias în calculul convoluției, formându-se, astfel, o hartă de
caracteristici (feature map). Fiecare hartă este rezultatul unei convoluții care utilizează diferite seturi
de ponderi și diferiți termeni de pierderi. Așadar, numărul de hărți de caracteristici este egal cu
numărul filtrelor. Numărul total de parametrii ai unui strat convoluțional este egal cu ((h * w * c + 1)
* numărul de filtre), unde 1 este termenul de bias [11].
e. Bordarea cu zero . Se poate borda cu zero imaginea inițială prin utilizarea parametrului
‘Padding ’. Astfel, se poate modifica dimensiunea ieșirii stratului (figura 2.4) [11].
Figura 2.4: Convoluția unei imagini bordate cu zero cu un filtru de 3×3. Sursa: [11]

23
f. Dimensiunea ieșirii stratului . Înălțimea și lățimea de la ieșirea stratului convoluțional sunt
egale cu (dimensiunea intrării – ((dimensiunea filtrului – 1) * factorului de dilatație + 1) + 2 * bordarea)
/ pas + 1. Această valoare trebuie să fie egală cu un întreg ca imaginea să fie parcursă în întregime de
filtru. Dacă modul de configurare al filtrului nu duce la parcurgerea întregii imagini, atunci partea
neparcursă a imaginii este ignorată [11].
g. Numărul de neuroni . Produsul dintre înălțimea și lățimea imaginii de la ieșire este egal cu
numărul de neuroni din harta de caracteristici (dimensiunea hărții). Numărul total de neuroni din
stratul convoluțional este egal cu dimensiunea hărții * numărul de filtre [11].
h. Numărul de straturi . O rețea poate să aibă în componență unul sau mai multe straturi
convoluționale. Acest număr depinde de cantitatea și complexitatea datelor [11].

Denumire Exemple de valori Descriere
FilterSize [5 5] Dimensiunile filtrului specificate sub forma
unui vector
NumFilters 96 Numărul de filtre specificat printr-un număr
întreg pozitiv. Corespunde numărului de
neuroni din stratul convoluțional care sunt
conectați la aceeași regiune din imaginea de
la intrare. Determină numărul de caracteristici
ale ieșirii.
Stride [2 3] – pas vertical de 2, pas
orizontal de 3 Dimensiunea pasului cu care se parcurge pe
verticală și pe orizontală imaginea, specificată
printr-un vector [a b], a și b fiind două
numere întregi pozitive
DilationFactor [2 3] Vector de două numere întregi pozitive, [h
w], unde h reprezintă dilatarea verticală, iar w
reprezintă dilatarea orizontală
PaddingSize [1 1 2 2] – bordează cu o linie
sus și cu una jos, și cu 2 coloane
la dreapta și la stânga input-ului Vector de forma [t b l r], unde t este numărul
de linii care se adaugă deasupra imaginii, b
este numărul de linii care se adaugă sub
imagine, l este numărul de coloane care se
adaugă la stânga imaginii, r este numărul de
coloane care se adaugă la dreapta imaginii
Padding [1 1] – adaugă o linie sus și una
jos, și o coloană la dreapta și la
stânga input-ului Numărul de linii si coloane adăugate imaginii
NumChannels 256 Parametrul este întotdeauna egal cu numărul
de canale al imaginii de la intrare
‘auto’ Numărul de canale este determinat automat la
antrenare

Tabelul 2.3: Lista parametrilor funcției convolution2dLayer care descriu convoluția. Sursa:
[13]

24
2.3.3 Stratul de normalizare a lotului

Stratul de normalizare a lotului normalizează fiecare canal al intrării o dată cu parcurgerea
unui mini-lot. Acesta are rolul de a mări viteza cu care o rețea neurală convoluțională este antrenată
și de a reduce sensibilitatea rețelei la inițializare. Se folosește, de obicei, între straturile convoluționale
și cele de neliniaritate, cum sunt straturile ReLU. Stratul normalizează funcțiile de activare ale
neuronilor și gradienții care se propagă prin o rețea neurală, facilitând, astfel, operația de optimizare.
Stratul se creează utilizând funcția batchNormalizationLayer [11].

2.3.4 Stratul de activare neliniară

Straturile de activare neliniară sunt utilizate pentru a crește acuratețea unei rețele neurale. Pot
fi de mai multe tipuri, dintre care cele mai cunoscute sunt cele care au ca funcție de activare tangenta
hiperbolică, funcția sigmoidă și straturile de tip ReLU (Rectified Linear Unit) [11]. În urma a diferite
teste, s-a constatat ca tangenta hiperbolică și sigmoida suferă fenomenul de “dispariție” a gradientului
când sunt folosite în rețele cu multe straturi [14]. Soluția acestei probleme este utilizarea straturilor
de tip ReLU, a cărui funcție aplică un prag asupra fiecărui element al intrării, care transformă fiecare
valoare negativă în zero și lasă valorile pozitive neschimbate [11]:

𝑓(𝑥)= ቄ𝑥,𝑥 ≥ 0
0,𝑥 < 0

Acest strat nu schimbă dimensiunea intrării. Se creează prin apelul funcției reluLayer [11].

Figura 2.5: Graficul funcției ReLU. Sursa: [15]

25
2.3.5 Stratul de pooling

Stratul de max pooling execută o operație de sub-eșantionare asupra intrării, împărțind-o în
regiuni dreptunghiulare, din care este extrasă valoarea maximă. Se poate crea utilizând funcția
maxPooling2dLayer [11].
Stratul de average pooling execută o operație de sub-eșantionare asupra intrării, împărțind-o
în regiuni dreptunghiulare, din care este extrasă media valorilor. Se poate crea apelând funcția
averagePooling2dLayer [11].
Straturile de pooling se utilizează după straturile convoluționale pentru sub-eșantionare
(reducerea dimensiunilor hărților de caracteristici), reducându-se numărul de conexiuni cu straturile
următoare. Ele nu ajută la învățare, dar îmbunătățesc viteza de convergență (reduc efortul
computațional) și cresc capacitatea de generalizare datorită invarianței la poziție [9][11].

Denumire Exemple de valori Descriere
PoolSize [2 1] Dimensiunea regiunii de pooling,
specificată printr-un vector de două
numere întregi pozitive [h w], h
fiind înălțimea, iar w lățimea
Stride [2 3] Dimensiunea pasului cu care se
face parcurgerea intrării, specificată
printr-un vector [a b] de numere
întregi pozitive, unde a este
dimensiunea pasului pe vertical, iar
b este dimensiunea pasului pe
orizontală
PaddingSize [1 1 2 2] Dimensiunea bordării adăugate
imaginii, specificată printr-un
vector [t b l r] de numere întregi
pozitive, unde t este bordarea
aplicată deasupra, b este bordarea
aplicată dedesubt, l este bordarea
de la stânga, iar r este bordarea de
la dreapta
Padding [1 1] Dimensiunea bordării aplicate,
specificată printr-un vector de două
numere întregi pozitive, unde a este
dimensiunea bordării aplicate
deasupra și sub imagine, iar b este
dimensiunea aplicată la stânga și la
dreapta imaginii

Tabelul 2.4: Lista parametrilor funcției maxPooling2dLayer care descriu metoda de pooling
utilizată. Sursa: [16]

26
2.3.6 Stratul de dropout

Stratul de dropout egalează aleator un element al intrării cu zero cu o anumită probabilitate.
La antrenare, stratul execută această operație pe baza măștii de dropout rand(size(X)) < probabilitate,
unde X este intrarea, și scalează restul elementelor cu 1 / (1 – probabilitate). Această operație ajută la
oprirea fenomenului de overfitting [11].
Overfitting-ul apare atunci când rețeaua învață detaliile și zgomotul datelor de antrenare încât
acestea ajung să influențeze în mod negativ performanța rețelei când sunt utilizate alte date. Cu alte
cuvinte, rețeaua percepe zgomotul sau fluctuațiile aleatoare ce apar în imagini drept concepte de bază
ale modelelor ce urmează a fi clasificate și acest lucru are un impact negativ asupra abilității de a
clasfica a rețelei [17].

2.3.7 Stratul complet conectat

Stratul complet conectat înmulțește intrarea cu o matrice de ponderi și adună la rezultat
vectorul de pierderi [11].
Toți neuronii din acest strat sunt conectați cu toți neuronii din stratul anterior. Stratul combină
toate caracteristicile (informația locală) învățate de către celelalte straturi pentru a identifica forme
mai complexe. Pentru probleme de clasificare, ultimul strat complet conectat combină caracteristicile
necesare clasificării imaginilor, și, din acest motiv, argumentul outputSize al funcției care crează
acest strat, fullyConnectedLayer , este egal cu numărul de clase al setului de date [11].
Este utilizat după straturile convoluționale și cele de pooling [11].

2.3.8 Straturile de ieșire

Straturile de ieșire sunt de mai multe tipuri. Cele folosite în această lucrare sunt stratul softmax
și stratul de clasificare.
Funcția stratului softmax rescalează valorile de la intrare astfel încât aceastea au valori între
0 și 1, iar suma lor este egală cu 1. Funcția softmax este echivalentul unei densități de probabilitate.
Aceasta va indica care este probabilitățile ca o imagine să aparțină fiecărei clase [18].

Figura 2.6: Modul de funcționare al funcției softmax. Sursa: [18]

27
Stratul de clasificare este utilizat după stratul de softmax. În acest strat, funcția
trainNetwork preia valorile funcției softmax și atribuie fiecare valoare uneia dintre cele K clase
bine diferențiate, folosind funcția de entropie încrucișată pentru o schemă de codificare 1-K [11]:

𝑙𝑜𝑠𝑠= −෍ ෍ 𝑡௜௝ln𝑦௜௝௄
௝ୀଵே
௜ୀଵ

unde N este numărul de eșantionate, K este numărul de clase, t ij este indicatorul care arată apartenența
eșantionului i la clasa j, iar y ij este rezultatul pentru eșantionul i și clasa j, care în acest caz, este
valorea funcției de softmax. În concluzie, este probabilitatea cu care rețeaua asociază intrarea i cu
clasa j [11].
loss este funcția de pierderi a pierderi a modelului. Aceasta evaluează cât de bine modelează
un anumit algoritm informațiile utilizate. Dacă precizia predicției este mică, atunci funcția loss are o
valoare mare [19].

28
Capitolul 3
Model propus. Implementarea algoritmului

3.1 Bazele de date

3.1.1 Baza de date A

Prima baza de date utilizată este cea creată de către Georgia Koukiou și Vassilis
Anastassopoulos, amândoi profesori la Universitatea din Patras, Politehnica din Creta. Imaginile din
spectrul infraroșu au fost preluate cu o cameră FLIR (18 mm, f/1.6) Thermo Vision Micron/A10.
Lungimile de undă folosite variază între 7.5 și 13 microni [7].
Imaginile au fost preluate de la 41 de subiecți, 31 de bărbați și 10 femei, înainte și la o oră de
la consumarea a patru pahare de vin de 120 de ml. La fiecare achiziție de imagini, au fost obținute
câte 50 de cadre de la fiecare persoană, perioada de timp dintre două cadre fiind de 100 ms. Prima
achiziție a fost efectuată înainte de consumul de alcool, iar a doua la o oră după, numărul total de
cadre achiziționate fiind egal cu 41 * 50 * 2 = 4100. Rezoluția acestor fotografii este de 128×160
pixeli [7].
Procedura experimentală presupune utilizarea pozelor subiecților în stare “sobră” și în stare
de ebrietate. Prin urmare, oamenii care au participat la acest experiment trebuiau să cunoască cerințele
procedurii. Astfel, persoanele alese să participe la experiment au fost chiar colegii de departament ai
celor doi cercetători. Toți participanții erau sănătoși la momentul procedurii și au fost de acord ca
datele lor personale, inclusiv fotografiile, să fie încărcate pe Internet pentru viitoare utilizări [7].
Termenul de “băut” este asociat persoanelor care au consumat 480 ml de vin (62.4 ml de
alcool). Aceasta este cantitatea maximă de alcool care putea fi consumată de către participanți. Au
fost efectuate teste cu etilotestul, în urma cărora, persoanele care au consumat cele patru pahare de
vin au fost declarate în stare de ebrietate [7].

Figura 3.1: Imaginea unui subiect în stare de normalitate

29

Figura 3.2: Imaginea unui subiect în stare de ebrietate
De asemenea, trebuie menționat ca persoanele angajate în experiment au fost calme și nu au
fost solicitate fizic sau psihologic în timpul procedurii. Singurele cerințe au fost ca acestea să fie
prezente cu jumătate de oră înainte de experiment și să rămână calme în timpul achiziției cadrelor [7].
În timpul procedurii, temperatura și lumina din cameră au rămas neschimbate. Distanța dintre
fețele participanților și camera a fost de aproximativ 30 cm. Cadrele au fost prealuate simultan, astfel
încât participantul a ramas nemișcat. Ca urmare, fața subiectului ocupă aproape toată suprafața
cadrului, acest lucru ușurând compararea imaginilor provenite de la aceeași persoană [7].
Baza de date poate fi accesată la link-ul [20]. Pentru lucrarea curentă, am utilizat fișierele .tif
care conțin cadrele de dinaintea consumului de alcool și cele care conțin cadrele la o oră după
consumarea alcoolului. Pentru facilitarea interfațării bazei de date la rețelele neurale folosite, am
împărțit fiecare fișier .tif în câte 50 de cadre utilizând un convertor [21]. Ca urmare, baza de date este
constituită din 4100 de imagini de dimensiune 128×160, 2050 reprezentând imaginile subiecților în
stare “sobră”, celelalte 2050 reprezentând imaginile subiecților în stare de ebrietate.

3.1.2 Baza de date B

A doua bază de date a fost construită în cadrul laboratorului de Sisteme Inteligente și Vedere
Artificială (SIVA) al Facultății de Electronică, Telecomunicații și Tehnologia Informației,
Universitatea Politehnica București [1][2][2 bis]. Imaginile utilizate sunt din spectrul infraroșu termal
pentru identificarea stării de ebrietate. Imaginile au fost preluate cu ajutorul unei camere B2 FLIR
ThermaCAM în domeniul lungimilor de undă 7.5 – 13 µm. Celor 10 subiecți, care au participat la
experiment, le-au fost făcute câte 40 de fotografii, 20 pentru starea de normalitate, 20 pentru starea
de ebrietate, totalul de imagini conținut de baza de date fiind de 400 de imagini. Imaginile stării de
normalitate au fost preluate înainte de a consuma alcool, iar cele pentru starea de ebrietate au fost
preluate după 30 de minute de la momentul în care persoana a băut o cantitate de 100 ml de whisky

30
(40 grade de alcool). Pentru fiecare subiect, jumătate din pozele efectuate au fost folosite la antrenare,
cealaltă jumătate fiind folosită la pentru a testa acuratețea rețelei [1][2][2 bis].
Rețelele neurale profunde folosite sunt implementate pentru imagini de dimensiuni mici,
128×160, alb-negru. Imaginile inițiale din această bază de date au dimensiunea de 576×704 pixeli și
sunt color (figura 3.3).

Figura 3.3: Imagine color

Pentru a transforma imaginile în alb-negru (figura 3.4) am utilizat script-ul MATLAB de la
Anexa 3, iar pentru redimensionare am folosit funcția augmentedImageDatastore , care
permite redimensionarea imaginilor stocate dintr-o variabilă de tip ImageDatastore .

Figura 3.4: Imagine alb-negru

31

Figura 3.5: Imaginea unui subiect în stare de normalitate

Figura 3.6: Imaginea unui subiect în stare de ebrietate

32
3.2 Implementarea algoritmului

Pentru realizarea clasificării imaginilor termale, au fost utlizate două modele de rețele neurale
convoluționale cu performanțe relativ apropiate, diferențele dintre ele fiind structura, prima având o
structură mai complexă, cu mai multe straturi, în timp ce cea de-a doua rețea are o structură mai
simplă. Deși are o structură mai complexă, timpul de antrenare al primei rețele este mai scurt, lucru
datorat complexității calculelor efectuate.
Interfațarea rețelelor cu cele două baze de date s-a realizat prin utilizarea funcției
imageDatastore . În urma apelării secvenței:

imds = imageDatastore('baza de date A', 'IncludeSubfolders', true,
'LabelSource', 'foldernames');

este creat un obiect de tip ImageDatastore care conține căile tuturor imaginilor din baza de date
A în câmpul Files, iar în campul Labels sunt salvate toate cele două etichete ale claselor din care
fac parte imaginile: “băut”, pentru starea de ebrietate, “sobru” pentru starea de normalitate (figura
3.7).

Figura 3.7: Obiect de tip ImageDatastore

Parametru Exemple de valori Descriere
location ‘file1.jpg’, ‘C:\dir\data’ Calea la care se află imaginile
‘IncludeSubfolders’ ‘true’ Fanion de includere a
subfolder-elor ‘false’
‘FileExtensions’ ‘.jpg’, ‘.png’ Specifică extensia fișierelor
‘AlternateFileSystemRoots’ ‘Z:\datasets’ Se utilizează când se crează
un datastore pe mașina locală
ale cărui date sunt prelucrate
pe o altă mașină (cloud)
‘LabelSource’ ‘none’ Datele nu sunt etichetate
‘foldernames’ Datele sunt etichetate, numele
clasei fiind numele folder-
ului în care se află

Tabelul 3.1: Lista parametrilor funcției imageDatastore . Sursa: [22]

33
3.2.1 Modelul Deep CNN 1

Primul model propus este o rețea neurală care are în componență 15 straturi. Este o structură
complexă, care execută mai multe convoluții cu filtre de 3×3 (cod complet – Anexa 1) [23].

layers = [
imageInputLayer([128 160 1])

convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer

fullyConnectedLayer(2)
softmaxLayer
classificationLayer];

Primul strat este stratul de intrare care specfică dimensiunea imaginilor de la intrarea rețelei
neurale, 128×160. În acest caz, imaginile sunt alb-negru, acest lucru fiind indicat de a treia
dimensiunea a imaginii, numărul de canale, care are valoarea 1.
Al doilea strat este un strat convoluțional care execută convoluția intrării cu 8 filtre de 3×3.
Valorea ‘same’ a parametrului ‘ Padding ’ specifică că ieșirea acestui filtru va fi bordată cu zerouri
astfel încât să aibă dimensiunea egală cu intrarea.
Cel de-al treilea strat execută o normalizare a mini-lotului, crește viteza de antrenare și scade
sensibilitatea rețelei neurale.
Al patrulea strat este unul de activare neliniară și este utilizat pentru a crește precizia cu care
rețeaua clasifică imaginile.
Următorul strat execută o reducere a dimensiunii imaginii prin calcularea înlocuirea unui bloc
de 2×2 cu valorea maximă din acel bloc. Primul parametru este dimensiunea stratului, 2×2, următorii
doi specificând dimensiunea pasului cu care este parcursă intrarea, 2×2. Operația reduce la jumătate
dimensiunea inițială a intrării.

34
Al șaselea strat execută convoluția intrării cu 16 filtre de 3×3. Valorea ‘ same’ a parametrului
‘Padding ’ specifică că ieșirea acestui filtru va fi bordată cu zerouri astfel încât să aibă dimensiunea
egală cu intrarea.
Al șaptelea strat execută o normalizare a mini-lotului, crește viteza de antrenare și scade
sensibilitatea rețelei neurale.
Următorul strat crește precizia cu care rețeaua face clasificarea imaginilor.
Al doilea strat de max pooling prezent scade dimensiunea imaginii la jumătate din cea inițială.
Al zecelea strat este unul de convoluție. Acesta realizează convoluția imaginii cu 32 de filtre
de 3×3, dimensiunea ieșirii fiind egală cu cea a intrării, prin utilizarea parametrului ‘ Padding ’ cu
valoarea ‘ same’.
Stratul 11 execută o normalizare a mini-lotului, crește viteza de antrenare și scade
sensibilitatea rețelei neurale.
Stratul 12 este un strat de activare neliniară, ReLU, care crește precizia rețelei.
Stratul 13 este stratul complet conectat, care combină toate caracteristicile învățate de celelalte
straturi.
Stratul 14 este stratul de softmax, cel în urma căruia se calculează probabilitățile de
apartenență ale unei imagini la cele două clase existente, băut și sobru.
Ultimul strat clasifică imaginile și calculează funcția de pierderi.

35

Figura 3.8: Diagrama primei rețelei neurale

36
3.2.2 Modelul Deep CNN 2

Al doilea model propus este o rețea neurală convoluțională cu 7 straturi. Este o rețea cu o
structură mai simplă, care se bazează pe convoluții cu filtre de 5×5 (cod complet – Anexa 2) [10].

layers = [imageInputLayer([128 160 1])
convolution2dLayer(5,20)
reluLayer

maxPooling2dLayer(2,'Stride',2)

fullyConnectedLayer(2)
softmaxLayer
classificationLayer];

Primul strat este cel de intrare, care setează dimensiunile imaginilor ce urmează a fi clasificate,
și anume 128x160x1, 128 fiind dimensiunea înălțimii imaginii, 160 dimensiunea lățimii, iar 1 este
numărul de canale (imagini alb-negru).
Al doilea strat este stratul de convoluție. Acesta execută o operație de convoluție a imaginii
cu 20 de filtre de dimensiune 5×5.
Al treilea strat este stratul de activare neliniară care crește perfomanțele rețelei.
Următorul strat este stratul de max pooling, strat care reduce dimensiunea imaginilor la
jumătate pentru a micșora numărul de parametri utilizați, reducându-se, astfel, efortul computațional.
Stratul are dimensiunea de 2×2 și parcurge imaginea cu un pas egal cu dimensiunea sa și calculează
maximul valorilor din acea fereastră.
Stratul 5 este stratul în care neuronii sumt compleți conectat cu neuronii din stratul anterior.
Acest strat combină toate caracteristicile învățate anterior de către celelalte straturi.
Stratul de softmax calculează probabilitățile de apartenență ale imaginilor la cele două clase
existente.
Ultimul strat realizează operația de clasificare și calculează funcția de pierderi a rețelei.

37

Figura 3.9: Diagrama celei de-a doua rețele neurale

38
Capitolul 4
Rezultate experimentale

4.1 Clasificarea imaginilor și precizia rețelei

Pentru antrenare, a fost utilizată următoarea secvență de cod:

net = trainNetwork(imdsTrain,layers,options);

Funcția trainNetwork creează rețeaua neurală cu următorii parametri: imdsTrain reprezintă
lotul de antrenare al rețelei, layers este variabila în care este stocată structura rețelei, iar options
este variabila care conține opțiunile de antrenare ale rețelei. Parametrii funcției care setează opțiunile
de antrenare, trainingOptions , sunt descriși în tabelul 4.1.
Parametru Exemple de valori Descriere
solverName ‘sgdm’ – stochastic gradient
descent with momentum Algoritmul utilizat pentru
învățare (minimizează funcția de
pierderi) ‘rmsprop’ – root mean square
propagation
‘adam’ – adaptive moment
estimation
‘InitialLearnRate’ 0.01 – ‘sgdm’ Rata inițială de învățare. Dacă
rata este prea mică, procesul de
antrenare durează prea mult
timp. Dacă rata este prea mare,
rezultatul poate fi suboptimal
sau algoritmul poate diverge. 0.001 – ‘rmsprop’
0.001 – ‘adam’
‘MaxEpochs’ 20 Numărul de epoci de antrenare.
O epocă reprezintă o parcurgere
a întregului lot de antrenare.
‘MiniBatchSize’ 25 Dimensiunea mini-lotului
utilizat în fiecare etapă a
antrenării
‘Shuffle’ ‘once’ Specifică dacă datele de
antrenare sunt amestecate sau nu ‘never’
‘every-epoch’
‘ValidationData’ imdsTest Specifică lotul de test
‘ValidationFrequency’ 50 Specifică o dată la câte iterații se
face testarea
‘Verbose’ ‘true’ Arată sau nu informații legate de
progresul antrenării în fereastra
de comandă a MATLAB-ului. ‘false’
‘Plots’ ‘training-progress’ Arată graficul procesului de
antrenare

39
‘ExecutionEnvironment’ ‘auto’, ‘cpu’, ‘gpu’, ‘multi-
gpu’, ‘parallel’ Specifică resursa hardware ce
urmează a fi folosită în procesul
de antrenare

Tabelul 4.1: Lista parametrilor funcției trainingOptions . Sursa: [24]

Prin utilizarea parametrului ‘ Plots’ cu valoarea ‘ training-progress ’, se deschide o
fereastră în care se generează două grafice care modelează în timp real procesul de antrenare al rețelei
neurale. Primul grafic (figura 4.1) prezintă variația preciziei rețelei în timpul procesului de antrenare,
în timp ce cel de-al doilea grafic (figura 4.2) prezintă variația funcției de pierderi.

Figura 4.1: Graficul preciziei rețelei

Figura 4.2: Graficul funcției de pierderi

Figura 4.3: Legenda graficelor

40
În partea dreaptă a ferestrei, se pot găsi rezultatul procesului
de antrenare, data și durata acestuia, numărul de iterații și de epoci,
precum și informații despre frecvența cu care s-a făcut testarea pe
parcursul procesului de antrenare, precum și informații despre
resursele hardware utilizate și valorile parametrilor algoritmului de
învățare (figura 4.4).

Figura 4.4: Informații legate de procesul de antrenare

Secvența de cod care clasifică imaginile este următoarea:

yp = classify(net,imdsTest);

Aceasta crează un vector în care sunt stocate etichetele claselor imaginilor din lotul de testare
(imdsTest ) după ce au fost clasificate de rețeaua neurală.
Acuratețea se calculează cu următoarea secvență de cod:

yt = imdsTest.Labels;
k=0;
for i=1:N
if yp(i) == yt(i)
k=k+1;
end
end
acc = k/N

k este un contor care crește de fiecare data când elementul i din vectorul yp (vectorul etichetelor
imaginilor după clasificare) are aceeași valoarea cu elementul i din vectorul yt (vectorul etichetelor
imaginilor înainte de clasificare), N este numărul de elemente din lotul de testare. Acuratețea este
calculată împărțind numărul de elemente ale căror clasă a fost clasificată corect la numărul de
elemente total din lotul de test.
Secvența următoare calculează și afișează matricea de confuzie (figura 4.5) rezultată în urma
procesului de antrenare.

confusionchart(yt,yp);

41

Figura 4.5: Exemplu de matrice de confuzie

Matricea conține numărul de imagini etichetate corect și greșit din fiecare clasă în urma clasificării.
Aceste valori sunt utilizate pentru calculul erorilor fals pozitive și fals negative. Eroare fals pozitivă
este numărul de imagini ale subiecților în stare de normalitate (“sobră”) clasificate eronat ca stare de
ebrietate (“băut”). Eroarea fals negativă reprezintă numărul de imagini ale subiecților în stare de
ebrietate clasificate eronat ca stare de normalitate

4.2 Indici de evaluare a performanțelor

Performanțele celor două rețele neurale convoluționale vor fi evaluate prin intermediul
următorilor indici: precizia generală, calculată prin împărțirea numărului de imagini din lotul de
testare clasificate corect la numărul total de imagini din lotul de test, eroarea fals pozitivă și eroarea
fals negativă. Eroarea fals pozitivă reprezintă numărul de imagini ale subiecților în stare de
normalitate clasificate eronat ca stare de ebrietate. Eroarea fals negativă reprezintă numărul de
imagini ale subiecților în stare de ebrietate clasificate ca stare de normalitate. Aceste două erori,
precum și precizia rețelei, se pot calcula cu ajutorul matricei de confuzie (figura 4.5).
Precizia, în acest caz, este egală cu numărul de imagini clasificate corect împărțit la numărul
total de imagini: (903 + 1021) / (903 + 122 + 4 + 1021) = 1924 / 2050 = 0.9385 = 93.85%.
Eroarea fals pozitivă este egală cu numărul de imagini din clasa “sobru” clasificate greșit ca
aparținând clasei “băut”, 4, împărțit la numărul de imagini din acea clasă: 4 / 1025 = 0.0039 = 0.39%.
Eroarea fals negativă este egală cu numărul de imagini din clasa “băut” clasificate greșit ca
aparținând clasei “sobru”, 122, împărțit la numărul de imagini din acea clasă: 122 / 1025 = 0.119 =
11.9%.

42
4.3 Rezultate experimentale

S-a ales o procedură de diagnosticare a stării de ebrietate dependentă de subiect. Au fost
construite mai multe seturi de date din ambele baze de date, pentru diferite situații, și au fost testate
ambele rețele neurale. Pentru procesul de învățare, a fost folosit algoritmul adam pentru că, în urma
diferitelor experimente, s-au atins cele mai mari mari valori ale preciziei.

4.3.1 Rezultate obținute în urma clasificării datelor din baza de date A

Pentru baza de date A, au fost construite 4 seturi de date: primul set de date conține imaginile
a 5 subiecți, al doilea conține imaginile a 10 subiecți, al treilea conține imaginile a 20 de subiecți, iar
al patrulea conține toate imaginile din baza de date, corespunzătoare celor 41 de subiecți. În toate cele
patru situații, au fost utilizate la antrenare câte 50 de imagini ale fiecărui subiect, 25 în stare de
normalitate și 25 în stare de ebrietate, restul imaginilor (25 în stare de normalitate, 25 în stare de
ebrietate) fiind folosite la testare. De asemena, numărul de epoci rămâne același în toate cazuri,
singurul parametru care se modifică la antrenare fiind frecvența cu care se verifică precizia, dar
aceasta nu influențează cu nimic indicii de evaluare a perfomanțelor.

Cazul 1 – 5 subiecți diagnosticați cu prima rețea neurală

Figura 4.6: Graficul variației preciziei

Figura 4.7: Graficul funcției de pierderi

43

– se poate observa că deși există mici fluctuații ale preciziei de
antrenare, precizia pe lotul de test a rămas constantă după
încheierea primei epoci
– funcția de pierderi a avut o variație mai mare la începutul
antrenării, deoarece atunci au loc cele mai multe pierderi; în
rest, nu au fost înregistrate fluctuații mari, funcția păstrând o
valoarea aproximativ constantă, aproape de 0 (mai ales după a
cincea epocă de antrenare)
– precizia de clasificare: 90%
– timp de execuție: 30 de secunde
– eroarea fals pozitivă: 16 / 125 = 12.8%
– eroarea fals negativă: 9 / 125 = 7.2%

Figura 4.8: Informații despre procesul de antrenare

Figura 4.9: Matricea de confuzie

44
Cazul 2 – 5 subiecți diagnosticați cu a doua rețea neurală

Figura 4.10: Graficul variației preciziei

Figura 4.11: Graficul variației funcției de pierderi

– deși există mici variații ale preciziei de antrenare, precizia de
testare rămâne constantă după încheierea primei epoci
– funcția de pierderi are valori mai mari pe durata întregului proces
de antrenare decât în cazul anterior
– precizia de clasificare: 90%
– timp de execuție: 35 de secunde (a crescut față de cazul anterior)
– eroarea fals pozitivă: 0%
– eroarea fals negativă: 25 / 125 = 20%

Figura 4.12: Informații despre procesul de antrenare

45

Figura 4.13: Matricea de confuzie

Caz 3 – 10 subiecți diagnosticați cu prima rețea neurală

Figura 4.14: Graficul variației preciziei

Figura 4.15: Graficul variației funcției de pierderi

46
– după prima epocă, precizia de testare a rămas constantă, iar
precizia antrenării a avut mici fluctuații în jurul ei
– funcția de valori, deși a avut fluctuații mari, a păstrat valori
mici
– precizia de clasificare: 94.80%
– timp de execuție: 54 de secunde
– eroarea fals pozitivă: 26 / 250 = 10.4%
– eroarea fals negativă: 0%

Figura 4.16: Informații despre procesul de antrenare

Figura 4.17: Matricea de confuzie

47
Caz 4 – 10 subiecți diagnosticați cu a doua rețea neurală

Figura 4.18: Graficul variației preciziei

Figura 4.19: Graficul funcției de pierderi

– după prima epocă, precizia pe lotul de test are mici fluctuații, dar
rămâne în mare parte la aceeași valoare; precizia antrenării
prezintă același comportament ca până acum, adică dupa prima
epocă variază foarte puțin în jurul valorii preciziei de testare
– funcția de pierderi are valori mult mai mari în prima epocă decât
în cazul anterior, iar apoi prezintă aceleași fluctuații
– precizia de clasificare: 92.80% (mai mică)
– timp de de execuție: 1 minut și 10 secunde (mai mare)
– eroarea fals pozitivă: 0%
– eroarea fals negativă: 36 / 250 = 14.4%

Figura 4.20: Informații despre procesul de antrenare

48

Figura 4.21: Matricea de confuzie

Caz 5 – 20 de subiecți diagnosticați cu prima rețea neurală

Figura 4.22: Graficul variației preciziei

Figura 4.23: Graficul funcției de pierderi

49
– se poate observa că precizia de antrenare și cea de testare nu
mai au o valoare aproximativ constantă după prima epocă
– funcția de pierderi înregistrează pierderi mai mari în prima
și a patra epocă, în rest are o valore apropiată de 0
– precizia de clasificare: 90%
– timpul de execuție: 1 minut și 49 de secunde
– eroarea fals pozitivă: 23 / 500 = 4.6%
– eroarea fals negativă:77 / 500 = 15.4%

Figura 4.24: Informații despre procesul de antrenare

Figura 4.25: Matricea de confuzie

50
Caz 6 – 10 subiecți diagnosticați cu a doua rețea neurală

Figura 4.26: Graficul variației preciziei

Figura 4.27: Graficul funcției de pierderi

– precizia fluctuează în jurul valorii de 50% în timpul primelor
3 epoci, după are o creștere mare până la epoca 6, după care
rămâne aproximativ constantă
– funcția de pierderi are o valoare mare în timpul primelor 4
epoci, după care tinde scade în epoca 5, ajungând să aibă o
valoare apropiată de 0
– se poate observa că, deși la începutul procesului de antrenare
a doua rețea are pierderi mai mari și precizie mai mică decât
prima, dupa un anumit număr de epoci (4 în acest caz),
precizia crește simțitor, ajungând la final să aibă o valoare mai
bună decât cea a rețelei inițiale; cu alte cuvinte, deși pierderile
sunt mai mari la început deoarece sunt utilizate filtre de 5×5,
la final precizia este cu câteva procente mai bună
– precizia de clasificare: 97.30% (mai mare)
– timp de execuție: 2 minute și 10 secunde (mai mare)
– eroarea fals pozitivă: 2 / 500 = 0.4%
– eroarea fals negativă: 25 / 500 = 5%
Figura 4.28: Informații despre procesul de antrenare

51

Figura 4.29: Matricea de confuzie

Caz 7 – toată baza de date diagnosticată cu prima rețea neurală

Figura 4.30: Graficul variației preciziei

Figura 4.31: Graficul funcției de pierderi

52
– se observă că graficul preciziei este asemănător celui din cazul cu
20 de subiecți; funcția are o creștere ceva mai lentă și sunt mici
fluctuații până la atingerea valorii finale
– funcția de pierdere are valorile cele mai mari la începutul
procesului, după care tinde spre 0, cu mici variații
– precizia de clasificare: 90.15%
– timpul de execuție: 4 minute și 50 de secunde
– eroarea fals pozitivă: 102 / 1025 = 9.95%
– eroarea fals negativă: 100 / 1025 = 9.75%

Figura 4.32: Informații despre procesul de învățare

Figura 4.33: Matricea de confuzie

53
Caz 8 – toată baza de date diagnosticată cu a doua rețea neurală

Figura 4.34: Graficul variației preciziei

Figura 4.35: Graficul funcției de pierderi

– la fel ca în cazul cu cei 20 de subiecți diagnosticați, se poate
observa că rețeaua are rezultate foarte bune după un anumit
număr de epoci
– comportamentul funcției de pierderi este asemănător cazului cu
20 de subiecți diagnosticați
– precizia de clasificare: 98.63%
– timpul de execuție: 5 minute și 46 de secunde
– eroarea fals pozitivă: 25 / 1025 = 2.44%
– eroarea fals negativă: 3 / 1025 = 0.3%

Figura 4.36: Informații despre procesul de antrenare

54

Figura 4.37: Matricea de confuzie

Număr subiecți
diagnosticați Timp de execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
5 30 s 90% 12.8% 7.2%
10 54 s 94.80% 10.4% 0%
20 1 min 49 s 90% 4.6% 15.4%
41 4 min 50 s 90.15% 9.95% 9.75%

Tabelul 4.2: Centralizarea scorurilor obținute cu prima rețea neurală

Număr subiecți
diagnosticați Timp de execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
5 35 s 90% 0% 20%
10 1 min 10 s 92.80% 0% 14.4%
20 2 min 10 s 97.30% 0.4% 5%
41 5 min 46 s 98.63% 2.44% 0.3%

Tabelul 4.3: Centralizarea scorurilor obținute cu a doua rețea neurală

55
4.3.2 Rezultatele obținute în urma clasificării datelor din baza de date B

Pentru baza de date B, au fost construite 4 seturi de date: primul set de date conține imaginile
unui subiect, al doilea conține imaginile a 3 subiecți, al treilea conține imaginile a 5 de subiecți, iar
al patrulea conține toata imaginile din baza de date, corespunzătoare celor 10 de subiecți. În toate cele
patru situații, au fost utilizate la antrenare câte 20 de imagini ale fiecărui subiect, 10 în stare de
normalitate și 10 în stare de ebrietate, restul imaginilor (10 în stare de normalitate, 10 în stare de
ebrietate) fiind folosite la testare.

Cazul 1 – diagnosticarea unui subiect cu prima rețea neurală
Figura 4.38: Graficul variației preciziei

Figura 4.39: Graficul funcției de pierderi

Figura 4.40: Matricea de confuzie

56
– precizia are o creștere abruptă pe parcursul primei epoci,
urmând ca după epoca 3 să rămână constantă la valorea de
100%
– funcția de pierderi are valoare mare la începutul procesului de
antrenare și în epoca 2; după jumătatea epocii 3, aceasta are o
valoare constantă, 0
– precizia de clasificare: 100%
– timpul de execuție: 5 secunde
– eroarea fals pozitivă: 0%
– eroarea fals negativă: 0%

Figura 4.41: Informații despre procesul de antrenare

Caz 2 – diagnosticarea unui subiect cu a doua rețea neurală

Figura 4.42: Graficul variației preciziei

Figura 4.43: Graficul funcției de pierderi

57
– precizia pe lotul de test este mai mică în primele 6 epoci
decât în cazul anterior, dar la finalul celor 10 epoci ajunge la
aceeași valoare
– funcția de pierderi înregistrează valori mai mari pe parcursul
primelor 7 epoci, dar la final ajunge la valoarea 0
– precizia de clasificare: 100%
– timp de execuție: 6 secunde
– eroarea fals pozitivă: 0%
– eroarea fals negativă: 0%

Figura 4.44: Informații despre procesul de antrenare

Figura 4.45: Matricea de confuzie

Caz 3 – diagnosticarea a 3 subiecți cu prima rețea neurală

Figura 4.46: Graficul variației preciziei

58

Figura 4.47: Graficul funcției de pierderi

– precizia prezintă o creștere abruptă pe parcursul primei epoci,
după care, cu mici fluctuații, păstrează o valoare mai mare de
90%, ajungând la finalul epocii 5 să fie de 100%
– funcția de pierderi are o valoare mare la început, care scade spre
finalul primei epoci, după există mici variații în intervalul [0, 1],
ajungând după epoca 5 să aibă valoarea 0
– precizia de clasificare: 100%
– timp de execuție: 13 secunde
– eroarea fals pozitivă: 0%
– eroarea fals negativă: 0%

Figura 4.48: Informații despre procesul de antrenare

Figura 4.49: Matricea de confuzie

59
Caz 4 – diagnosticarea a 3 subiecți cu a doua rețea neurală

Figura 4.50: Graficul variației preciziei

Figura 4.51: Graficul funcției de pierderi

– precizia are o creștere abruptă în prima epocă, după care cu
mici fluctuații păstrează o valoare constantă spre final, unde
scade la valoarea de 95%
– funcția de pierderi are valori mai mari pe tot parcursul
procesului de antrenare, ajungând ca la final să aibă o valoare
mică, apropiată de 0
– precizia de clasificare: 95%
– timpul de execuție: 17 secunde
– eroarea fals pozitivă: 3 / 30 = 10%
– eroarea fals negativă: 0%

Figura 4.52: Informații despre procesul de antrenare

60

Figura 4.53: Matricea de confuzie

Caz 5 – diagnosticarea a 5 subiecți cu prima rețea neurală

Figura 4.54: Graficul variației preciziei

Figura 4.55: Graficul funcției de precizie

61
– deși spre finalul procesului precizia de antrenare are o
valoarea constantă de 100%, precizia de testare are o valoare
mai mică, deoarece prin creșterea numărului de imagini
crește și numărul de caracteristici ce trebuie comparate și,
astfel, procesul de clasificare devine mai complex, ducând
la scăderea preciziei
– funcția de pierderi are o valoare mare pe parcursul primei
epoci, după care scade și păstrează o valoare constantă până
la finalul procesului; de remarcat, însă, ca funcția de pierderi
în cazul testării nu mai tinde spre 0 ca în celelalte cazuri,
motivul fiind explicat mai sus
– precizia de clasificare: 92%
– timpul de execuție: 20 de secunde
– eroarea fals pozitivă: 4 / 50 = 8%
– eroarea fals negativă: 4 / 50 = 8%

Figura 4.56: Informații despre procesul de antrenare

Figura 4.57: Matricea de confuzie

62
Caz 6 – diagnosticarea a 5 subiecți cu a doua rețea neurală

Figura 4.58: Graficul variației preciziei

Figura 4.59: Graficul funcției de pierderi

– precizia în acest caz are o creștere abruptă pe parcursul
primei epoci și se stabilizează după a treia epocă la valoarea
de 95%
– funcția de pierderi prezintă valori mari și variații mari la
începutul antrenării, după care rămâne constantă
– precizia de clasificare: 95%
– timpul de execuție: 20 de secunde
– eroarea fals pozitivă: 3 / 50 = 6%
– eroarea fals negativă: 2 / 50 = 4%

Figura 4.60: Informații despre procesul de antrenare

63

Figura 4.61: Matricea de confuzie

Caz 7 – diagnosticarea tuturor subiecților cu prima rețea neurală

Figura 4.62: Graficul variației preciziei

Figura 4.63: Graficul funcției de pierderi

64
– precizia de testare are o creștere abruptă în prima epocă, după
care rămâne la aceeași valoarea pe tot parcursul procesului;
precizia de antrenare, în schimb, prezintă variații semnificative
pe tot parcursul proceului de învățare
– funcția de pierderi pentru testare are o valoare mare la început,
după care scade și prezintă mici variații până la finalul procesului;
în schimb, precizia de antrenare prezintă fluctuații pe tot
parcursul procesului, uneori aceastea atingând valoarea 2
– precizia de clasificare: 96.50%
– timpul de execuție: 39 de secunde
– eroarea fals pozitivă: 6 / 100 = 6%
– eroarea fals negativă: 1 / 100 = 1%

Figura 4.64: Informații despre procesul de antrenare

Figura 4.65: Matricea de confuzie

65
Caz 8 – diagnosticarea tuturor subiecților cu a doua rețea neurală

Figura 4.66: Graficul variației preciziei

Figura 4.67: Graficul funcției de pierderi

– precizia la începutul procesului a înregistrat o scădere foarte
mare, deoarece atunci s-a produs o pierdere foarte mare de
date (la convoluțiile cu filtre de 5×5 se pierd mai multe date
decât la convoluțiile cu filtre de 3×3); spre final, aceasta are
o valoare de constantă, de 93.50%
– funcția de pierderi are o valoare mare la început, după care,
cu mici fluctuații, tinde spre o valoare mai mică decât 2
– timpul de execuție: 39 de secunde
– eroarea fals pozitivă: 7 / 100 = 7%
– eroarea fals negativă: 6 / 100 = 6%

Figura 4.68: Informații despre procesul de antrenare

66

Figura 4.69: Matricea de confuzie

Număr subiecți
diagnosticați Timp de execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
1 5 s 100% 0% 0%
3 13 s 100% 0% 0%
5 20 s 92% 8% 8%
10 39 s 96.50% 6% 1%

Tabelul 4.4: Centralizarea scorurilor obținute cu prima rețea neurală

Număr subiecți
diagnosticați Timp de execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
1 6 s 100% 0% 0%
3 17 s 95% 10% 0%
5 20 s 95% 6% 4%
10 39 s 93.50% 7% 6%

Tabelul 4.5: Centralizarea scorurilor obținute cu a doua rețea neurală

67
Capitolul 5
Concluzii

Număr subiecți
diagnosticați Rețea Timp de
execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
5 1 30 s 90% 12.8% 7.2%
5 2 35 s 90% 0% 20%
10 1 54 s 94.80% 10.4% 0%
10 2 1 min 10 s 92.80% 0% 14.4%
20 1 1 min 49 s 90% 4.6% 15.4%
20 2 2 min 10 s 97.30% 0.4% 5%
41 1 4 min 50 s 90.15% 9.95% 9.75%
41 2 5 min 46 s 98.63% 2.44% 0.3%

Tabelul 5.1: Centralizarea scorurilor obținute pe baza de date A

Din tabelul 5.1, se pot trage următoarele concluzii:
– prima rețea neurală clasifică mai bine bazele de date cu mai puține imagini, pe când a doua rețea
clasifică mai bine pe măsură ce crește volumul de date
– prima rețea are timpii de execuție mai mici, deoarece operațiile de convoluție cu filtre de 3×3 produc
un efort computațional mai mic decât convoluțiile cu filtre de 5×5, chiar dacă au fost utilizate mai
multe filtre de 3×3 decât de 5×5
– erorile fals pozitive și fals negative scad odată cu creșterea numărului de imagini utilizate în procesul
de clasificare

Număr subiecți
diagnosticați Rețea Timp de
execuție Precizie Eroare fals
pozitivă Eroare fals
negativă
1 1 5 s 100% 0% 0%
1 2 6 s 100% 0% 0%
3 1 13 s 100% 0% 0%
3 2 17 s 95% 10% 0%
5 1 20 s 92% 8% 8%
5 2 20 s 95% 6% 4%
10 1 39 s 96.50% 6% 1%
10 2 39 s 93.50% 7% 6%

Tabelul 5.2: Centralizarea scorurilor obținute pe baza de date B

Din tabelul 5.2, se pot trage următoarele concluzii:
– prima rețea neurală clasifică relativ mai bine imaginile din această bază de date, deoarece acestea
nu sunt la fel de asemănătoare ca cele din baza de date A

68
– scorurile celei de-a doua rețele neurale sunt mai mici, deoarece această baza de date B conține mai
puține mai puține imagini decât A, de aceea și timpii de execuție sunt egali, în mare parte, cu cei ai
primei rețele
– erorile fals pozitive și fals negative, ignorând primele 4 cazuri, scad odată cu creșterea numărului
de imagini utilizate, în cazul primei rețele, și cresc, în cazul celei de-a doua rețele, pentru că numărul
de imagini utilizate nu este destul de mare

Concluzii generale

În urma experimentelor efectuate, am ajuns la concluzia că cea de-a doua rețea neurală
convoluțională dă rezultate mult mai bune pe un set de date mai mare (baza de date A), în timp ce
prima rețea rețea dă rezultate comparabile, dar pe un set de date mai mic (baza de date B).
Din punct de vedere al timpilor de execuție, algoritmul de antrenare al primei rețele se execută
mai repede datorită convoluțiilor cu filtre 3×3, care sunt mai simplu de calculat (efort computațional
mai mic), chiar dacă sunt mai multe, decât cele cu filtre 5×5.
Un alt aspect important care trebuie menționat este perfomanța obținută de cele două rețele
convoluționale. În fiecare experiment, precizia de clasificare a fost de peste 90%, uneori chiar peste
95%. Cazurile în care au fost utilizate puține imagini la clasificare nu sunt luate în considerare,
deoarece gama de caracteristici învățate este mică, acest lucru ușurând clasificarea. Totuși, aceste
cazuri sunt necesare pentru a verifica dacă rețelele neurale au fost construite corect.
O altă concluzie ar fi faptul că rezultate mai bune se obțin atunci când setul de date este mai
mare, drept dovadă având scorul de clasificare obținut de a doua rețea neurală pentru clasificarea
întregii baze de date A, acesta fiind de 98.63%.

69
Capitolul 6
Bibliografie

[1] V. E. Neagoe, Rețele neurale pentru explorarea datelor , Editura MATRIX ROM, București,
2018, pp. 121-125
[2] V.E Neagoe,S.V. Carata, Subject independent drunkenness detection using pulse-coupled neural
network segmentation of thermal infrared facial imagery, International Journal of Mathematical and
Computational Methods , Vol. 1, 2016, pp. 305-312
[2 bis] V. E. Neagoe, S.V. Carata, “Drunkenness diagnosis using a neural network-based approach
for analysis of facial images in the thermal infrared spectrum,” Proceedings of 2017 E-Health and
Bioengineering Conference (EHB)” , Sinaia, Romania, June 22-24, 2017, pp. 165-168
[3] UN, Road Safety report, 2013. [Online]. Available:
http://www.un.org/ar/roadsafety/pdf/roadsafetyreport.pdf
[4] Koukiou, G. and Anastassopoulos, V. (2012) “Drunk person identification using thermal infrared
images”, Int. J. Electronic Security and Digital Forensics , Vol. 4, No. 4, pp.229–243
[5] G. Koukiou and V. Anastassopoulos, “Face locations suitable drunk persons identification”, 2013
International Workshop on Biometrics and Forensics (IWBF) , Lisbon, 4-5 April 2013, pp. 1-4
[6] G. Koukiou and V. Anastassopoulos, “Eye temperature distribution in drunk persons using
thermal imagery”, Proc. 2013 International Conference of the Biometrics Special Interest Group
(BIOSIG) , Darmstadt, 5-6 Sept. 2013, pp. 233-240
[7] G. Koukiou, V. Anastassopoulos, “Neural Networks for identifying drunk persons using thermal
infrared imagery”, Forensic Science International (2015),
http://dx.doi.org/10.1016/j.forsciint.2015.04.022
[8] I. Arel, D. C. Rose, T. P. Karnowski, “Deep Machine Learning” – A New Frontier in Artificial
Intelligence Research (2010), http://web.eecs.utk.edu/~itamar/Papers/DML_Arel_2010.pdf
[9] V. E. Neagoe, Rețele neurale pentru explorarea datelor , Editura MATRIX ROM, București,
2018, pp. 29-33
[10] “Learn About Convolutional Neural Networks”, mathworks.com, documentația MATLAB.
[Online]. Available: https://www.mathworks.com/help/deeplearning/ug/introduction-to-
convolutional-neural-networks.html , accesat la data: 22.06.2019
[11] “Specify Layers of Convolutional Neural Network”, mathworks.com, documentația MATLAB.
[Online]. Available: https://www.mathworks.com/help/deeplearning/ug/layers-of-a-convolutional-
neural-network.html , accesat la data: 22.06.2019
[12] “Image input layer”, mathworks.com, documentația MATLAB. [Online]. Available:
https://www.mathworks.com/help/deeplearning/ref/nnet.cnn.layer.imageinputlayer.html , accesat la
data: 22.06.2019
[13] “2-D convolutional layer”, mathworks.com, documentația MATLAB. [Online]. Available:
https://www.mathworks.com/help/deeplearning/ref/nnet.cnn.layer.convolution2dlayer.html , accesat
la data: 22.06.2019
[14] “A Gentle Introduction to the Rectified Linear Unit (ReLU) for Deep Learning Neural
Networks”, machinelearningmastery.com. [Online]. Available:
https://machinelearningmastery.com/rectified-linear-activation-function-for-deep-learning-neural-
networks/ , accesat la data: 23.06.2019

70
[15] “A Practical Guide to ReLU”, medium.com. [Online]. Available:
https://medium.com/tinymind/a-practical-guide-to-relu-b83ca804f1f7 , accesat la data: 23.06.2019
[16] “Max pooling layer”, mathworks.com, documentația MATLAB. [Online]. Available:
https://www.mathworks.com/help/deeplearning/ref/nnet.cnn.layer.maxpooling2dlayer.html , accesat
la data: 23.06.2019
[17] “Overfitting and Underfitting With Machine Learning Algorithms”,
machinelearningmastery.com. [Online]. Available: https://machinelearningmastery.com/overfitting-
and-underfitting-with-machine-learning-algorithms/ , accesat la data: 23.06.2019
[18] “ReLU and Softmax Activation Functions”, github.com. [Online]. Available:
https://github.com/Kulbear/deep-learning-nano-foundation/wiki/ReLU-and-Softmax-Activation-
Functions , accesat la data: 24.06.2019
[19] “Common Loss functions in machine learning”, towardsdatascience.com. [Online]. Available:
https://towardsdatascience.com/common-loss-functions-in-machine-learning-46af0ffc4d23 , accesat
la data: 24.06.2019
[20] “SOBER DRUNK DATA BASE”, physics.upatras.gr, 2013. [Online]. Available:
http://www.physics.upatras.gr/~soberdrunk/dbase.php?email=sareh.elizabet@gmail.com&hash=3ba
0dbf56573864d70f9494ef2193a11 , accesat la data: 21.06.2019
[21] “ImageMagick”, imagemagick.org. [Online]. Available: https://imagemagick.org/ , accesat la
data: 21.06.2019
[22] “Datastore for image data”, mathworks.com, documentația MATLAB. [Online]. Available:
https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.imagedatastore.html , accesat la
data: 27.06.2019
[23] “Create Simple Deep Learning Network for Classification”, mathworks.com, documentația
MATLAB. [Online]. Available: https://www.mathworks.com/help/deeplearning/examples/create-
simple-deep-learning-network-for-classification.html , accesat la data: 27.06.2019
[24] “Options for training deep learning neural network”, mathworks.com, documentația MATLAB.
[Online]. Available: https://www.mathworks.com/help/deeplearning/ref/trainingoptions.html ,
accesat la data: 27.06.2019

71
Capitolul 7
Anexe

7.1 Anexa 1 – codul sursă pentru prima rețea neurală

clear all
close all

imds = imageDatastore('baza de date A', 'IncludeSubfolders', true,
'LabelSource','foldernames');
[imdsTrain,imdsTest] = splitEachLabel(imds,1025);
% imdsTrain = imageDatastore('baza de date A\antrenare',
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
% imdsTest = imageDatastore('baza de date A\test',
'IncludeSubfolders', true, 'LabelSource', 'foldernames');

labelCount = countEachLabel(imdsTrain)

labelCount = countEachLabel(imdsTest)

layers = [
imageInputLayer([128 160 1])

convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer

fullyConnectedLayer(2)
softmaxLayer
classificationLayer];

72
options = trainingOptions('adam', 'InitialLearnRate', 0.001,
'MaxEpochs', 10, 'MiniBatchSize', 25, 'Shuffle', 'every-epoch',
'ValidationData', imdsTest, 'ValidationFrequency', 50, 'Verbose',
false, 'Plots', 'training-progress');

net = trainNetwork(imdsTrain, layers, options);

yp = classify(net,imdsTest);
yt = imdsTest.Labels;

k = 0;

for i = 1:2050
if yp(i) == yt(i)
k = k + 1;
end
end

acc = k / 2050

confusionchart(yt, yp);

7.2 Anexa 2 – codul celei de-a doua rețele neurale

clear all
close all

imds = imageDatastore('baza de date A', 'IncludeSubfolders', true,
'LabelSource', 'foldernames');
[imdsTrain,imdsTest] = splitEachLabel(imds,1025);

% imdsTrain = imageDatastore('baza de date A\antrenare',
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
% imdsTest = imageDatastore('baza de date A\test',
'IncludeSubfolders', true, 'LabelSource', 'foldernames');

labelCount = countEachLabel(imdsTrain)

labelCount = countEachLabel(imdsTest)

layers = [imageInputLayer([128 160 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)

73
fullyConnectedLayer(2)
softmaxLayer
classificationLayer];

options = trainingOptions('adam', 'InitialLearnRate', 0.001,
'MaxEpochs', 10, 'MiniBatchSize', 25, 'Shuffle', 'every-epoch',
'ValidationData', imdsTest, 'ValidationFrequency', 40, 'Verbose',
false, 'Plots', 'training-progress');

net = trainNetwork(imdsTrain,layers,options);

yp = classify(net,imdsTest);
yt = imdsTest.Labels;

k = 0;

for i = 1:2050
if yp(i) == yt(i)
k = k + 1;
end
end

acc = k / 2050

confusionchart(yt, yp);

7.3 Anexa 3 – codul care modifică imaginile color în imagini alb-negru

imds = imageDatastore('C:\Users\Alex\Desktop\db',
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
while hasdata(imds)
[img,info] = read(imds);
b = rgb2gray(img);
imwrite(b, info.Filename);
end

Similar Posts