Muriz Serifovic

9 septembrie 2018 · 13 min de citire

În acest articol vom analiza modul de instruire a rețelelor neuronale convoluționale profunde cu Keras pentru a clasifica imaginile în categorii de alimente și pentru a scoate o rețetă potrivită. Setul de date conține> 800.000 imagini alimentare și> 300.000 rețete de la chefkoch.de.

neuronale

În mod grav orice altă zonă afectează bunăstarea umană într-o măsură similară cu nutriția. În fiecare zi sunt publicate nenumărate imagini cu alimente de la utilizatori pe rețelele de socializare; de la primul tort de casă până la cel mai bun fel de mâncare Michelin, bucuria vă este împărtășită în cazul în care un fel de mâncare a fost gătit cu succes.

Este un fapt că oricât de diferit ai fi unul de celălalt, mâncarea bună este apreciată de toată lumea.

Progresele în clasificarea ingredientelor individuale de gătit sunt rare. Problema este că aproape nu există înregistrări editate publice disponibile. Această lucrare tratează problema recunoașterii automate a unui vas de gătit fotografiat și rezultatul ulterior al rețetei corespunzătoare. Distincția dintre dificultatea problemei alese și problemele de clasificare supravegheate anterioare constă în faptul că există suprapuneri mari în felurile de mâncare (cunoscută și ca similaritate înaltă între clase)), deoarece felurile de mâncare din diferite categorii pot arăta foarte asemănător numai în ceea ce privește informațiile despre imagine.

Tutorialul este împărțit în părți mai mici în conformitate cu deviza divizează și cucerește:

Conform stării actuale, cel mai mare set de date în limba germană cu peste 300.000 de rețete va fi răzuit și analizat. Apoi, va fi prezentată o metodă nou dezvoltată, conform cunoștințelor autorului: combinația de recunoaștere a obiectelor sau recunoașterea curții de gătit utilizând rețele neuronale convolutionale (CNN scurt) și căutarea celor mai apropiați vecini (clasificarea Next-Neighbor) într-o înregistrare de peste 800.000 de imagini. Această combinație ajută la găsirea rețetei corecte mai probabilă, deoarece primele 5 categorii ale CNN sunt comparate cu următoarea categorie de vecini cu corelație clasată. Abordări bazate pe corelarea rangului, cum ar fi Kendall Tau măsurați în esență probabilitatea ca două articole să fie în aceeași ordine în cele două liste clasate. Matematic, Kendall Tau este calculat ca

  • N = Numărul total de perechi
  • C = Numărul de perechi concordante
  • D = Numărul de perechi discordante

Conducta exactă arată după cum urmează:

  1. Pentru fiecare rețetă W sunt K numărul de imagini. Pentru fiecare dintre aceste imagini, vectorii de caracteristici sunt extrase dintr-o rețea neuronală de convoluție pre-antrenată, formată pe 1000 de categorii în competiția de recunoaștere a imaginii ILSVRC 2014 cu milioane de imagini. Vectorii caracteristici formează o reprezentare internă a imaginii în ultimul strat complet conectat înainte de Softmax Layer din categoria 1000, care a fost eliminat în prealabil. Acești vectori caracteristici sunt apoi reduși dimensional prin PCA (Principal Component Analysis) de la un N x 4096 matrice la un N x 512 matrice. Ca rezultat, se aleg primele 5 imagini cu cea mai mică distanță euclidiană față de imaginea de intrare (aproximativ cel mai apropiat vecin), adică primele 5 optice, doar din informațiile despre imagine, imagini similare cu imaginea de intrare.
  2. Mai mult, un CNN este instruit cu C numărul de categorii cu imagini cu W Rețete. C a fost determinat dinamic folosind modelarea subiectului și analiza semantică a numelor rețetelor. Ca rezultat, obținem pentru fiecare categorie o probabilitate la care ar putea aparține imaginea de intrare.
  3. Categoriile top-k din CNN (2.) sunt comparate cu categoriile din top-k imagini optic similare (1.) cu corelație Kendall Tau.

Schema de vizualizare a metodei arată astfel:

1│── Pregătirea datelor
Aring └── Ștergerea datelor
Au └── Mărirea datelor

2│── Analiza și vizualizarea datelor, divizarea datelor (Tren, Valid, Test)

3│── Modelarea subiectelor
Ate └── Alocare Latină Dirichlet (LDA)
│ └── Factorizarea matricei non-negative

