15/02/2024
Într-o lume în continuă mișcare, unde eficiența și rezultatele rapide sunt cheia succesului, nu e de mirare că și în domeniul învățării profunde căutăm soluții care să ne propulseze înainte. Gândiți-vă la antrenamentele de fitness: nu v-ați dori să obțineți rezultate maxime în cel mai scurt timp, cu efort minim, dar cu o tehnică impecabilă? Exact asta promite fastai pentru inteligența artificială! Este o bibliotecă Python revoluționară, concepută pentru a face dezvoltarea modelelor de învățare profundă de ultimă generație (state-of-the-art) mai accesibilă și mai rapidă ca niciodată.

Fondată de Jeremy Howard și Rachel Thomas, fastai a fost creată cu o misiune clară: să ofere practicienilor de învățare profundă o cale rapidă și ușoară pentru a obține rezultate excepționale într-o varietate de domenii standard de învățare supervizată, inclusiv viziune computerizată, procesarea limbajului natural, date tabulare și sisteme de recomandare colaborativă. Această abordare, despre care vom discuta în detaliu, ne permite să antrenăm modele mai precise, mai rapid, cu mai puține date și în mai puțin timp și bani. Pregătiți-vă să descoperiți cum fastai poate simplifica și accelera călătoria voastră în lumea fascinantă a inteligenței artificiale.
Ce este fastai și de ce este crucial în peisajul AI actual?
Fastai nu este doar o altă bibliotecă de învățare profundă; este o abordare holistică ce combină o bibliotecă de cod cu un curs online, ambele concepute conform unei metodologii “de sus în jos”. Aceasta înseamnă că începeți prin a învăța cum să obțineți rezultate de ultimă generație cu cod minimal, apoi, pe măsură ce avansați, explorați detaliile și conceptele fundamentale. Spre deosebire de alte cadre care pot părea copleșitoare prin complexitatea lor, fastai simplifică procesul, permițându-vă să vă concentrați pe înțelegerea conceptelor cheie și pe aplicarea lor practică.
Unul dintre principalele avantaje ale fastai este capacitatea sa de a abstractiza complexitatea inerentă a antrenării modelelor de învățare profundă. Utilizând metode și abordări avansate, fastai generează rezultate remarcabile, adesea depășind performanțele obținute prin metode tradiționale. Acest lucru se traduce prin modele mai precise, antrenate într-un timp considerabil mai scurt, cu cerințe reduse de date și, implicit, cu costuri mai mici. Este construit pe baza puternicei biblioteci PyTorch, beneficiind de flexibilitatea și performanța acesteia, adăugând în același timp un strat de ușurință în utilizare și funcționalități avansate.
Fundamentele fastai: Abordarea "Codului Practic"
Pentru a începe cu fastai, este recomandat să aveți o cunoștințe de bază de Python 3. De asemenea, un mediu de lucru Jupyter Notebook cu acces la un GPU este esențial. De ce un GPU? Simplu: procesarea datelor și calculele necesare pentru antrenarea modelelor de învățare profundă sunt extrem de intensive. Un GPU poate accelera procesul de antrenare de până la 100 de ori comparativ cu un CPU, transformând ore sau zile de așteptare în doar câteva minute. Nu vă faceți griji dacă nu aveți un GPU dedicat; platforme precum Google Colaboratory oferă acces gratuit la GPU-uri, facilitând intrarea în lumea fastai.
Antrenarea unui Clasificator de Imagini cu fastai: Un studiu de caz MNIST
Să explorăm puterea fastai printr-un exemplu concret: antrenarea unui clasificator de imagini pentru setul de date MNIST. Acest set de date conține imagini cu cifre scrise de mână, de la 0 la 9, ceea ce îl transformă într-o problemă de clasificare multi-clasă cu 10 categorii distincte. Setul este compus din 60.000 de imagini pentru antrenare și 10.000 de imagini pentru validare.

