Trucuri pentru a îmbunătăți precizia clasificatorului

Aditya Mishra

14 mai 2019 · 7 min de citire

Clasificarea imaginilor este presupusă a fi o problemă aproape rezolvată. Partea distractivă este când trebuie să-ți folosești toată viclenia pentru a obține acea precizie suplimentară de 1%. Am întâlnit o astfel de situație, când am participat la Intel Scene Classification Challenge găzduit de Analytics Vidhya. M-am bucurat din plin de concurs în timp ce încercam să extrag toate sucurile din modelul meu de învățare profundă. Tehnicile de mai jos pot fi aplicate în general oricărei probleme de clasificare a imaginilor la îndemână.

îmbunătățiți-vă

Problema a fost clasificarea unei imagini date în 6 categorii

Am fost gi v en

25K imagini dintr-o gamă largă de scene naturale din întreaga lume

Este tehnica de a redimensiona secvențial toate imaginile în timp ce instruiți CNN-urile cu dimensiuni mai mici sau mai mari. Redimensionarea progresivă este descrisă pe scurt în cursul său extraordinar de rapid, „Învățare profundă practică pentru programatori”. O modalitate excelentă de a utiliza această tehnică este de a antrena un model cu dimensiuni mai mici ale imaginii, de exemplu 64x64, apoi folosiți greutățile acestui model pentru a instrui un alt model pe imagini de dimensiuni 128x128 și așa mai departe. Fiecare model la scară mai mare încorporează straturile și greutățile anterioare ale modelului la scară mai mică în arhitectura sa.

Biblioteca fastai este o bibliotecă puternică de învățare profundă. Dacă echipa FastAI găsește o lucrare deosebit de interesantă, o testează pe diferite seturi de date și află cum să o regleze. Odată reușit, acesta este încorporat în biblioteca lor și este ușor disponibil pentru utilizatorii săi. Biblioteca conține multe tehnici de ultimă generație (SOTA) încorporate. Construit pe tipul de pirtorch, fastai are parametri impliciți excelenți pentru majoritatea, dacă nu pentru toate sarcinile. Unele dintre tehnici sunt

  1. Rata ciclică de învățare
  2. Un ciclu de învățare
  3. Învățare profundă asupra datelor structurate

În timp ce verificam seturile de date standard disponibile, am dat peste setul de date Places365. Setul de date Places365 conține 1,8 milioane de imagini din 365 de categorii de scene. Setul de date furnizat în provocare a fost foarte similar cu acest set de date, astfel încât modelul instruit în acest set de date va avea deja caracteristici învățate care sunt relevante pentru propria noastră problemă de clasificare. Deoarece, categoriile din problema noastră, erau un subset de seturi de date Places365, am folosit un model ResNet50 inițializat cu greutăți places365.

Greutățile modelului erau disponibile ca greutăți pirtorh. Funcția de utilitate de mai jos ne-a ajutat să încărcăm datele corect în CNN Learner de la fastai.

Augmentarea mixup este un tip de augmentare în care formăm o nouă imagine prin interpolare liniară ponderată a două imagini existente. Luăm două imagini și facem o combinație liniară a acestora în termeni de tensori ai acestor imagini.

λ este eșantionat aleatoriu din distribuția beta. Chiar dacă autorii lucrării sugerează utilizarea λ = 0,4, valoarea implicită din biblioteca fastai este setată la 0,1

Rata de învățare este unul dintre cei mai importanți hiper-parametri pentru formarea rețelelor neuronale. fastai are o metodă pentru a afla o rată de învățare inițială adecvată. Această tehnică se numește rată de învățare ciclică, unde efectuăm o încercare cu o rată de învățare mai mică și o creștem exponențial, înregistrând pierderea pe parcurs. Plotăm apoi pierderea în raport cu rata de învățare și alegem rata de învățare în care pierderea este cea mai abruptă.

Biblioteca gestionează automat și Descendența gradientului stocastic cu repornire (SGDR). În SGDR, rata de învățare este resetată la începutul fiecărei epoci la valoarea inițială aleasă, care scade de-a lungul epocii, la fel ca în Cosire Annealing. Principalul beneficiu al acestui fapt este că, din moment ce rata de învățare este resetată la începutul fiecărei epoci, cursantul este capabil să sară dintr-un minim local sau un punct de șa în care poate fi blocat.

