前言

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好。

  1. box
    目標定位專用框框
  2. list
    普通鏈表
  3. option_list
    類似linked_hash_map
  4. tree
    用于word tree
  5. matrix
    矩陣操作

各種輔助操作
也是知道干啥的就行,重要理解函數(shù) in out 是啥,不要糾結(jié)于拿元素細節(jié),詳見layer層描述。

  1. im2col & col2im
    Caffe 卷積計算核心部分,將卷積操作轉(zhuǎn)化為矩陣相乘的形式。
  2. utils
    一些通用操作
  3. gemm
    矩陣相乘操作
  4. image
    作者自己寫的一些數(shù)字圖像處理方法
  5. blas
    一些線性代數(shù)運算
  6. 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ù)有時間再補充完整。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容