Darknet 是目前为止我见到的最简洁优美的深度学习框架,它是纯C语言写成的,并且不需要任何第三方库(略去OpenCV、CUDA)
希望学习深度学习框架的筒子不妨好好体味一番。
建议的源码阅读顺序##
layer
首先暗中观察layer层,这里面可以知道 layer 层的抽象结构是怎样的。第一次大致看看就可以,看不懂很正常,毕竟起名规范不好,要后面看具体代码来理解。
这其中一个关键点在于你要知道数据在1d数组中是怎样存储的,也即原来的4d(BWHC)数据index到1d array的映射关系,这样方便以后各种嵌套循环快速理解它到底在干嘛。
很好奇作者为啥不用 N 维数组来写。
各种辅助数据结构
可看可不看,知道是干啥的就行,毕竟写的肯定没有STL好。
- box
目标定位专用框框 - list
普通链表 - option_list
类似linked_hash_map - tree
用于word tree - matrix
矩阵操作
各种辅助操作
也是知道干啥的就行,重要理解函数 in out 是啥,不要纠结于拿元素细节,详见layer层描述。
- im2col & col2im
Caffe 卷积计算核心部分,将卷积操作转化为矩阵相乘的形式。 - utils
一些通用操作 - gemm
矩阵相乘操作 - image
作者自己写的一些数字图像处理方法 - blas
一些线性代数运算 - parser
从 cfg 文件解析网络结构
network
这个是 darknet 核心,包括了怎样前馈怎样BP的重点内容。里面有一些 trick 是要在看具体的 layer 之前要了解的,不然可能到时候看不太懂。
各种具体 layer
activations.h\ # all kinds of none-linearity functions (forward activation & backward gradients compute)
activations.c\
activation_layer.h\ # layer (all neurons) forward and backward
activation_layer.c\
avgpool_layer.h\ # forward & backward avg_pool
avgpool_layer.c\
connected_layer.h\ # forward & backward fully-connected layer
connected_layer.c\
convolutional_layer.h\ # forward & backward & other ops convolutinoal layer
convolutional_layer.c\
dropout_layer.h\ # forward & backward dropout layer
dropout_layer.c\
maxpool_layer.h\ # forward & backward avg_pool
maxpool_layer.c\
softmax_layer.h\ # forward & backward softmax layer
softmax_layer.c\
deconvolutional_layer.h\# forward & backward deconvolutional_layer
deconvolutional_layer.c\
batchnorm_layer.h\ # forward & backward batchnorm_layer
batchnorm_layer.c\
normalization_layer.h\ # forward & backward normalization_layer
normalization_layer.c\
cost_layer.h\ # forward & backward cost_layer
cost_layer.c\
crop_layer.h\ # forward crop_layer
crop_layer.c\
local_layer.h\ # forward & backward local_layer
local_layer.c\
reorg_layer.h\ # forward & backward reorg_layer
reorg_layer.c\
shortcut_layer.h\ # forward & backward shortcut_layer
shortcut_layer.c\
detection_layer.h\ # forward & backward detection_layer
detection_layer.c\
region_layer.h\ # forward & backward region_layer
region_layer.c\
route_layer.h\ # forward & backward route_layer
route_layer.c\
各种具体应用
如 yolo darkgo 图像风格转换还有莎翁风格作诗等等等,作者提供了很多应用,此处略去1w字
后记
本文略去了其中的 RNN LSTM内容,同时也忽略了 CUDA GPU计算的方面,后续有时间再补充完整。