4│── Extragerea caracteristicilor
│ └── k-cei mai apropiați vecini
Vizualizare T └── t-SNE

5│── Transferul învățării: instruirea CNN (rețeaua neuronală convoluțională) pre-instruită
Alex └── AlexNet, VGG, ResNet, GoogLeNet

6└── Implementarea cu Flask pe now.sh, o implementare a aplicației fără server

Fiecare parte conține caiete Jupyter pe care le puteți vizualiza pe pagina Github.

Pentru a putea antrena un model, aveți nevoie de suficiente date (așa-numita augmentare a datelor și reglarea fină a modelelor pre-antrenate pot fi utilizate ca remediu). Numai datorită acestei cantități de date, generalizarea setului de antrenament poate fi crescută continuu într-un anumit grad și o precizie ridicată poate fi obținută într-un set de testare. Prima parte a acestui tutorial se referă la achiziționarea datelor, analiza și vizualizarea caracteristicilor și a relațiilor acestora.

Plug fără rușine: lucrez la un editor de coduri Python care simplifică analiza și graficarea datelor. Mai multe informații sunt disponibile la: Editorul de cod Möbius

Peter Norvig, directorul de cercetare Google, a dezvăluit într-un interviu din 2011

Nu avem algoritmi mai buni. Avem doar mai multe date.

Fără excepție, calitatea și cantitatea setului de date nu sunt neglijabile. De aceea, cea mai mare platformă de gătit din Europa va fi răzuită: fiecare rețetă, în cele din urmă 316’756 rețete (începând din decembrie 2017), sunt descărcate cu un total de 879’620 de imagini. Este important să nu procedați prea repede la descărcare și să protejați serverele cu prea multe interogări, deoarece altfel interzicerea propriei adrese IP ar face ca colectarea datelor să fie mai dificilă.

Mai multe date duc la mai multe dimensiuni, dar mai multe dimensiuni nu duc neapărat la un model mai bun și la reprezentarea acestuia. Modelele deviante din setul de date care perturbă învățarea pot fi amplificate neintenționat de mai multe dimensiuni, o generalizare și învățarea înregistrării datelor este afectată pentru rețeaua neuronală, raportul semnal-zgomot scade.

Când faceți casarea site-ului web, este important să respectați fișierul robots.txt. Unii administratori nu doresc vizite de la roboți la anumite directoare. https://www.chefkoch.de/robots.txt oferă:

Listate sunt directoare care nu ne interesează, astfel încât să puteți continua cu încredere. Cu toate acestea, sunt recomandate măsuri precum antetele aleatorii și suficiente pauze mari între solicitările individuale pentru a evita o posibilă interdicție de pe site (am învățat acest lucru lucrând la un alt proiect în mod greu).

Un următor pas important este selectarea caracteristicilor pentru a dezavantaja datele neimportante. Pregătirea datelor brute pentru rețeaua neuronală este obișnuită în practică. În prima trecere, se descarcă numele rețetei, cererea medie pentru rețetă, numărul de evaluări, nivelul de dificultate, timpul de pregătire și data publicării. În a doua trecere, apoi lista ingredientelor, textul rețetei, toate imaginile și de câte ori a fost tipărită rețeta. Cu aceste caracteristici, înregistrarea datelor poate fi descrisă foarte bine și ajută la o înțelegere puternică a setului de date, ceea ce este important pentru selectarea algoritmilor.

Date precum numele rețetei, evaluarea, data de la încărcarea rețetei etc. sunt stocate într-un fișier CSV. Dacă rețeta are o imagine, miniatura este plasată în folderul search_thumbnails. Vom folosi multiprocesarea pentru a asigura un timp de descărcare mai scurt. Pentru informații suplimentare, accesați Documentația Python

Vă rugăm să rețineți că codul dat a fost scurtat. Pentru codul complet, vizitați Notebook-ul Jupyter corespunzător.

Apoi, trebuie să răzuim lista ingredientelor, preparatul, etichetele și toate imaginile fiecărei rețete.

Dacă totul a decurs fără probleme cu descărcarea, datele noastre arată astfel:

  • Un total de 879'620 imagini (35 GB)
  • 316'756 rețete
    - Din care 189'969 conțin una sau mai multe imagini
    - - Din care 107.052 rețete conțin mai mult de 2 imagini
    - 126'787 nu conțin nicio imagine

Statistici

Pentru a obține o primă impresie, de obicei trasăm o hartă de căldură pentru a obține primele informații despre posibile caracteristici care sunt interesante.