Pentru reantrenarea sistemelor end-to-end pentru expresiile faciale
Anexa 1:
Analiza codului sursă al cadrului de învățare profundă Darknet: comentariu detaliat în chineză, acoperind principiile cadrului și analiza sintaxei implementării
https://github.com/hgpvision/darknet
darknet este un cadru de învățare profundă open source relativ ușor, bazat în întregime pe C și CUDA, caracteristicile sale principale fiind ușor de instalat, fără dependențe (se poate folosi OpenCV), foarte portabil și suportă atât metode de calcul CPU, cât și GPU.
Comparativ cu TensorFlow, darknet-ul nu este atât de puternic, dar acesta este și un avantaj al darknet-ului:
- darknet este complet implementat în limbajul C, fără dependențe, desigur poți folosi OpenCV, dar doar pentru afișarea imaginilor, pentru o vizualizare mai bună;
- darknet suportă CPU (deci nu contează dacă nu ai GPU) și GPU (CUDA/cuDNN, desigur că e mai bine să folosești GPU);
- Tocmai pentru că este relativ ușor și nu are un API puternic ca TensorFlow, așa că simt că are o altă variantă de flexibilitate, potrivită pentru studiul elementelor de bază și care poate fi îmbunătățită și extinsă de la bază mai convenabil.
- Există asemănări între implementarea darknet-ului și cea a cafefei, iar eu sunt familiarizat cu darknet-ul și cred că este util să începi cu cafea.
Anexa 2:
Autor: Zhihu User Legătură:https://www.zhihu.com/question/51747665/answer/145607615 Sursa: Zhihu Drepturile de autor aparțin autorului. Pentru reeditări comerciale, vă rugăm să contactați autorul pentru autorizare, iar pentru reeditări non-comerciale, vă rugăm să indicați sursa.
Cele trei cele mai importante definiții ale structurilor în Darknet sunt network_state, rețea și strat; Noua versiune network_state a fost integrată în rețea.
Codul poate ignora mai întâi partea de GPU, iar diferite tipuri de straturi de rețea definesc regulile de execuție ale acestui tip prin punctele de funcție înainte, înapoi și actualizarea în strat. De exemplu, există trei metode pentru straturile conexe, cum ar fi stratul forward_connected_layer backward_connected_layer update_connected_layer gru etc.;
Operațiunile atomice sunt doar în blas.c și gemm.c, operațiunile de rețea sunt în network.c, iar cele mai importante sunt train_network_datum, train_networks, train_network_batch și network_predict;
train_network_datum este float_pair folosită pentru datele de intrare, adică perechile float *x și float *y;
train_networks este antrenat în network_kernel.cu într-un mod concurent de threading, iar parametrul este data;
Un punct este că darknet-ul este single-threaded în modul CPU, iar în modul grafică multi-GPU train_networks suportă rularea multi-plăcilor, iar acesta este și punctul de intrare pentru transformarea operațiunii darknet multi-host de distribuție, unde poți vedea compunerea și scalarea datelor de greutate antrenate.
train_network_datum Execută forward_network { rețea directă pe strat } backward_network { rețea inversă pe strat } și execută o update_network ( ,,, rate, impuls, decădere sub numărul de ori (*net.seen %subdiviziuni) este satisfăcut;
Pentru procesarea profilurilor de rețea definite de utilizator în parse_network_cfg, rezultatele antrenamentului sunt citite prin load_weights
Asta e coloana vertebrală.
Dacă trebuie să lucrezi cu surse de date cu nevoi speciale, trebuie să consulți data.c pentru a începe.
Pentru profilul CFG, ajustarea focalizării (desigur, toți parametrii sunt importanți, poate fi necesar ajustați) și parametrul global al focalizării în timpul antrenamentului: impulsul de dezintegrare learning_rate Aceste trei sunt legate de viteza de convergență. Politica este politica greutăților, ieșirile de tip batch de intrări (și subdiviziuni conexe) sunt legate de dimensiunea debitului datelor, iar cea mai recentă versiune pare să aibă corecții aici la ieșiri.
|