LOAD
TEST
TRAIN
着重于Darknet框架的CNN部分,参考了杰同学的注释, 感谢!
LOAD
parse.c/parse_net_options函数
1 | void parse_net_options(list *options, network *net) |
载入参数:
1 | //net=yolov3.cfg文件 |
可见,load weight时候只加载卷积层的参数。
TEST
detector.c/test_detector函数
1 | list *options = read_data_cfg(datacfg); |
network.c
1 | //network_predict(net, X); |
network.c/load_network函数
1 | network *load_network(char *cfg, char *weights, int clear) |
parser.c/parse_network_cfg函数
主要类型: //yolo的配置文件中,只有convolutional,yolo,upsample,route这几种类型
1 | while(n){ |
分别看这四种层:
parse.c/convolutional_layer parse_convolutional函数
1 | //[convolutional] |
convolutional_layer.c
/make_convolutional_layer(int batch, int h, int w, int c, int n, int groups, int size, int stride, int padding, ACTIVATION activation, int batch_normalize, int binary, int xnor, int adam)函数
1 | /* |
先说前向传播函数:void forward_convolutional_layer(convolutional_layer l, network net)
1 | void forward_convolutional_layer(convolutional_layer l, network net) |
gemm函数:
1 | /* |
gemm_nn函数:
1 | // gemm(0,0,m,n,k,1,a,k,b,n,1,c,n); |
im2col函数:
1 | //输入: im2col_cpu(data_im:net.input + (i*l.groups + j)*l.c/l.groups*l.h*l.w, |
TRAIN
detector.c/train_detector函数
1 | float loss = 0; |
network.c/train_network函数
1 | float train_network_datum(network *net) |
backward_network函数
1 | void backward_network(network *netp) |
convolutional_layer.c/backward_convolutional_layer函数
1 | void backward_convolutional_layer(convolutional_layer l, network net) |
float error = *net->cost;在哪里计算这个cost的呢,就是在前传的时候,
1 |
|
yolo层
parse.c/parse_yolo
1 | layer parse_yolo(list *options, size_params params) |