GitHub - clasificarea alimentelor stratosparkfood-101-keras cu Deep Learning în Keras Tensorflow

Clasificarea alimentelor cu Deep Learning în Keras/Tensorflow

Computer, ce mănânc oricum?

deep

Dacă citiți acest lucru pe GitHub, demonstrația arată așa. Vă rugăm să urmați linkul de mai jos pentru a vizualiza demo-ul live pe blogul meu.

ACTUALIZĂRI

Rețelele neuronale convoluționale (CNN), o tehnică din câmpul mai larg de învățare profundă, au fost o forță revoluționară în aplicațiile de viziune computerizată, în special în ultimul jumătate de deceniu. Un caz de utilizare principal este cel al clasificării imaginilor, de ex. stabilind dacă o imagine este cea a unui câine sau a unei pisici.

Nu trebuie să vă limitați la un clasificator binar, desigur; CNN-urile se pot scala cu ușurință la mii de clase diferite, așa cum se vede în bine-cunoscutul set de date ImageNet de 1000 de clase, utilizat pentru a evalua performanța algoritmului de viziune pe computer.

În ultimii câțiva ani, aceste tehnici de ultimă oră au început să devină disponibile comunității mai largi de dezvoltare software. Pachetele de rezistență industrială, cum ar fi Tensorflow, ne-au oferit aceleași elemente de bază pe care Google le folosește pentru a scrie aplicații de învățare profundă pentru dispozitive încorporate/mobile în clustere scalabile din cloud - Fără a fi nevoie să codificați manual operațiunile matricei GPU, gradienții derivați parțiali și optimizatorii stochastici care face posibilă aplicațiile eficiente.

Pe lângă toate acestea, există API-uri ușor de utilizat, cum ar fi Keras, care abstrag unele detalii de nivel inferior și ne permit să ne concentrăm pe prototiparea rapidă a unui grafic de calcul de învățare profundă. La fel ca am amesteca și asorta Legos pentru a obține rezultatul dorit.

Ca proiect introductiv pentru mine, am ales să folosesc un clasificator de imagine pre-antrenat care vine cu Keras și să-l recalific pe un set de date care mi se pare interesant. Sunt foarte îndrăgit de mâncarea bună și de gătit acasă, așa că ceva în acest sens a fost apetisant.

În lucrare, Food-101 - Componente discriminante miniere cu păduri aleatorii, ele introduc setul de date Food-101. Există 101 clase diferite de alimente, cu 1000 de imagini etichetate pe clasă disponibile pentru instruire supravegheată.

M-a inspirat această postare pe blogul Keras: Construirea unor modele puternice de clasificare a imaginilor folosind foarte puține date și un script conex pe care l-am găsit pe github: keras-finetuning.

Am construit recent un sistem în scopul experimentării cu Deep Learning. Componentele cheie sunt un Nvidia Titan X Pascal cu 12 GB de memorie, 96 GB de memorie RAM de sistem, precum și un procesor Intel Core i7 cu 12 nuclee. Rulează Ubuntu 16.04 pe 64 de biți și folosește distribuția Anaconda Python. Din păcate, nu veți putea urmări împreună cu acest notebook pe propriul sistem decât dacă aveți suficientă memorie RAM. În viitor, aș dori să învăț cum să gestionez mai mult decât seturile de date RAM într-un mod performant. Vă rugăm să luați legătura dacă aveți idei!

Am petrecut aproximativ o lună înăuntru și în afara construcției acestui proiect, încercând să antrenez zeci de modele și explorând diverse domenii, cum ar fi multiprocesarea, pentru o creștere mai rapidă a imaginii. Aceasta este o versiune curățată a notebook-ului care conține modelul meu cel mai performant începând cu 22 ianuarie 2017.

După reglarea fină a unui model Google InceptionV3 pre-antrenat, am reușit să realizez 82,03% Exactitate Top-1 pe setul de testare folosind o singură cultură per articol. Folosind 10 culturi pe exemplu și luând cele mai frecvente clase prezise, ​​am reușit să realizez 86,97% Exactitate Top-1 și 97,42% Precizie Top-5

Alții au reușit să obțină rezultate mai precise:

  • Încărcarea unei cantități mari de date în memorie, cum să evitați?
  • Salvarea datelor într-un fișier h5py pentru procesarea în afara benzii?
  • Utilizarea Dask pentru procesarea distribuită?
  • Îmbunătățirea augmentării imaginii multiprocesare?
  • Exportul în aplicația mobilă Tensorflow?