Per la riqualificazione di sistemi end-to-end per le espressioni facciali
Appendice 1:
Analisi del codice sorgente del Framework Deep Learning Darknet: commento dettagliato in cinese, che copre i principi del framework e l'analisi della sintassi dell'implementazione
https://github.com/hgpvision/darknet
darknet è un framework di deep learning open source relativamente leggero basato interamente su C e CUDA, le sue principali caratteristiche sono facili da installare, senza dipendenze (è possibile usare OpenCV), molto portatile e supporta sia metodi di calcolo CPU che GPU.
Rispetto a TensorFlow, il darknet non è così potente, ma questo è anche un vantaggio del darknet:
- il darknet è completamente implementato in linguaggio C, senza dipendenze, ovviamente si può usare OpenCV, ma solo per visualizzare immagini, per una migliore visualizzazione;
- darknet supporta CPU (quindi non importa se non hai una GPU) e GPU (CUDA/cuDNN, ovviamente è meglio usare GPU);
- È proprio perché è relativamente leggero e non ha un'API potente come TensorFlow, quindi penso che abbia un'altra flessibilità, adatta per studiare il sottostante e che può essere migliorata ed estesa da fondo in modo più comodo.
- Ci sono somiglianze tra l'implementazione del darknet e quella del caffe, e conosco il darknet e credo che sia utile iniziare con il caffe.
Appendice 2:
Autore: Utente Zhihu Collegamento:https://www.zhihu.com/question/51747665/answer/145607615 Fonte: Zhihu Il copyright appartiene all'autore. Per le ristampe commerciali, si prega di contattare l'autore per l'autorizzazione, e per le ristampe non commerciali, indicare la fonte.
Le tre definizioni di struct più importanti nel Darknet sono network_state, rete e livello; La nuova versione network_state è stata integrata nella rete.
Il codice può prima ignorare la parte GPU, e diversi tipi di livelli di rete definiscono le regole di esecuzione di questo tipo tramite i puntatori di funzione in avanti e aggiornati nel livello. Ad esempio, esistono tre metodi per i strati connessi, come forward_connected_layer backward_connected_layer update_connected_layer strato gru, ecc.;
Le operazioni atomiche sono solo in blas.c e gemm.c, le operazioni di rete sono in network.c, e le più importanti sono train_network_datum, train_networks, train_network_batch e network_predict;
train_network_datum è il float_pair utilizzato per i dati di input, cioè float *x e float *y coppie;
train_networks viene addestrato in network_kernel.cu in modalità threading concorrente, e il parametro è dati;
Un punto è che il darknet è single-threaded in modalità CPU e in modalità grafica multi-GPU train_networks supporta l'esecuzione multi-card, e questo è anche l'ingresso per trasformare l'operazione multi-host della distribuzione darknet, dove puoi vedere la fusione e la scala dei dati addestrati di peso.
train_network_datum Eseguire forward_network { rete avanzata a livello } backward_network { rete inversa a livello }, ed eseguire una update_network ( ,,, rate, quantità di moto e decadenza sotto il numero di volte (*net.seen %suddivisioni) è soddisfatto;
Per l'elaborazione dei profili di rete definiti dall'utente in parse_network_cfg, i risultati dell'addestramento vengono letti attraverso load_weights
Questa è la spina dorsale.
Se devi gestire fonti di dati con bisogni speciali, devi consultare data.c per iniziare.
Per il profilo CFG, l'aggiustamento della messa a fuoco (ovviamente, tutti i parametri sono importanti, potrebbe dover essere modificato) e il parametro globale della messa a fuoco durante l'allenamento: momento di decadimento learning_rate Questi tre sono collegati alla velocità di convergenza. La policy è quella dei pesi, le uscite di input batch (e suddivisioni correlate) sono correlate alla dimensione di throughput dei dati, e l'ultima versione sembra avere correzioni qui nelle outputs.
|