GAN-urile au fost introduse de Ian Goodfellow în 2014. GAN-urile sunt arhitecți ai rețelei neuronale profunde compuse din două plase, care se potrivesc una cu cealaltă. GAN-urile pot imita orice distribuție de date. Ei pot învăța să genereze date similare cu datele originale în orice domeniu - imagini, vorbire, text etc. Am folosit implementarea Wasserstein GAN a fast.ai pentru a genera mai multe imagini de antrenament.

GAN-urile implică formarea a două rețele neuronale, una numită generator, care generează noi instanțe de date, în timp ce cealaltă, discriminatorul, le evaluează pentru autenticitate, decide dacă fiecare instanță de date aparține setului de date de antrenament propriu-zis sau nu. Puteți consulta mai multe despre aceasta aici.

Primul pas pentru formarea unei rețele neuronale este să nu atingeți deloc niciun cod de rețea neuronală și, în schimb, începeți să vă inspectați temeinic datele. Acest pas este critic. Îmi place să petrec mult timp (măsurat în unități de ore) scanând mii de exemple, înțelegând distribuția lor și căutând modele.

- Andrej Karpathy

După cum afirmă Andrej Karpathy „Investigația datelor” este un pas important. La investigarea datelor, am constatat că există câteva imagini care conțineau 2 sau mai multe clase.

Folosind un model antrenat anterior, am efectuat predicții pentru toate datele de antrenament. Apoi au aruncat acele imagini ale căror predicții erau incorecte, dar scorul de probabilitate a fost mai mare de 0,9. Acestea au fost imaginile pe care modelul le-a clasificat în mod greșit. Mergând adânc în el, am constatat că acele imagini au fost etichetate greșit de etichetator.

De asemenea, am eliminat acele imagini din setul de antrenament, pentru care probabilitatea de predicție a fost cuprinsă între 0,5 și 0,6, teoria fiind că ar putea fi mai mult de 1 clasă prezentă în imagine, astfel încât modelul a atribuit probabilități oarecum egale fiecăruia dintre lor. La vizualizarea acestor imagini, teoria sa dovedit a fi adevărată în cele din urmă

fast.ai oferă un widget la îndemână „Image Cleaner Widget” care vă permite să curățați și să vă pregătiți datele pentru modelul dvs. ImageCleaner este destinat curățării imaginilor care nu aparțin setului de date. Redă imagini la rând și vă oferă posibilitatea de a șterge fișierul din sistemul de fișiere.

Augmentarea timpului de testare presupune luarea unei serii de versiuni diferite ale imaginii originale și trecerea acestora prin model. Ieșirea medie este apoi calculată din diferitele versiuni și dată ca ieșire finală pentru imagine.

O tehnică similară numită testare cu 10 culturi a fost utilizată anterior. Am citit mai întâi despre tehnica de 10 culturi în hârtie ResNet. Tehnica cu 10 decupări implică decuparea imaginii originale de-a lungul celor patru colțuri și o dată de-a lungul centrului oferind 5 imagini. Repetând același lucru pentru invers, dă alte 5 imagini, în total 10 imagini. Mărirea timpului de testare este totuși mai rapidă decât tehnica de 10 culturi

Ansamblarea în învățarea automată este tehnica utilizării mai multor algoritmi de învățare pentru a obține performanțe predictive mai bune, care ar putea fi realizate printr-un singur algoritm. Ansamblul funcționează cel mai bine

  1. Modelele constitutive sunt de diferite naturi. De exemplu, asamblarea unui ResNet50 și a InceptionNet ar fi mult mai utilă decât combinarea unei rețele ResNet50 și ResNet34, deoarece acestea sunt de natură diferită
  2. Modelele constitutive au o corelație mai mică
  3. Set de antrenament schimbător pentru fiecare dintre modele; astfel încât să existe mai multe variații

În acest caz, am asamblat predicția din toate modelele, alegând clasa maximă care apare. În cazul în care există mai multe clase cu apariție maximă, aleg în mod aleatoriu una dintre clase.

Clasament public - Poziția 29 (0,962)

Clasament privat - Locul 22 (0.9499)