For omtrening av ende-til-ende-systemer for ansiktsuttrykk
Vedlegg 1:
Darknet Deep Learning Framework kildekodeanalyse: Detaljert kinesisk kommentar, som dekker rammeverksprinsipper og analyse av implementeringssyntaksen
https://github.com/hgpvision/darknet
darknet er et relativt lett, åpen kildekode-rammeverk for dyp læring basert utelukkende på C og CUDA, hovedfunksjonene er enkle å installere, ingen avhengigheter (OpenCV kan brukes), svært bærbar, og støtter både CPU- og GPU-beregningsmetoder.
Sammenlignet med TensorFlow er ikke darknet så kraftig, men dette er også en fordel med darknet:
- darknet er fullstendig implementert i C-språket, uten avhengigheter, selvfølgelig kan du bruke OpenCV, men kun til å vise bilder, for bedre visualisering;
- darknet støtter CPU (så det spiller ingen rolle om du ikke har GPU) og GPU (CUDA/cuDNN, selvfølgelig er det bedre å bruke GPU);
- Det er nettopp fordi den er relativt lett og ikke har et kraftig API som TensorFlow, så jeg føler at den har en annen form for fleksibilitet, som egner seg for å studere det underliggende og kan forbedres og utvides fra bunnen på en mer praktisk måte.
- Det er likheter mellom implementeringen av darknet og implementeringen av caffe, og jeg er kjent med darknet og mener det er nyttig å komme i gang med caffe.
Vedlegg 2:
Forfatter: Zhihu User Lenke:https://www.zhihu.com/question/51747665/answer/145607615 Kilde: Zhihu Opphavsretten tilhører forfatteren. For kommersielle gjenutgivelser, vennligst kontakt forfatteren for godkjenning, og for ikke-kommersielle gjenutgivelser, vennligst oppgi kilden.
De tre viktigste strukturdefinisjonene i Darknet er network_state, nettverk og lag; Den nye versjonen network_state er integrert i nettverket.
Koden kan først ignorere GPU-delen, og ulike typer nettverkslag definerer utførelsesreglene av denne typen gjennom funksjonspekerne fremover og oppdaterer i laget. For eksempel finnes det tre metoder for sammenhengende lag, som forward_connected_layer backward_connected_layer update_connected_layer gru-lag, osv.;
Atomoperasjoner finnes kun i blas.c og gemm.c, nettverksoperasjoner er i network.c, og de viktigste er train_network_datum, train_networks, train_network_batch og network_predict;
train_network_datum er float_pair brukt for inngangsdata, det vil si flytende *x og flytende *y-par;
train_networks trenes i network_kernel.cu i en samtidig tråding-modus, og parameteren er data;
For det første er darknet single-threaded i CPU-modus, og i multi-GPU grafikkmodus støtter det train_networks kjøring med flere kort, og dette er også inngangen til å transformere distribusjonen av multi-host darknet-operasjonen, hvor du kan se at de trente vektdataene slås sammen og skaleres.
train_network_datum Kjør forward_network { lagvis fremoverrettet nettverk } backward_network { lagvis omvendt nettverk }, og kjør en update_network (,,, hastighet, momentum, avtagning under antall ganger (*nett.sett %underinndelinger) er tilfredsstilt;
For brukerdefinert nettverksprofilbehandling i parse_network_cfg leses treningsresultatene gjennom load_weights
Det er ryggraden.
Hvis du trenger å håndtere datakilder med spesielle behov, må du bruke data.c for å komme i gang.
For CFG-profilen er fokusjusteringen (selvfølgelig er alle parametere viktige, kan det være nødvendig å justere), og den globale parameteren for fokuset under trening: avtaksmomentum learning_rate Disse tre er relatert til konvergenshastigheten. Policy er vektpolitikken, input batch (og relaterte underinndelinger) utplasser er relatert til datagjennomstrømningsdimensjonen, og den nyeste versjonen ser ut til å ha korreksjoner her i utpostene.
|