Darknet框架简介

用于人脸表情端到端系统的重训练

 

 

 

 

附录1:

darknet深度学习框架源码分析:详细中文注释,涵盖框架原理与实现语法分析

https://github.com/hgpvision/darknet

darknet是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式

 

相比于TensorFlow来说,darknet并没有那么强大,但这也成了darknet的优势:

  1. darknet完全由C语言实现,没有任何依赖项,当然可以使用OpenCV,但只是用其来显示图片、为了更好的可视化;

  2. darknet支持CPU(所以没有GPU也不用紧的)与GPU(CUDA/cuDNN,使用GPU当然更块更好了);

  3. 正是因为其较为轻型,没有像TensorFlow那般强大的API,所以给我的感觉就是有另一种味道的灵活性,适合用来研究底层,可以更为方便的从底层对其进行改进与扩展;

  4. darknet的实现与caffe的实现存在相似的地方,熟悉了darknet,相信对上手caffe有帮助;

 

 

附录2:

作者:知乎用户
链接:https://www.zhihu.com/question/51747665/answer/145607615
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

darknet 中最重要的三个struct定义是 network_state, network, layer; 新版本network_state 已经并入到 network 里去了。

代码可以先忽略 gpu 部分,不同种类的网络层都是通过 layer 里面的函数指针 forward backward 和 update 定义本种类的执行规则。如 connected layer 就有 forward_connected_layer backward_connected_layer update_connected_layer 三个方法,gru layer 等也是一样;

原子运算只在 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 里,以并发线程方式进行训练,参数是 data ;

有一点, darknet 在CPU模式下是单线程的,在多块GPU显卡模式下,train_networks支持多卡运行,而且这里也是改造成分布式多主机darknet运行的入口,可以看到训练出的权重数据合并和scale。

train_network_datum 顺序执行 forward_network { 逐层正向网络 } backward_network { 逐层逆向网络 },满足次数下(*net.seen %subdivisions)执行一次 update_network( ,,, rate, momentum, decay);

对于用户定义的网络参数文件处理在 parse_network_cfg, 读入训练结果通过 load_weights

主干就是这些了。

如果需要处理特别需求的数据源,需要参考 data.c 入手。

对 cfg 配置文件,重点调整(当然是全部参数都很重要,可能都要调整),训练时调整重点的全局参数: decay momentum learning_rate 这三个是与收敛速度有关的。policy 是weights 策略的, inputs batch(及相关的subdivisions) ouputs 是与数据吞吐维度相关的,最新版本好像ouputs这里有改正。

你可能感兴趣的:(Darknet)