Kasvojen ilmeiden kokonaisvaltaisten järjestelmien uudelleenkoulutukseen
Liite 1:
Darknet Deep Learning Frameworkin lähdekoodianalyysi: Yksityiskohtainen kiinalainen kommentaari, joka kattaa kehysperiaatteet ja toteutussyntaksianalyysin
https://github.com/hgpvision/darknet
darknet on suhteellisen kevyt avoimen lähdekoodin syväoppimiskehys, joka perustuu kokonaan C:hen ja CUDA:han, sen pääominaisuudet ovat helppoja asentaa, ei riippuvuuksia (OpenCV:tä voi käyttää), erittäin kannettava ja tukee sekä CPU- että GPU-laskentamenetelmiä.
Verrattuna TensorFlow'hun darknet ei ole kovin tehokas, mutta tämä on myös darknetin etu:
- darknet on täysin toteutettu C-kielellä, ilman riippuvuuksia, tietenkin voit käyttää OpenCV:tä, mutta sitä käytetään vain kuvien näyttämiseen, paremman visualisoinnin saavuttamiseksi;
- darknet tukee prosessoria (eli ei ole väliä, vaikka sinulla ei olisi näytönohjainta) ja näytönohjainta (CUDA/cuDNN, tietysti GPU:ta on parempi käyttää);
- Juuri siksi, että se on suhteellisen kevyt eikä sillä ole yhtä tehokasta API:ta kuin TensorFlow'lla, joten koen, että siinä on toinen joustavuus, joka sopii taustalla olevan tutkimiseen ja jota voi parantaa ja laajentaa alhaalta kätevämmin.
- Darknetin ja Caffen toteutuksen välillä on yhtäläisyyksiä, ja tunnen darknetin ja uskon, että siitä on hyötyä aloittaa caffe.
Liite 2:
Kirjoittaja: Zhihu User Linkki:https://www.zhihu.com/question/51747665/answer/145607615 Lähde: Zhihu Tekijänoikeus kuuluu tekijälle. Kaupallisten uudelleenpainoksien osalta ota yhteyttä kirjoittajaan luvan saamiseksi, ja ei-kaupallisissa uudelleenpainoksissa ilmoita lähde.
Darknetin kolme tärkeintä rakennemääritelmää ovat network_state, verkko ja kerros; Uusi versio network_state on integroitu verkkoon.
Koodi voi ensin jättää GPU-osan huomiotta, ja eri verkkokerrokset määrittelevät tämän tyyppiset suoritussäännöt funktioosoittimien kautta eteenpäin taaksepäin ja päivittyvät kerroksessa. Esimerkiksi yhdistetyille kerroksille on kolme menetelmää, kuten forward_connected_layer backward_connected_layer update_connected_layer gru-kerros jne.;
Atomioperaatiot ovat vain blas.c:ssä ja gemm.c:ssä, verkkotoiminnot network.c:ssä, ja tärkeimmät ovat train_network_datum, train_networks, train_network_batch ja network_predict;
train_network_datum on float_pair, jota käytetään syötedatalle, eli float *x ja float *y -pareille;
train_networks koulutetaan network_kernel.cu:ssa samanaikaisessa säikeyttämistilassa, ja parametri on data;
Yksi pointti, darknet on yksisäikeinen CPU-tilassa, ja moni-GPU-grafiikkatilassa se tukee train_networks monikorttia, ja tämä on myös sisäänkäynti jakelun moniisäntä-darknet-toiminnon muuttamiseen, jossa näet koulutetun painodatan yhdistyvän ja skaalautuvan.
train_network_datum Suorita forward_network { kerrosittain eteenpäin suuntautuva verkko } backward_network { kerrosittain käänteinen verkko } ja suorita update_network ( ,,, nopeus, liikemäärä, heikkeneminen niiden kertojen määrällä (*net.seen %subdivisions) täyttyy;
Käyttäjän määrittelemässä verkkoprofiilin käsittelyssä parse_network_cfg koulutustulokset luetaan load_weights
Se on selkäranka.
Jos sinun täytyy käsitellä tietolähteitä, joilla on erityistarpeita, sinun kannattaa tutustua data.c:hen aloittaaksesi.
CFG-profiilissa tarkennuksen säätö (tietenkin kaikki parametrit ovat tärkeitä, saatetaan joutua säätämään) ja harjoituksen fokuksen globaali parametri: heikkenemismomentti learning_rate Nämä kolme liittyvät konvergenssinopeuteen. Politiikka on painopolitiikka, syötteiden erä (ja siihen liittyvät alajaot) ouputit liittyvät datan läpimenon ulottuvuuteen, ja viimeisimmässä versiossa näyttää olevan korjauksia täällä ouputeissa.
|