Para reeducação de sistemas de ponta a ponta para expressões faciais
Apêndice 1:
Análise do Código-Fonte do Framework de Deep Learning Darknet: Comentário detalhado em chinês, cobrindo princípios do framework e análise de sintaxe de implementação
https://github.com/hgpvision/darknet
Darknet é um framework de aprendizado profundo de código aberto relativamente leve baseado inteiramente em C e CUDA, suas principais funcionalidades são fáceis de instalar, sem dependências (OpenCV pode ser usado), muito portátil e suporta métodos de computação tanto para CPU quanto para GPU.
Comparado ao TensorFlow, a darknet não é tão poderosa, mas essa também é uma vantagem da darknet:
- A darknet é totalmente implementada em linguagem C, sem dependências, claro que você pode usar OpenCV, mas só para exibir imagens, para melhor visualização;
- darknet suporta CPU (então não importa se você não tem GPU) e GPU (CUDA/cuDNN, claro que é melhor usar GPU);
- Isso é justamente porque é relativamente leve e não possui uma API poderosa como o TensorFlow, então sinto que ele tem outro tipo de flexibilidade, adequado para estudar o subjacente e pode ser melhorado e estendido de baixo de forma mais conveniente.
- Existem semelhanças entre a implementação da darknet e a implementação da caffe, e eu conheço a darknet e acredito que é útil começar com a cafe.
Apêndice 2:
Autor: Zhihu User Link:https://www.zhihu.com/question/51747665/answer/145607615 Fonte: Zhihu Os direitos autorais pertencem ao autor. Para reimpressões comerciais, por favor, entre em contato com o autor para autorização, e para reimpressões não comerciais, indique a fonte.
As três definições de struct mais importantes na Darknet são network_state, rede e camada; A nova versão network_state foi integrada à rede.
O código pode ignorar primeiro a parte da GPU, e diferentes tipos de camadas de rede definem as regras de execução desse tipo por meio dos ponteiros de função para trás e atualização na camada. Por exemplo, existem três métodos para camadas conectadas, como forward_connected_layer backward_connected_layer update_connected_layer camada gru, etc.;
As operações atômicas são apenas em blas.c e gemm.c, as operações de rede estão em network.c, e as mais importantes são train_network_datum, train_networks, train_network_batch e network_predict;
train_network_datum é o float_pair usado para dados de entrada, ou seja, float *x e float *y pares;
train_networks é treinado em network_kernel.em modo de threading concorrente, e o parâmetro é dados;
Um ponto: a darknet é single-threaded no modo CPU, e no modo gráfico multi-GPU, train_networks suporta execução multi-placa, e essa também é a entrada para transformar a operação multi-host da darknet, onde você pode ver a fusão e escala dos dados de peso treinados.
train_network_datum Executar forward_network { rede antecedível camada } backward_network { rede reversa camada }, e executar uma update_network ( taxa ,,,, momento e decaimento sob o número de vezes (*net.seen %subdivisões) é satisfeita;
Para o processamento de perfis de rede definidos pelo usuário em parse_network_cfg, os resultados do treinamento são lidos por load_weights
Essa é a espinha dorsal.
Se você precisa lidar com fontes de dados com necessidades especiais, precisa consultar o data.c para começar.
Para o perfil CFG, o ajuste de foco (claro, todos os parâmetros são importantes, pode ser necessário ajustar) e o parâmetro global do foco durante o treinamento: momento de decaimento learning_rate Esses três estão relacionados à velocidade de convergência. Política é a política de pesos, as saídas em lote de entradas (e subdivisões relacionadas) estão relacionadas à dimensão de throughput de dados, e a versão mais recente parece ter correções aqui nas saídas.
|