Pregătirea Mediului
Primul pas este să ne asigurăm că toate bibliotecile necesare sunt instalate. Rulați următoarea comandă într-o celulă Jupyter:
!pip install fastai --upgradeDacă fastai nu este deja instalat sau este o versiune mai veche, această comandă îl va instala/actualiza. După instalare, poate fi necesar să reporniți mediul de rulare.
Apoi, vom importa biblioteca fastai pentru viziune computerizată:
from fastai.vision.all import *Dacă aveți experiență în programare Python, s-ar putea să vă întrebați de ce importăm toate submodulele și funcțiile dintr-o clasă (utilizând *). De obicei, aceasta este o practică nerecomandată. Însă, biblioteca fastai este proiectată într-un mod inteligent, astfel încât sunt importate doar funcțiile necesare, asigurându-se că nu există o încărcare inutilă a memoriei. Este un exemplu de cum fastai prioritizează ușurința în utilizare fără a compromite performanța.
Descărcarea și Încărcarea Datelor
Acum, să descărcăm setul de date MNIST. Fastai simplifică acest proces cu funcția untar_data:
path = untar_data(URLs.MNIST)Funcția untar_data preia un URL al setului de date, îl descarcă, îl extrage și apoi returnează calea către date. Aceasta returnează un obiect Pathlib.PosixPath, care permite accesarea și navigarea ușoară prin sistemul de fișiere. Utilizăm URLs.MNIST, o metodă fastai care conține URL-uri către numeroase seturi de date populare. Putem verifica conținutul căii utilizând path.ls(), care va afișa folderele 'training' și 'testing'.
Următorul pas este încărcarea datelor. Fastai oferă ImageDataLoaders, o clasă specializată pentru încărcarea seturilor de date pentru problemele de viziune computerizată. De obicei, seturile de date de viziune computerizată sunt structurate astfel încât eticheta unei imagini este numele folderului în care se află imaginea. Deoarece setul nostru de date MNIST este structurat în acest fel, folosim metoda from_folder pentru a încărca imaginile:
dls = ImageDataLoaders.from_folder(path=path, train='training', valid='testing', shuffle=True)Aici specificăm calea către setul de date, numele folderelor care conțin datele de antrenare și validare, și inițializăm shuffle la True, asigurându-ne că imaginile sunt amestecate înainte de a fi introduse în model. Pentru mai multe informații despre orice funcție fastai, puteți folosi metoda doc(), de exemplu doc(ImageDataLoaders.from_folder). Putem vizualiza câteva imagini din seturile de antrenare și validare folosind dls.train.show_batch() și dls.valid.show_batch().
Construirea și Antrenarea Modelului
Acum, să creăm modelul. Fastai face acest lucru incredibil de simplu:
learn = cnn_learner(dls, resnet18, metrics=[accuracy, error_rate])Aici, cerem fastai să construiască un model de rețea neuronală convoluțională (CNN) folosind arhitectura resnet18 (un model pre-antrenat, despre care vom discuta imediat) și să-l antreneze pe încărcătorul de date dls. De asemenea, specificăm metricile pe care dorim să le urmărim în timpul antrenării: accuracy (acuratețea) și error_rate (rata de eroare). CNN-urile sunt abordarea state-of-the-art actuală pentru crearea modelelor de viziune computerizată.
Acum, să antrenăm (mai precis, să ajustăm fin) modelul:
learn.fine_tune(4)Această linie de cod inițiază procesul de antrenare pentru 4 epoci (o epocă reprezintă o trecere completă a întregului set de date de antrenare prin rețea). Veți observa rezultate impresionante, cum ar fi o acuratețe de peste 99% și o rată de eroare aproape de 0,8%. Este incredibil cum am putut obține aceste rezultate de ultimă generație cu doar 4 epoci, 5 linii de cod și aproximativ 5 minute de antrenare! Această performanță este posibilă datorită unei tehnici puternice numite transfer de învățare.

