За преобучение на системи от край до край за изражения на лицето
Приложение 1:
Анализ на изходния код на Darknet Deep Learning Framework: Подробен китайски коментар, обхващащ принципи на рамката и анализ на синтаксиса на имплементацията
https://github.com/hgpvision/darknet
Darknet е сравнително лека отворена рамка за дълбоко обучение, базирана изцяло на C и CUDA, основните ѝ характеристики са лесни за инсталиране, без зависимости (може да се използва OpenCV), много преносим и поддържа както CPU, така и GPU методи за изчисления.
В сравнение с TensorFlow, даркнет не е толкова силен, но това е и предимство на даркнета:
- darknet е напълно реализиран на език C, без никакви зависимости, разбира се, можеш да използваш OpenCV, но само за показване на изображения, за по-добра визуализация;
- Darknet поддържа CPU (така че няма значение дали нямаш GPU) и GPU (CUDA/cuDNN, разбира се, по-добре е да се използва GPU);
- Точно защото е сравнително лек и няма мощен API като TensorFlow, така че смятам, че има друг вид гъвкавост, който е подходящ за изучаване на основата и може да се подобрява и разширява отдолу по-удобно.
- Има прилики между внедряването на даркнет и приложението на кафе, а аз съм запознат с даркнет и вярвам, че е полезно да започнеш с кафе.
Приложение 2:
Автор: Zhihu User Връзка:https://www.zhihu.com/question/51747665/answer/145607615 Източник: Zhihu Авторското право принадлежи на автора. За комерсиални преиздания, моля, свържете се с автора за одобрение, а за некомерсиални преиздания, моля, посочете източника.
Трите най-важни дефиниции на структури в Даркнет са network_state, мрежа и слой; Новата версия network_state е интегрирана в мрежата.
Кодът може първо да игнорира частта с GPU, а различните типове мрежови слоеве дефинират правилата за изпълнение на този тип чрез указателите на функцията напред назад и обновяването в слоя. Например, има три метода за свързани слоеве, като forward_connected_layer backward_connected_layer update_connected_layer gru слой и др.;
Атомарните операции са само в blas.c и gemm.c, мрежовите операции са в network.c, а най-важните са train_network_datum, train_networks, train_network_batch и network_predict;
train_network_datum е float_pair, използван за входни данни, тоест двойки float *x и float *y;
train_networks се обучава в network_kernel.cu в режим на паралелна нишка, а параметърът е данни;
Една от тях е, че даркнетът е еднонишков в CPU режим, а в мулти-GPU графичен режим train_networks поддържа работа с няколко карти, което е и входът към трансформацията на мултихост даркнет операцията на разпределението, където можете да видите как тренираните данни за тегло се сливат и мащабират.
train_network_datum Изпълни forward_network { слоево-напредна мрежа } backward_network { обратна мрежа по слоеве } и изпълни update_network ( ,,, скорост, импулс, затихване под броя пъти (*net.seen %подразделения) е удовлетворен;
За обработка на потребителски дефиниран мрежов профил в parse_network_cfg, резултатите от обучението се четат през load_weights
Това е гръбнакът.
Ако трябва да работите с източници на данни със специални нужди, трябва да се обърнете към data.c, за да започнете.
За CFG профила, корекцията на фокуса (разбира се, всички параметри са важни, може да се наложи да се коригират) и глобалният параметър на фокуса по време на тренировката: импулс на затихване learning_rate Тези три са свързани със скоростта на сходване. Policy е политиката за тегла, входните пакетни (и свързани подразделения) OUPUT-ове са свързани с размера на пропускателната способност на данните, а най-новата версия изглежда има корекции тук в OUPUT-ите.
|