För omträning av änd-till-änd-system för ansiktsuttryck
Bilaga 1:
Darknet Deep Learning Framework Source Code Analysis: Detaljerad kinesisk kommentar, som täcker ramverkets principer och analys av implementeringssyntax
https://github.com/hgpvision/darknet
darknet är ett relativt lättviktigt öppen källkodsramverk för djupinlärning som helt bygger på C och CUDA, dess huvudfunktioner är enkla att installera, inga beroenden (OpenCV kan användas), mycket portabel och stöder både CPU- och GPU-beräkningsmetoder.
Jämfört med TensorFlow är darknet inte så kraftfullt, men detta är också en fördel med darknet:
- darknet är helt implementerat i C-språket, utan några beroenden, självklart kan du använda OpenCV, men använd det bara för att visa bilder, för bättre visualisering;
- darknet stödjer CPU (så det spelar ingen roll om du inte har GPU) och GPU (CUDA/cuDNN, såklart är det bättre att använda GPU);
- Det är just för att det är relativt lätt och inte har ett kraftfullt API som TensorFlow, så jag känner att det har en annan form av flexibilitet, som passar för att studera underliggande och kan förbättras och utökas från grunden mer bekvämt.
- Det finns likheter mellan implementeringen av darknet och implementeringen av caffe, och jag är bekant med darknet och tror att det är hjälpsamt att komma igång med caffe.
Bilaga 2:
Författare: Zhihu User Länk:https://www.zhihu.com/question/51747665/answer/145607615 Källa: Zhihu Upphovsrätten tillhör författaren. För kommersiella återtryck, vänligen kontakta författaren för godkännande, och för icke-kommersiella återtryck, vänligen ange källan.
De tre viktigaste strukturdefinitionerna i Darknet är network_state, nätverk och lager; Den nya versionen network_state har integrerats i nätverket.
Koden kan först ignorera GPU-delen, och olika typer av nätverkslager definierar exekveringsreglerna för denna typ genom funktionspekarna framåt bakåt och uppdaterar i lagret. Till exempel finns det tre metoder för sammanhängande lager, såsom forward_connected_layer backward_connected_layer update_connected_layer gru-lager, etc.;
Atomära operationer finns endast i blas.c och gemm.c, nätverksoperationer finns i network.c, och de viktigaste är train_network_datum, train_networks, train_network_batch och network_predict;
train_network_datum är den float_pair som används för indata, det vill säga flytta-*x- och flytta-*y-par;
train_networks tränas i network_kernel.cu i ett samtidigt trådningsläge, och parametern är data;
För det första är darknet enkeltrådad i CPU-läge, och i multi-GPU-grafikläge stöder det train_networks multi-kortkörning, och detta är också ingången till att omvandla distributionen av multihost-darknet-operationen, där du kan se tränad viktdata slå ihop och skalas.
train_network_datum Kör forward_network { lagervis framåtriktat nätverk } backward_network { lagervis omvänt nätverk }, och kör en update_network ( ,,, hastighet, rörelsemängd och avklingande under antalet gånger (*nät.sedda %underdelningar) är uppfyllda;
För användardefinierad nätverksprofilbehandling i parse_network_cfg läses träningsresultaten igenom load_weights
Det är ryggraden.
Om du behöver hantera datakällor med särskilda behov behöver du hänvisa till data.c för att komma igång.
För CFG-profilen är fokusjusteringen (naturligtvis är alla parametrar viktiga, kan behöva justeras) och den globala parametern för fokus under träning: avklingningsmomentum learning_rate Dessa tre är relaterade till konvergenshastigheten. Policy är viktpolicyn, inputbatch (och relaterade underavdelningar) utsläpp är relaterade till datagenomströmningsdimensionen, och den senaste versionen verkar ha korrigeringar här i utsläppen.
|