Puterea Transferului de Învățare
Înainte de a continua, trebuie să înțelegem ce sunt modelele pre-antrenate. Acestea sunt, în esență, arhitecturi de rețele neuronale care au fost deja antrenate pe seturi de date masive și pentru scopuri diferite. De exemplu, resnet18, pe care l-am folosit, este o rețea reziduală cu 18 straturi, antrenată pe peste un milion de imagini din setul de date ImageNet. Acest model pre-antrenat poate clasifica cu ușurință imagini în 1000 de categorii diferite, cum ar fi cărți, creioane, animale etc. Prin urmare, acest model "știe" deja să recunoască diverse obiecte și caracteristici vizuale înainte de a fi antrenat pe setul nostru de date specific.
Transferul de învățare este tehnica care ne permite să utilizăm un model pre-antrenat pentru o sarcină și un set de date noi. Practic, este procesul de a folosi un model care a învățat deja o mulțime de lucruri utile și de a-l adapta pentru scopul nostru specific. În cazul nostru, folosim resnet18, antrenat inițial pentru a clasifica obiecte generale, pentru a clasifica imagini cu cifre scrise de mână. Acest lucru este posibil datorită unui pas fundamental numit ajustare fină (fine-tuning).
Când avem un model pre-antrenat, pasul de ajustare fină implică actualizarea ponderilor modelului pre-antrenat prin antrenarea acestuia pentru câteva epoci pe noul set de date. Astfel, modelul își adaptează cunoștințele generale la particularitățile noului set de date. Prin utilizarea acestei tehnici, putem obține rezultate de ultimă generație în sarcina noastră, adică clasificarea cifrelor scrise de mână, mult mai rapid și mai eficient decât am putea antrenând un model de la zero.
Vizualizarea și Interpretarea Rezultatelor
După antrenare, este esențial să evaluăm și să interpretăm performanța modelului. Fastai oferă instrumente simple și intuitive pentru acest lucru. Putem face predicții pe imagini individuale:
# preia toate căile imaginilor din folderul de testare
images = get_image_files(path/'testing')
# selectează o imagine și o afișează
img = PILImage.create(images[4432])
img # afișează imaginea
# prezice clasa imaginii
lbl, _, _ = learn.predict(img) # lbl va conține eticheta prezisă
print(lbl)De asemenea, putem genera un raport de clasificare detaliat, inclusiv o matrice de confuzie, pentru a înțelege mai bine unde modelul a avut dificultăți:
interep = ClassificationInterpretation.from_learner(learn)
interep.plot_confusion_matrix()Matricea de confuzie ne arată câte imagini au fost clasificate corect și câte au fost greșit clasificate pentru fiecare clasă. De exemplu, vom vedea că din aproape 10.000 de imagini, doar câteva au fost clasificate greșit, confirmând performanța excepțională a modelului.
Optimizarea și Transformările Datelor cu DataBlock API
Un aspect crucial în învățarea profundă este pregătirea și augmentarea datelor. Fastai simplifică acest proces printr-un sistem puternic numit DataBlock API și obiecte DataBunch. Un DataBunch este compus din seturi de date (DataSet) și încărcătoare de date (DataLoader) pentru fiecare grup: antrenare, validare și, opțional, testare. Un DataSet include imaginile propriu-zise și etichetele lor, în timp ce un DataLoader redimensionează imaginile, aplică transformări și le transmite unității de procesare în loturi (batches).
Crearea unui DataBunch dintr-un DataFrame se face folosind DataBlock API-ul fastai, un intermediar care transferă datele din stocare în procesul de învățare. Pentru imagini, crearea unui DataBunch poate implica cinci pași esențiali, care sunt adesea înlănțuiți pentru o lizibilitate crescută:
- Crearea unui
ImageItemList: Acesta este primul pas, unde se identifică tipul de element (o imagine) și se listează dimensiunile tensorialului. Se creează din căile de fișiere ale imaginilor. Exemplu:ImageItemList.from_df(path=path, df=df, cols='fpaths'). - Divizarea imaginilor în seturi de antrenare și validare: Fastai permite divizarea aleatorie a datelor. Este important să setați un
seedpentru a asigura reproductibilitatea rezultatelor. Exemplu:.random_split_by_pct(valid_pct=0.2, seed=10), care alocă 20% pentru validare și 80% pentru antrenare. - Etichetarea imaginilor: Se atribuie etichete (clase) fiecărei imagini. Exemplu:
.label_from_df(cols='class_label'). - Aplicarea transformărilor (augmentarea imaginilor): Transformările sunt operații aplicate aleatoriu imaginilor (ex: rotații, zoom, modificări de luminozitate) pentru a crește diversitatea setului de date și a îmbunătăți robustețea modelului. Funcția
get_transforms()oferă o serie de transformări comune. Argumente precumsize(dimensiunea la care sunt redimensionate imaginile) șipadding_mode(cum se umple spațiul atunci când imaginile sunt redimensionate sau rotite) sunt cruciale. Exemplu:.transform(tfms=get_transforms(), size=49, padding_mode='reflection'). Aceste transformări includ și operații precumcrop_pad()șirand_crop(), asigurând că imaginile sunt transformate în pătrate, o cerință pentru multe arhitecturi CNN. - Bundling în
DataBunch: Ultimul pas este crearea încărcătoarelor de date cu o anumită dimensiune a lotului (bs- batch size) și numărul de procese de lucru (num_workers). O epocă reprezintă o trecere completă a tuturor datelor prin rețea în loturi de această dimensiune. Exemplu:.databunch(bs=128, num_workers=4).
O modalitate curată de a programa crearea unui DataBunch este înlănțuirea acestor apeluri:
data = (ImageItemList.from_df(df=df, path=path, cols='fpaths')
.random_split_by_pct(valid_pct=0.2, seed=10)
.label_from_df(cols='class_label')
.transform(tfms, size=49, padding_mode)
.databunch(bs=128, num_workers=4 ))După ce DataBunch este creat, puteți vizualiza datele cu data.show_batch(rows=3, figsize=(7,7), hide_axis=False) pentru a inspecta cum arată imaginile după aplicarea transformărilor. Normalizarea datelor (ex: data.normalize()) poate fi, de asemenea, adăugată la blocul de date, deși pentru imagini, aceasta este adesea gestionată intern sau ca parte a procesului de transformare.

