Voor het hertrainen van end-to-end systemen voor gezichtsuitdrukkingen
Bijlage 1:
Darknet Deep Learning Framework Source Code Analysis: Gedetailleerd Chinees commentaar, met frameworkprincipes en analyse van implementatiesyntaxis
https://github.com/hgpvision/darknet
darknet is een relatief lichtgewicht open source deep learning-framework dat volledig gebaseerd is op C en CUDA; de belangrijkste functies zijn eenvoudig te installeren, geen afhankelijkheden (OpenCV kan worden gebruikt), zeer draagbaar en ondersteunt zowel CPU- als GPU-berekeningsmethoden.
In vergelijking met TensorFlow is darknet niet zo krachtig, maar dit is ook een voordeel van darknet:
- darknet is volledig geïmplementeerd in de C-taal, zonder afhankelijkheden, natuurlijk kun je OpenCV gebruiken, maar alleen om afbeeldingen weer te geven, voor betere visualisatie;
- Darknet ondersteunt CPU (dus het maakt niet uit als je geen GPU hebt) en GPU (CUDA/cuDNN, natuurlijk is het beter om GPU te gebruiken);
- Dat komt juist doordat het relatief licht is en geen krachtige API heeft zoals TensorFlow, dus ik vind dat het een andere vorm van flexibiliteit heeft, die geschikt is om de onderliggende te bestuderen en die van onderaf gemakkelijker kan worden verbeterd en uitgebreid.
- Er zijn overeenkomsten tussen de implementatie van darknet en de implementatie van caffe, en ik ben bekend met darknet en geloof dat het nuttig is om met caffe te beginnen.
Bijlage 2:
Auteur: Zhihu User Verbinden:https://www.zhihu.com/question/51747665/answer/145607615 Bron: Zhihu Het auteursrecht behoort toe aan de auteur. Voor commerciële herdrukken kunt u contact opnemen met de auteur voor toestemming, en voor niet-commerciële herdrukken de bron vermelden.
De drie belangrijkste structdefinities in Darknet zijn network_state, netwerk en laag; De nieuwe versie network_state is geïntegreerd in het netwerk.
De code kan eerst het GPU-gedeelte negeren, en verschillende soorten netwerklagen definiëren de uitvoeringsregels van dit type via de functieverwijzingen vooruit en updaten in de laag. Er zijn bijvoorbeeld drie methoden voor verbonden lagen, zoals forward_connected_layer backward_connected_layer update_connected_layer gru-laag, enzovoort;
Atomaire bewerkingen zijn alleen in blas.c en gemm.c, netwerkoperaties in network.c, en de belangrijkste zijn train_network_datum, train_networks, train_network_batch en network_predict;
train_network_datum is de float_pair die wordt gebruikt voor invoerdata, dat wil zeggen, float *x en float *y paren;
train_networks wordt getraind in network_kernel.cu in een concurrente threading-modus, en de parameter is data;
Ten eerste is darknet single-threaded in CPU-modus, en in multi-GPU grafische modus ondersteunt het train_networks multi-card draaien, en dit is ook de ingang om de distributie multi-host darknet-operatie te transformeren, waarbij je de getrainde gewichtsdata kunt zien samenvoegen en schalen.
train_network_datum Voer forward_network uit { layerwise forward network } backward_network { layerwise reverse network }, en voer een update_network uit ( ,,, snelheid, momentum, verval onder het aantal keren (*net.seen %subdivisions) is voldoen;
Voor door gebruikers gedefinieerde netwerkprofielverwerking in parse_network_cfg worden de trainingsresultaten doorgelezen load_weights
Dat is de ruggengraat.
Als je met databronnen met speciale behoeften te maken hebt, moet je data.c raadplegen om te beginnen.
Voor het CFG-profiel geldt de focusaanpassing (natuurlijk zijn alle parameters belangrijk, mogelijk moet worden aangepast), en de globale parameter van de focus tijdens de training: decay momentum learning_rate Deze drie zijn gerelateerd aan de convergentiesnelheid. Policy is het gewichtenbeleid, inputbatch (en gerelateerde onderverdelingen) uitzetten zijn gerelateerd aan de data throughput dimensie, en de nieuwste versie lijkt hier correcties te hebben in de outs.
|