Darknet 是目前為止我見到的最簡潔優(yōu)美的深度學習框架,它是純C語言寫成的,并且不需要任何第三方庫(略去OpenCV、CUDA)
希望學習深度學習框架的筒子不妨好好體味一番。
建議的源碼閱讀順序##
layer
首先暗中觀察layer層,這里面可以知道 layer 層的抽象結(jié)構(gòu)是怎樣的。第一次大致看看就可以,看不懂很正常,畢竟起名規(guī)范不好,要后面看具體代碼來理解。
這其中一個關鍵點在于你要知道數(shù)據(jù)在1d數(shù)組中是怎樣存儲的,也即原來的4d(BWHC)數(shù)據(jù)index到1d array的映射關系,這樣方便以后各種嵌套循環(huán)快速理解它到底在干嘛。
很好奇作者為啥不用 N 維數(shù)組來寫。

Paste_Image.png
各種輔助數(shù)據(jù)結(jié)構(gòu)
可看可不看,知道是干啥的就行,畢竟寫的肯定沒有STL好。
- box
目標定位專用框框 - list
普通鏈表 - option_list
類似linked_hash_map - tree
用于word tree - matrix
矩陣操作
各種輔助操作
也是知道干啥的就行,重要理解函數(shù) in out 是啥,不要糾結(jié)于拿元素細節(jié),詳見layer層描述。
- im2col & col2im
Caffe 卷積計算核心部分,將卷積操作轉(zhuǎn)化為矩陣相乘的形式。 - utils
一些通用操作 - gemm
矩陣相乘操作 - image
作者自己寫的一些數(shù)字圖像處理方法 - blas
一些線性代數(shù)運算 - parser
從 cfg 文件解析網(wǎng)絡結(jié)構(gòu)
network
這個是 darknet 核心,包括了怎樣前饋怎樣BP的重點內(nèi)容。里面有一些 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 圖像風格轉(zhuǎn)換還有莎翁風格作詩等等等,作者提供了很多應用,此處略去1w字
后記
本文略去了其中的 RNN LSTM內(nèi)容,同時也忽略了 CUDA GPU計算的方面,后續(xù)有時間再補充完整。