Tabel Comparativ: Antrenare de la Zero vs. Transfer de Învățare cu fastai
Pentru a sublinia beneficiile abordării fastai, să comparăm antrenarea unui model de învățare profundă de la zero cu utilizarea transferului de învățare prin fastai:
| Caracteristică | Antrenare de la Zero (Tradițional) | Transfer de Învățare cu fastai (Recomandat) |
|---|---|---|
| Date necesare | Cantități masive de date (milioane de imagini pentru performanță) | Cantități mult mai mici de date |
| Timp de antrenare | Zile, săptămâni, sau chiar luni pe hardware puternic | Minute, ore, maxim zile, chiar și pe hardware accesibil |
| Complexitate cod | Cod extins, management manual al arhitecturilor și optimizatorilor | Cod concis, API intuitiv, automatizări inteligente |
| Performanță | Bună, dar necesită optimizare și reglaje fine considerabile | State-of-the-art cu efort minim, bazat pe expertiza modelelor pre-antrenate |
| Costuri (Hardware) | Foarte ridicate (GPU-uri multiple, servere dedicate) | Mult mai reduse (un singur GPU, servicii cloud gratuite/ieftine) |
| Accesibilitate | Ridicată, necesită cunoștințe aprofundate de ML și Deep Learning | Scăzută, permite și începătorilor să obțină rezultate profesionale |
Întrebări Frecvente (FAQ)
Q: Ce prerequisite am nevoie pentru a folosi fastai?
A: Pentru a începe cu fastai, aveți nevoie de cunoștințe de bază de Python 3. Este de asemenea recomandat un mediu Jupyter Notebook și acces la un GPU, deși platforme precum Google Colab oferă GPU-uri gratuite.
Q: Este fastai util doar pentru clasificarea imaginilor?
A: Absolut nu! Deși exemplul nostru s-a concentrat pe viziunea computerizată, fastai este un cadru versatil care acoperă o gamă largă de aplicații de învățare profundă, inclusiv procesarea limbajului natural (NLP), lucrul cu date tabulare (cum ar fi seturile de date tipice din Excel) și dezvoltarea sistemelor de recomandare.
Q: Ce este transferul de învățare și de ce este important?
A: Transferul de învățare este o tehnică fundamentală în fastai și în învățarea profundă în general. Implică utilizarea unui model care a fost deja antrenat pe un set de date foarte mare (cum ar fi ImageNet pentru imagini) și adaptarea sa (ajustare fină) pentru o sarcină nouă, specifică. Acest lucru este crucial deoarece reduce drastic cantitatea de date și timpul de antrenare necesar pentru a atinge o acuratețe ridicată, valorificând cunoștințele preexistente ale modelului.
Q: De ce este necesar un GPU pentru antrenarea modelelor fastai?
A: Modelele de învățare profundă implică un volum imens de calcule matematice. Unitatea de Procesare Grafică (GPU) este special concepută pentru a efectua aceste calcule în paralel, mult mai rapid decât o Unitare Centrală de Procesare (CPU). Utilizarea unui GPU poate accelera procesul de antrenare de până la 100 de ori, făcând posibilă antrenarea modelelor complexe în minute sau ore, în loc de zile sau săptămâni.
Q: Este fastai o bibliotecă gratuită și open-source?
A: Da, fastai este o bibliotecă complet gratuită și open-source, licențiată sub licența Apache 2.0. Acest lucru înseamnă că oricine o poate utiliza, modifica și distribui, contribuind la o comunitate vibrantă și la dezvoltarea continuă a acesteia.
Concluzie
Fastai este mai mult decât o simplă bibliotecă; este o poartă către o înțelegere mai profundă și o aplicare mai eficientă a inteligenței artificiale. Prin simplificarea procesului de dezvoltare a modelelor de învățare profundă și prin valorificarea unor tehnici puternice precum transferul de învățare, fastai democratizează accesul la capabilități AI de ultimă generație. Indiferent dacă sunteți un începător entuziast sau un practicant experimentat, fastai vă oferă instrumentele necesare pentru a obține rezultate remarcabile, rapid și cu efort minim. Așa cum în fitness căutăm metodele cele mai eficiente pentru a ne atinge obiectivele, în lumea AI, fastai este antrenorul personal care vă ghidează spre performanță maximă. Vă încurajăm să explorați această bibliotecă extraordinară și să descoperiți potențialul său imens!
Dacă vrei să descoperi și alte articole similare cu Fastai: Inteligența Artificială la Viteză Maximă!, poți vizita categoria Fitness.
