Para reentrenamiento de sistemas de extremo a extremo para expresiones faciales
Apéndice 1:
Análisis del código fuente del Darknet Deep Learning Framework: Comentario chino detallado, que cubre principios del marco y análisis sintáctico de implementación
https://github.com/hgpvision/darknet
darknet es un framework de deep learning de código abierto relativamente ligero basado íntegramente en C y CUDA, sus características principales son fáciles de instalar, sin dependencias (se puede usar OpenCV), muy portátil y soporta métodos de computación tanto por CPU como por GPU.
Comparado con TensorFlow, la darknet no es tan potente, pero esta también es una ventaja de la darknet:
- darknet está completamente implementado en lenguaje C, sin dependencias, por supuesto puedes usar OpenCV, pero solo para mostrar imágenes, para una mejor visualización;
- darknet soporta CPU (así que no importa si no tienes GPU) y GPU (CUDA/cuDNN, por supuesto es mejor usar GPU);
- Es precisamente porque es relativamente ligero y no tiene una API potente como TensorFlow, así que creo que tiene otra flexibilidad, adecuada para estudiar el subyacente y que puede mejorarse y ampliarse desde abajo de forma más cómoda.
- Existen similitudes entre la implementación de la darknet y la de la cafeteria, y conozco la darknet y creo que es útil empezar con la cafeína.
Apéndice 2:
Autor: Zhihu User Enlace:https://www.zhihu.com/question/51747665/answer/145607615 Fuente: Zhihu Los derechos de autor pertenecen al autor. Para reimpresiones comerciales, por favor contacte con el autor para obtener autorización, y para reimpresiones no comerciales, indique la fuente.
Las tres definiciones de estructuras más importantes en Darknet son network_state, red y capa; La nueva versión network_state ha sido integrada en la red.
El código puede ignorar primero la parte de la GPU, y diferentes tipos de capas de red definen las reglas de ejecución de este tipo a través de los punteros de función hacia atrás y actualización en la capa. Por ejemplo, existen tres métodos para capas conectadas, como forward_connected_layer backward_connected_layer update_connected_layer capa gru, etc.;
Las operaciones atómicas solo están en blas.c y gemm.c, las operaciones de red en network.c, y las más importantes son train_network_datum, train_networks, train_network_batch y network_predict;
train_network_datum es el float_pair utilizado para los datos de entrada, es decir, float *x y float *y pares;
train_networks se entrena en network_kernel.cu en modo de hilos concurrentes, y el parámetro es datos;
Por un lado, la darknet es monohilo en modo CPU, y en modo gráfico multi-GPU train_networks soporta la ejecución multi-tarjeta, y esto también es la puerta de entrada para transformar la operación de distribución multi-host darknet, donde puedes ver la fusión y escalada de datos de peso entrenados.
train_network_datum Ejecutar forward_network { red directa por capas } backward_network { red inversa por capa }, y ejecutar una update_network ( tasa, momento, decaimiento ,,, bajo el número de veces (*net.seen %subdivisiones) se cumple;
Para el procesamiento de perfiles de red definidos por el usuario en parse_network_cfg, los resultados del entrenamiento se leen a través de load_weights
Esa es la columna vertebral.
Si necesitas tratar con fuentes de datos con necesidades especiales, debes consultar data.c para empezar.
Para el perfil CFG, el ajuste de enfoque (por supuesto, todos los parámetros son importantes, puede que deba ajustarse) y el parámetro global del foco durante el entrenamiento: momento de decaimiento learning_rate Estos tres están relacionados con la velocidad de convergencia. La política es la política de pesos, las salidas por lotes de entradas (y subdivisiones relacionadas) están relacionadas con la dimensión de rendimiento de datos, y la última versión parece tener correcciones aquí en salidas.
|