darknet  v3
parser.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <assert.h>
5 
6 #include "activation_layer.h"
7 #include "logistic_layer.h"
8 #include "l2norm_layer.h"
9 #include "activations.h"
10 #include "avgpool_layer.h"
11 #include "batchnorm_layer.h"
12 #include "blas.h"
13 #include "connected_layer.h"
14 #include "deconvolutional_layer.h"
15 #include "convolutional_layer.h"
16 #include "cost_layer.h"
17 #include "crnn_layer.h"
18 #include "crop_layer.h"
19 #include "detection_layer.h"
20 #include "dropout_layer.h"
21 #include "gru_layer.h"
22 #include "list.h"
23 #include "local_layer.h"
24 #include "maxpool_layer.h"
25 #include "normalization_layer.h"
26 #include "option_list.h"
27 #include "parser.h"
28 #include "region_layer.h"
29 #include "yolo_layer.h"
30 #include "iseg_layer.h"
31 #include "reorg_layer.h"
32 #include "rnn_layer.h"
33 #include "route_layer.h"
34 #include "upsample_layer.h"
35 #include "shortcut_layer.h"
36 #include "softmax_layer.h"
37 #include "lstm_layer.h"
38 #include "utils.h"
39 
40 typedef struct{
41  char *type;
43 }section;
44 
45 list *read_cfg(char *filename);
46 
48 {
49 
50  if (strcmp(type, "[shortcut]")==0) return SHORTCUT;
51  if (strcmp(type, "[crop]")==0) return CROP;
52  if (strcmp(type, "[cost]")==0) return COST;
53  if (strcmp(type, "[detection]")==0) return DETECTION;
54  if (strcmp(type, "[region]")==0) return REGION;
55  if (strcmp(type, "[yolo]")==0) return YOLO;
56  if (strcmp(type, "[iseg]")==0) return ISEG;
57  if (strcmp(type, "[local]")==0) return LOCAL;
58  if (strcmp(type, "[conv]")==0
59  || strcmp(type, "[convolutional]")==0) return CONVOLUTIONAL;
60  if (strcmp(type, "[deconv]")==0
61  || strcmp(type, "[deconvolutional]")==0) return DECONVOLUTIONAL;
62  if (strcmp(type, "[activation]")==0) return ACTIVE;
63  if (strcmp(type, "[logistic]")==0) return LOGXENT;
64  if (strcmp(type, "[l2norm]")==0) return L2NORM;
65  if (strcmp(type, "[net]")==0
66  || strcmp(type, "[network]")==0) return NETWORK;
67  if (strcmp(type, "[crnn]")==0) return CRNN;
68  if (strcmp(type, "[gru]")==0) return GRU;
69  if (strcmp(type, "[lstm]") == 0) return LSTM;
70  if (strcmp(type, "[rnn]")==0) return RNN;
71  if (strcmp(type, "[conn]")==0
72  || strcmp(type, "[connected]")==0) return CONNECTED;
73  if (strcmp(type, "[max]")==0
74  || strcmp(type, "[maxpool]")==0) return MAXPOOL;
75  if (strcmp(type, "[reorg]")==0) return REORG;
76  if (strcmp(type, "[avg]")==0
77  || strcmp(type, "[avgpool]")==0) return AVGPOOL;
78  if (strcmp(type, "[dropout]")==0) return DROPOUT;
79  if (strcmp(type, "[lrn]")==0
80  || strcmp(type, "[normalization]")==0) return NORMALIZATION;
81  if (strcmp(type, "[batchnorm]")==0) return BATCHNORM;
82  if (strcmp(type, "[soft]")==0
83  || strcmp(type, "[softmax]")==0) return SOFTMAX;
84  if (strcmp(type, "[route]")==0) return ROUTE;
85  if (strcmp(type, "[upsample]")==0) return UPSAMPLE;
86  return BLANK;
87 }
88 
90 {
91  free(s->type);
92  node *n = s->options->front;
93  while(n){
94  kvp *pair = (kvp *)n->val;
95  free(pair->key);
96  free(pair);
97  node *next = n->next;
98  free(n);
99  n = next;
100  }
101  free(s->options);
102  free(s);
103 }
104 
105 void parse_data(char *data, float *a, int n)
106 {
107  int i;
108  if(!data) return;
109  char *curr = data;
110  char *next = data;
111  int done = 0;
112  for(i = 0; i < n && !done; ++i){
113  while(*++next !='\0' && *next != ',');
114  if(*next == '\0') done = 1;
115  *next = '\0';
116  sscanf(curr, "%g", &a[i]);
117  curr = next+1;
118  }
119 }
120 
121 typedef struct size_params{
122  int batch;
123  int inputs;
124  int h;
125  int w;
126  int c;
127  int index;
130 } size_params;
131 
133 {
134  int n = option_find_int(options, "filters",1);
135  int size = option_find_int(options, "size",1);
136  int stride = option_find_int(options, "stride",1);
137  int pad = option_find_int(options, "pad",0);
138  char *activation_s = option_find_str(options, "activation", "logistic");
139  ACTIVATION activation = get_activation(activation_s);
140 
141  int batch,h,w,c;
142  h = params.h;
143  w = params.w;
144  c = params.c;
145  batch=params.batch;
146  if(!(h && w && c)) error("Layer before local layer must output image.");
147 
148  local_layer layer = make_local_layer(batch,h,w,c,n,size,stride,pad,activation);
149 
150  return layer;
151 }
152 
154 {
155  int n = option_find_int(options, "filters",1);
156  int size = option_find_int(options, "size",1);
157  int stride = option_find_int(options, "stride",1);
158 
159  char *activation_s = option_find_str(options, "activation", "logistic");
160  ACTIVATION activation = get_activation(activation_s);
161 
162  int batch,h,w,c;
163  h = params.h;
164  w = params.w;
165  c = params.c;
166  batch=params.batch;
167  if(!(h && w && c)) error("Layer before deconvolutional layer must output image.");
168  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
169  int pad = option_find_int_quiet(options, "pad",0);
170  int padding = option_find_int_quiet(options, "padding",0);
171  if(pad) padding = size/2;
172 
173  layer l = make_deconvolutional_layer(batch,h,w,c,n,size,stride,padding, activation, batch_normalize, params.net->adam);
174 
175  return l;
176 }
177 
178 
180 {
181  int n = option_find_int(options, "filters",1);
182  int size = option_find_int(options, "size",1);
183  int stride = option_find_int(options, "stride",1);
184  int pad = option_find_int_quiet(options, "pad",0);
185  int padding = option_find_int_quiet(options, "padding",0);
186  int groups = option_find_int_quiet(options, "groups", 1);
187  if(pad) padding = size/2;
188 
189  char *activation_s = option_find_str(options, "activation", "logistic");
190  ACTIVATION activation = get_activation(activation_s);
191 
192  int batch,h,w,c;
193  h = params.h;
194  w = params.w;
195  c = params.c;
196  batch=params.batch;
197  if(!(h && w && c)) error("Layer before convolutional layer must output image.");
198  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
199  int binary = option_find_int_quiet(options, "binary", 0);
200  int xnor = option_find_int_quiet(options, "xnor", 0);
201 
202  convolutional_layer layer = make_convolutional_layer(batch,h,w,c,n,groups,size,stride,padding,activation, batch_normalize, binary, xnor, params.net->adam);
203  layer.flipped = option_find_int_quiet(options, "flipped", 0);
204  layer.dot = option_find_float_quiet(options, "dot", 0);
205 
206  return layer;
207 }
208 
209 layer parse_crnn(list *options, size_params params)
210 {
211  int output_filters = option_find_int(options, "output_filters",1);
212  int hidden_filters = option_find_int(options, "hidden_filters",1);
213  char *activation_s = option_find_str(options, "activation", "logistic");
214  ACTIVATION activation = get_activation(activation_s);
215  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
216 
217  layer l = make_crnn_layer(params.batch, params.w, params.h, params.c, hidden_filters, output_filters, params.time_steps, activation, batch_normalize);
218 
219  l.shortcut = option_find_int_quiet(options, "shortcut", 0);
220 
221  return l;
222 }
223 
224 layer parse_rnn(list *options, size_params params)
225 {
226  int output = option_find_int(options, "output",1);
227  char *activation_s = option_find_str(options, "activation", "logistic");
228  ACTIVATION activation = get_activation(activation_s);
229  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
230 
231  layer l = make_rnn_layer(params.batch, params.inputs, output, params.time_steps, activation, batch_normalize, params.net->adam);
232 
233  l.shortcut = option_find_int_quiet(options, "shortcut", 0);
234 
235  return l;
236 }
237 
238 layer parse_gru(list *options, size_params params)
239 {
240  int output = option_find_int(options, "output",1);
241  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
242 
243  layer l = make_gru_layer(params.batch, params.inputs, output, params.time_steps, batch_normalize, params.net->adam);
244  l.tanh = option_find_int_quiet(options, "tanh", 0);
245 
246  return l;
247 }
248 
249 layer parse_lstm(list *options, size_params params)
250 {
251  int output = option_find_int(options, "output", 1);
252  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
253 
254  layer l = make_lstm_layer(params.batch, params.inputs, output, params.time_steps, batch_normalize, params.net->adam);
255 
256  return l;
257 }
258 
260 {
261  int output = option_find_int(options, "output",1);
262  char *activation_s = option_find_str(options, "activation", "logistic");
263  ACTIVATION activation = get_activation(activation_s);
264  int batch_normalize = option_find_int_quiet(options, "batch_normalize", 0);
265 
266  layer l = make_connected_layer(params.batch, params.inputs, output, activation, batch_normalize, params.net->adam);
267  return l;
268 }
269 
271 {
272  int groups = option_find_int_quiet(options, "groups",1);
273  layer l = make_softmax_layer(params.batch, params.inputs, groups);
274  l.temperature = option_find_float_quiet(options, "temperature", 1);
275  char *tree_file = option_find_str(options, "tree", 0);
276  if (tree_file) l.softmax_tree = read_tree(tree_file);
277  l.w = params.w;
278  l.h = params.h;
279  l.c = params.c;
280  l.spatial = option_find_float_quiet(options, "spatial", 0);
281  l.noloss = option_find_int_quiet(options, "noloss", 0);
282  return l;
283 }
284 
285 int *parse_yolo_mask(char *a, int *num)
286 {
287  int *mask = 0;
288  if(a){
289  int len = strlen(a);
290  int n = 1;
291  int i;
292  for(i = 0; i < len; ++i){
293  if (a[i] == ',') ++n;
294  }
295  mask = calloc(n, sizeof(int));
296  for(i = 0; i < n; ++i){
297  int val = atoi(a);
298  mask[i] = val;
299  a = strchr(a, ',')+1;
300  }
301  *num = n;
302  }
303  return mask;
304 }
305 
306 layer parse_yolo(list *options, size_params params)
307 {
308  int classes = option_find_int(options, "classes", 20);
309  int total = option_find_int(options, "num", 1);
310  int num = total;
311 
312  char *a = option_find_str(options, "mask", 0);
313  int *mask = parse_yolo_mask(a, &num);
314  layer l = make_yolo_layer(params.batch, params.w, params.h, num, total, mask, classes);
315  assert(l.outputs == params.inputs);
316 
317  l.max_boxes = option_find_int_quiet(options, "max",90);
318  l.jitter = option_find_float(options, "jitter", .2);
319 
320  l.ignore_thresh = option_find_float(options, "ignore_thresh", .5);
321  l.truth_thresh = option_find_float(options, "truth_thresh", 1);
322  l.random = option_find_int_quiet(options, "random", 0);
323 
324  char *map_file = option_find_str(options, "map", 0);
325  if (map_file) l.map = read_map(map_file);
326 
327  a = option_find_str(options, "anchors", 0);
328  if(a){
329  int len = strlen(a);
330  int n = 1;
331  int i;
332  for(i = 0; i < len; ++i){
333  if (a[i] == ',') ++n;
334  }
335  for(i = 0; i < n; ++i){
336  float bias = atof(a);
337  l.biases[i] = bias;
338  a = strchr(a, ',')+1;
339  }
340  }
341  return l;
342 }
343 
344 layer parse_iseg(list *options, size_params params)
345 {
346  int classes = option_find_int(options, "classes", 20);
347  int ids = option_find_int(options, "ids", 32);
348  layer l = make_iseg_layer(params.batch, params.w, params.h, classes, ids);
349  assert(l.outputs == params.inputs);
350  return l;
351 }
352 
354 {
355  int coords = option_find_int(options, "coords", 4);
356  int classes = option_find_int(options, "classes", 20);
357  int num = option_find_int(options, "num", 1);
358 
359  layer l = make_region_layer(params.batch, params.w, params.h, num, classes, coords);
360  assert(l.outputs == params.inputs);
361 
362  l.log = option_find_int_quiet(options, "log", 0);
363  l.sqrt = option_find_int_quiet(options, "sqrt", 0);
364 
365  l.softmax = option_find_int(options, "softmax", 0);
366  l.background = option_find_int_quiet(options, "background", 0);
367  l.max_boxes = option_find_int_quiet(options, "max",30);
368  l.jitter = option_find_float(options, "jitter", .2);
369  l.rescore = option_find_int_quiet(options, "rescore",0);
370 
371  l.thresh = option_find_float(options, "thresh", .5);
372  l.classfix = option_find_int_quiet(options, "classfix", 0);
373  l.absolute = option_find_int_quiet(options, "absolute", 0);
374  l.random = option_find_int_quiet(options, "random", 0);
375 
376  l.coord_scale = option_find_float(options, "coord_scale", 1);
377  l.object_scale = option_find_float(options, "object_scale", 1);
378  l.noobject_scale = option_find_float(options, "noobject_scale", 1);
379  l.mask_scale = option_find_float(options, "mask_scale", 1);
380  l.class_scale = option_find_float(options, "class_scale", 1);
381  l.bias_match = option_find_int_quiet(options, "bias_match",0);
382 
383  char *tree_file = option_find_str(options, "tree", 0);
384  if (tree_file) l.softmax_tree = read_tree(tree_file);
385  char *map_file = option_find_str(options, "map", 0);
386  if (map_file) l.map = read_map(map_file);
387 
388  char *a = option_find_str(options, "anchors", 0);
389  if(a){
390  int len = strlen(a);
391  int n = 1;
392  int i;
393  for(i = 0; i < len; ++i){
394  if (a[i] == ',') ++n;
395  }
396  for(i = 0; i < n; ++i){
397  float bias = atof(a);
398  l.biases[i] = bias;
399  a = strchr(a, ',')+1;
400  }
401  }
402  return l;
403 }
404 
406 {
407  int coords = option_find_int(options, "coords", 1);
408  int classes = option_find_int(options, "classes", 1);
409  int rescore = option_find_int(options, "rescore", 0);
410  int num = option_find_int(options, "num", 1);
411  int side = option_find_int(options, "side", 7);
412  detection_layer layer = make_detection_layer(params.batch, params.inputs, num, side, classes, coords, rescore);
413 
414  layer.softmax = option_find_int(options, "softmax", 0);
415  layer.sqrt = option_find_int(options, "sqrt", 0);
416 
417  layer.max_boxes = option_find_int_quiet(options, "max",90);
418  layer.coord_scale = option_find_float(options, "coord_scale", 1);
419  layer.forced = option_find_int(options, "forced", 0);
420  layer.object_scale = option_find_float(options, "object_scale", 1);
421  layer.noobject_scale = option_find_float(options, "noobject_scale", 1);
422  layer.class_scale = option_find_float(options, "class_scale", 1);
423  layer.jitter = option_find_float(options, "jitter", .2);
424  layer.random = option_find_int_quiet(options, "random", 0);
425  layer.reorg = option_find_int_quiet(options, "reorg", 0);
426  return layer;
427 }
428 
430 {
431  char *type_s = option_find_str(options, "type", "sse");
432  COST_TYPE type = get_cost_type(type_s);
433  float scale = option_find_float_quiet(options, "scale",1);
434  cost_layer layer = make_cost_layer(params.batch, params.inputs, type, scale);
435  layer.ratio = option_find_float_quiet(options, "ratio",0);
436  layer.noobject_scale = option_find_float_quiet(options, "noobj", 1);
437  layer.thresh = option_find_float_quiet(options, "thresh",0);
438  return layer;
439 }
440 
442 {
443  int crop_height = option_find_int(options, "crop_height",1);
444  int crop_width = option_find_int(options, "crop_width",1);
445  int flip = option_find_int(options, "flip",0);
446  float angle = option_find_float(options, "angle",0);
447  float saturation = option_find_float(options, "saturation",1);
448  float exposure = option_find_float(options, "exposure",1);
449 
450  int batch,h,w,c;
451  h = params.h;
452  w = params.w;
453  c = params.c;
454  batch=params.batch;
455  if(!(h && w && c)) error("Layer before crop layer must output image.");
456 
457  int noadjust = option_find_int_quiet(options, "noadjust",0);
458 
459  crop_layer l = make_crop_layer(batch,h,w,c,crop_height,crop_width,flip, angle, saturation, exposure);
460  l.shift = option_find_float(options, "shift", 0);
461  l.noadjust = noadjust;
462  return l;
463 }
464 
466 {
467  int stride = option_find_int(options, "stride",1);
468  int reverse = option_find_int_quiet(options, "reverse",0);
469  int flatten = option_find_int_quiet(options, "flatten",0);
470  int extra = option_find_int_quiet(options, "extra",0);
471 
472  int batch,h,w,c;
473  h = params.h;
474  w = params.w;
475  c = params.c;
476  batch=params.batch;
477  if(!(h && w && c)) error("Layer before reorg layer must output image.");
478 
479  layer layer = make_reorg_layer(batch,w,h,c,stride,reverse, flatten, extra);
480  return layer;
481 }
482 
484 {
485  int stride = option_find_int(options, "stride",1);
486  int size = option_find_int(options, "size",stride);
487  int padding = option_find_int_quiet(options, "padding", size-1);
488 
489  int batch,h,w,c;
490  h = params.h;
491  w = params.w;
492  c = params.c;
493  batch=params.batch;
494  if(!(h && w && c)) error("Layer before maxpool layer must output image.");
495 
496  maxpool_layer layer = make_maxpool_layer(batch,h,w,c,size,stride,padding);
497  return layer;
498 }
499 
501 {
502  int batch,w,h,c;
503  w = params.w;
504  h = params.h;
505  c = params.c;
506  batch=params.batch;
507  if(!(h && w && c)) error("Layer before avgpool layer must output image.");
508 
509  avgpool_layer layer = make_avgpool_layer(batch,w,h,c);
510  return layer;
511 }
512 
514 {
515  float probability = option_find_float(options, "probability", .5);
516  dropout_layer layer = make_dropout_layer(params.batch, params.inputs, probability);
517  layer.out_w = params.w;
518  layer.out_h = params.h;
519  layer.out_c = params.c;
520  return layer;
521 }
522 
524 {
525  float alpha = option_find_float(options, "alpha", .0001);
526  float beta = option_find_float(options, "beta" , .75);
527  float kappa = option_find_float(options, "kappa", 1);
528  int size = option_find_int(options, "size", 5);
529  layer l = make_normalization_layer(params.batch, params.w, params.h, params.c, size, alpha, beta, kappa);
530  return l;
531 }
532 
534 {
535  layer l = make_batchnorm_layer(params.batch, params.w, params.h, params.c);
536  return l;
537 }
538 
540 {
541  char *l = option_find(options, "from");
542  int index = atoi(l);
543  if(index < 0) index = params.index + index;
544 
545  int batch = params.batch;
546  layer from = net->layers[index];
547 
548  layer s = make_shortcut_layer(batch, index, params.w, params.h, params.c, from.out_w, from.out_h, from.out_c);
549 
550  char *activation_s = option_find_str(options, "activation", "linear");
551  ACTIVATION activation = get_activation(activation_s);
552  s.activation = activation;
553  s.alpha = option_find_float_quiet(options, "alpha", 1);
554  s.beta = option_find_float_quiet(options, "beta", 1);
555  return s;
556 }
557 
558 
560 {
561  layer l = make_l2norm_layer(params.batch, params.inputs);
562  l.h = l.out_h = params.h;
563  l.w = l.out_w = params.w;
564  l.c = l.out_c = params.c;
565  return l;
566 }
567 
568 
570 {
571  layer l = make_logistic_layer(params.batch, params.inputs);
572  l.h = l.out_h = params.h;
573  l.w = l.out_w = params.w;
574  l.c = l.out_c = params.c;
575  return l;
576 }
577 
579 {
580  char *activation_s = option_find_str(options, "activation", "linear");
581  ACTIVATION activation = get_activation(activation_s);
582 
583  layer l = make_activation_layer(params.batch, params.inputs, activation);
584 
585  l.h = l.out_h = params.h;
586  l.w = l.out_w = params.w;
587  l.c = l.out_c = params.c;
588 
589  return l;
590 }
591 
593 {
594 
595  int stride = option_find_int(options, "stride",2);
596  layer l = make_upsample_layer(params.batch, params.w, params.h, params.c, stride);
597  l.scale = option_find_float_quiet(options, "scale", 1);
598  return l;
599 }
600 
602 {
603  char *l = option_find(options, "layers");
604  int len = strlen(l);
605  if(!l) error("Route Layer must specify input layers");
606  int n = 1;
607  int i;
608  for(i = 0; i < len; ++i){
609  if (l[i] == ',') ++n;
610  }
611 
612  int *layers = calloc(n, sizeof(int));
613  int *sizes = calloc(n, sizeof(int));
614  for(i = 0; i < n; ++i){
615  int index = atoi(l);
616  l = strchr(l, ',')+1;
617  if(index < 0) index = params.index + index;
618  layers[i] = index;
619  sizes[i] = net->layers[index].outputs;
620  }
621  int batch = params.batch;
622 
623  route_layer layer = make_route_layer(batch, n, layers, sizes);
624 
625  convolutional_layer first = net->layers[layers[0]];
626  layer.out_w = first.out_w;
627  layer.out_h = first.out_h;
628  layer.out_c = first.out_c;
629  for(i = 1; i < n; ++i){
630  int index = layers[i];
631  convolutional_layer next = net->layers[index];
632  if(next.out_w == first.out_w && next.out_h == first.out_h){
633  layer.out_c += next.out_c;
634  }else{
635  layer.out_h = layer.out_w = layer.out_c = 0;
636  }
637  }
638 
639  return layer;
640 }
641 
643 {
644  if (strcmp(s, "random")==0) return RANDOM;
645  if (strcmp(s, "poly")==0) return POLY;
646  if (strcmp(s, "constant")==0) return CONSTANT;
647  if (strcmp(s, "step")==0) return STEP;
648  if (strcmp(s, "exp")==0) return EXP;
649  if (strcmp(s, "sigmoid")==0) return SIG;
650  if (strcmp(s, "steps")==0) return STEPS;
651  fprintf(stderr, "Couldn't find policy %s, going with constant\n", s);
652  return CONSTANT;
653 }
654 
656 {
657  net->batch = option_find_int(options, "batch",1);
658  net->learning_rate = option_find_float(options, "learning_rate", .001);
659  net->momentum = option_find_float(options, "momentum", .9);
660  net->decay = option_find_float(options, "decay", .0001);
661  int subdivs = option_find_int(options, "subdivisions",1);
662  net->time_steps = option_find_int_quiet(options, "time_steps",1);
663  net->notruth = option_find_int_quiet(options, "notruth",0);
664  net->batch /= subdivs;
665  net->batch *= net->time_steps;
666  net->subdivisions = subdivs;
667  net->random = option_find_int_quiet(options, "random", 0);
668 
669  net->adam = option_find_int_quiet(options, "adam", 0);
670  if(net->adam){
671  net->B1 = option_find_float(options, "B1", .9);
672  net->B2 = option_find_float(options, "B2", .999);
673  net->eps = option_find_float(options, "eps", .0000001);
674  }
675 
676  net->h = option_find_int_quiet(options, "height",0);
677  net->w = option_find_int_quiet(options, "width",0);
678  net->c = option_find_int_quiet(options, "channels",0);
679  net->inputs = option_find_int_quiet(options, "inputs", net->h * net->w * net->c);
680  net->max_crop = option_find_int_quiet(options, "max_crop",net->w*2);
681  net->min_crop = option_find_int_quiet(options, "min_crop",net->w);
682  net->max_ratio = option_find_float_quiet(options, "max_ratio", (float) net->max_crop / net->w);
683  net->min_ratio = option_find_float_quiet(options, "min_ratio", (float) net->min_crop / net->w);
684  net->center = option_find_int_quiet(options, "center",0);
685  net->clip = option_find_float_quiet(options, "clip", 0);
686 
687  net->angle = option_find_float_quiet(options, "angle", 0);
688  net->aspect = option_find_float_quiet(options, "aspect", 1);
689  net->saturation = option_find_float_quiet(options, "saturation", 1);
690  net->exposure = option_find_float_quiet(options, "exposure", 1);
691  net->hue = option_find_float_quiet(options, "hue", 0);
692 
693  if(!net->inputs && !(net->h && net->w && net->c)) error("No input parameters supplied");
694 
695  char *policy_s = option_find_str(options, "policy", "constant");
696  net->policy = get_policy(policy_s);
697  net->burn_in = option_find_int_quiet(options, "burn_in", 0);
698  net->power = option_find_float_quiet(options, "power", 4);
699  if(net->policy == STEP){
700  net->step = option_find_int(options, "step", 1);
701  net->scale = option_find_float(options, "scale", 1);
702  } else if (net->policy == STEPS){
703  char *l = option_find(options, "steps");
704  char *p = option_find(options, "scales");
705  if(!l || !p) error("STEPS policy must have steps and scales in cfg file");
706 
707  int len = strlen(l);
708  int n = 1;
709  int i;
710  for(i = 0; i < len; ++i){
711  if (l[i] == ',') ++n;
712  }
713  int *steps = calloc(n, sizeof(int));
714  float *scales = calloc(n, sizeof(float));
715  for(i = 0; i < n; ++i){
716  int step = atoi(l);
717  float scale = atof(p);
718  l = strchr(l, ',')+1;
719  p = strchr(p, ',')+1;
720  steps[i] = step;
721  scales[i] = scale;
722  }
723  net->scales = scales;
724  net->steps = steps;
725  net->num_steps = n;
726  } else if (net->policy == EXP){
727  net->gamma = option_find_float(options, "gamma", 1);
728  } else if (net->policy == SIG){
729  net->gamma = option_find_float(options, "gamma", 1);
730  net->step = option_find_int(options, "step", 1);
731  } else if (net->policy == POLY || net->policy == RANDOM){
732  }
733  net->max_batches = option_find_int(options, "max_batches", 0);
734 }
735 
737 {
738  return (strcmp(s->type, "[net]")==0
739  || strcmp(s->type, "[network]")==0);
740 }
741 
742 network *parse_network_cfg(char *filename)
743 {
744  list *sections = read_cfg(filename);
745  node *n = sections->front;
746  if(!n) error("Config file has no sections");
747  network *net = make_network(sections->size - 1);
748  net->gpu_index = gpu_index;
749  size_params params;
750 
751  section *s = (section *)n->val;
752  list *options = s->options;
753  if(!is_network(s)) error("First section must be [net] or [network]");
754  parse_net_options(options, net);
755 
756  params.h = net->h;
757  params.w = net->w;
758  params.c = net->c;
759  params.inputs = net->inputs;
760  params.batch = net->batch;
761  params.time_steps = net->time_steps;
762  params.net = net;
763 
764  size_t workspace_size = 0;
765  n = n->next;
766  int count = 0;
767  free_section(s);
768  fprintf(stderr, "layer filters size input output\n");
769  while(n){
770  params.index = count;
771  fprintf(stderr, "%5d ", count);
772  s = (section *)n->val;
773  options = s->options;
774  layer l = {0};
776  if(lt == CONVOLUTIONAL){
777  l = parse_convolutional(options, params);
778  }else if(lt == DECONVOLUTIONAL){
779  l = parse_deconvolutional(options, params);
780  }else if(lt == LOCAL){
781  l = parse_local(options, params);
782  }else if(lt == ACTIVE){
783  l = parse_activation(options, params);
784  }else if(lt == LOGXENT){
785  l = parse_logistic(options, params);
786  }else if(lt == L2NORM){
787  l = parse_l2norm(options, params);
788  }else if(lt == RNN){
789  l = parse_rnn(options, params);
790  }else if(lt == GRU){
791  l = parse_gru(options, params);
792  }else if (lt == LSTM) {
793  l = parse_lstm(options, params);
794  }else if(lt == CRNN){
795  l = parse_crnn(options, params);
796  }else if(lt == CONNECTED){
797  l = parse_connected(options, params);
798  }else if(lt == CROP){
799  l = parse_crop(options, params);
800  }else if(lt == COST){
801  l = parse_cost(options, params);
802  }else if(lt == REGION){
803  l = parse_region(options, params);
804  }else if(lt == YOLO){
805  l = parse_yolo(options, params);
806  }else if(lt == ISEG){
807  l = parse_iseg(options, params);
808  }else if(lt == DETECTION){
809  l = parse_detection(options, params);
810  }else if(lt == SOFTMAX){
811  l = parse_softmax(options, params);
812  net->hierarchy = l.softmax_tree;
813  }else if(lt == NORMALIZATION){
814  l = parse_normalization(options, params);
815  }else if(lt == BATCHNORM){
816  l = parse_batchnorm(options, params);
817  }else if(lt == MAXPOOL){
818  l = parse_maxpool(options, params);
819  }else if(lt == REORG){
820  l = parse_reorg(options, params);
821  }else if(lt == AVGPOOL){
822  l = parse_avgpool(options, params);
823  }else if(lt == ROUTE){
824  l = parse_route(options, params, net);
825  }else if(lt == UPSAMPLE){
826  l = parse_upsample(options, params, net);
827  }else if(lt == SHORTCUT){
828  l = parse_shortcut(options, params, net);
829  }else if(lt == DROPOUT){
830  l = parse_dropout(options, params);
831  l.output = net->layers[count-1].output;
832  l.delta = net->layers[count-1].delta;
833 #ifdef GPU
834  l.output_gpu = net->layers[count-1].output_gpu;
835  l.delta_gpu = net->layers[count-1].delta_gpu;
836 #endif
837  }else{
838  fprintf(stderr, "Type not recognized: %s\n", s->type);
839  }
840  l.clip = net->clip;
841  l.truth = option_find_int_quiet(options, "truth", 0);
842  l.onlyforward = option_find_int_quiet(options, "onlyforward", 0);
843  l.stopbackward = option_find_int_quiet(options, "stopbackward", 0);
844  l.dontsave = option_find_int_quiet(options, "dontsave", 0);
845  l.dontload = option_find_int_quiet(options, "dontload", 0);
846  l.numload = option_find_int_quiet(options, "numload", 0);
847  l.dontloadscales = option_find_int_quiet(options, "dontloadscales", 0);
848  l.learning_rate_scale = option_find_float_quiet(options, "learning_rate", 1);
849  l.smooth = option_find_float_quiet(options, "smooth", 0);
850  option_unused(options);
851  net->layers[count] = l;
852  if (l.workspace_size > workspace_size) workspace_size = l.workspace_size;
853  free_section(s);
854  n = n->next;
855  ++count;
856  if(n){
857  params.h = l.out_h;
858  params.w = l.out_w;
859  params.c = l.out_c;
860  params.inputs = l.outputs;
861  }
862  }
863  free_list(sections);
865  net->outputs = out.outputs;
866  net->truths = out.outputs;
867  if(net->layers[net->n-1].truths) net->truths = net->layers[net->n-1].truths;
868  net->output = out.output;
869  net->input = calloc(net->inputs*net->batch, sizeof(float));
870  net->truth = calloc(net->truths*net->batch, sizeof(float));
871 #ifdef GPU
872  net->output_gpu = out.output_gpu;
873  net->input_gpu = cuda_make_array(net->input, net->inputs*net->batch);
874  net->truth_gpu = cuda_make_array(net->truth, net->truths*net->batch);
875 #endif
876  if(workspace_size){
877  //printf("%ld\n", workspace_size);
878 #ifdef GPU
879  if(gpu_index >= 0){
880  net->workspace = cuda_make_array(0, (workspace_size-1)/sizeof(float)+1);
881  }else {
882  net->workspace = calloc(1, workspace_size);
883  }
884 #else
885  net->workspace = calloc(1, workspace_size);
886 #endif
887  }
888  return net;
889 }
890 
891 list *read_cfg(char *filename)
892 {
893  FILE *file = fopen(filename, "r");
894  if(file == 0) file_error(filename);
895  char *line;
896  int nu = 0;
897  list *options = make_list();
898  section *current = 0;
899  while((line=fgetl(file)) != 0){
900  ++ nu;
901  strip(line);
902  switch(line[0]){
903  case '[':
904  current = malloc(sizeof(section));
905  list_insert(options, current);
906  current->options = make_list();
907  current->type = line;
908  break;
909  case '\0':
910  case '#':
911  case ';':
912  free(line);
913  break;
914  default:
915  if(!read_option(line, current->options)){
916  fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line);
917  free(line);
918  }
919  break;
920  }
921  }
922  fclose(file);
923  return options;
924 }
925 
927 {
928 #ifdef GPU
929  if(gpu_index >= 0){
931  }
932 #endif
934  int size = l.c*l.size*l.size;
935  int i, j, k;
936  fwrite(l.biases, sizeof(float), l.n, fp);
937  if (l.batch_normalize){
938  fwrite(l.scales, sizeof(float), l.n, fp);
939  fwrite(l.rolling_mean, sizeof(float), l.n, fp);
940  fwrite(l.rolling_variance, sizeof(float), l.n, fp);
941  }
942  for(i = 0; i < l.n; ++i){
943  float mean = l.binary_weights[i*size];
944  if(mean < 0) mean = -mean;
945  fwrite(&mean, sizeof(float), 1, fp);
946  for(j = 0; j < size/8; ++j){
947  int index = i*size + j*8;
948  unsigned char c = 0;
949  for(k = 0; k < 8; ++k){
950  if (j*8 + k >= size) break;
951  if (l.binary_weights[index + k] > 0) c = (c | 1<<k);
952  }
953  fwrite(&c, sizeof(char), 1, fp);
954  }
955  }
956 }
957 
959 {
960  if(l.binary){
961  //save_convolutional_weights_binary(l, fp);
962  //return;
963  }
964 #ifdef GPU
965  if(gpu_index >= 0){
967  }
968 #endif
969  int num = l.nweights;
970  fwrite(l.biases, sizeof(float), l.n, fp);
971  if (l.batch_normalize){
972  fwrite(l.scales, sizeof(float), l.n, fp);
973  fwrite(l.rolling_mean, sizeof(float), l.n, fp);
974  fwrite(l.rolling_variance, sizeof(float), l.n, fp);
975  }
976  fwrite(l.weights, sizeof(float), num, fp);
977 }
978 
979 void save_batchnorm_weights(layer l, FILE *fp)
980 {
981 #ifdef GPU
982  if(gpu_index >= 0){
983  pull_batchnorm_layer(l);
984  }
985 #endif
986  fwrite(l.scales, sizeof(float), l.c, fp);
987  fwrite(l.rolling_mean, sizeof(float), l.c, fp);
988  fwrite(l.rolling_variance, sizeof(float), l.c, fp);
989 }
990 
991 void save_connected_weights(layer l, FILE *fp)
992 {
993 #ifdef GPU
994  if(gpu_index >= 0){
995  pull_connected_layer(l);
996  }
997 #endif
998  fwrite(l.biases, sizeof(float), l.outputs, fp);
999  fwrite(l.weights, sizeof(float), l.outputs*l.inputs, fp);
1000  if (l.batch_normalize){
1001  fwrite(l.scales, sizeof(float), l.outputs, fp);
1002  fwrite(l.rolling_mean, sizeof(float), l.outputs, fp);
1003  fwrite(l.rolling_variance, sizeof(float), l.outputs, fp);
1004  }
1005 }
1006 
1007 void save_weights_upto(network *net, char *filename, int cutoff)
1008 {
1009 #ifdef GPU
1010  if(net->gpu_index >= 0){
1011  cuda_set_device(net->gpu_index);
1012  }
1013 #endif
1014  fprintf(stderr, "Saving weights to %s\n", filename);
1015  FILE *fp = fopen(filename, "wb");
1016  if(!fp) file_error(filename);
1017 
1018  int major = 0;
1019  int minor = 2;
1020  int revision = 0;
1021  fwrite(&major, sizeof(int), 1, fp);
1022  fwrite(&minor, sizeof(int), 1, fp);
1023  fwrite(&revision, sizeof(int), 1, fp);
1024  fwrite(net->seen, sizeof(size_t), 1, fp);
1025 
1026  int i;
1027  for(i = 0; i < net->n && i < cutoff; ++i){
1028  layer l = net->layers[i];
1029  if (l.dontsave) continue;
1030  if(l.type == CONVOLUTIONAL || l.type == DECONVOLUTIONAL){
1032  } if(l.type == CONNECTED){
1033  save_connected_weights(l, fp);
1034  } if(l.type == BATCHNORM){
1035  save_batchnorm_weights(l, fp);
1036  } if(l.type == RNN){
1040  } if (l.type == LSTM) {
1041  save_connected_weights(*(l.wi), fp);
1042  save_connected_weights(*(l.wf), fp);
1043  save_connected_weights(*(l.wo), fp);
1044  save_connected_weights(*(l.wg), fp);
1045  save_connected_weights(*(l.ui), fp);
1046  save_connected_weights(*(l.uf), fp);
1047  save_connected_weights(*(l.uo), fp);
1048  save_connected_weights(*(l.ug), fp);
1049  } if (l.type == GRU) {
1050  if(1){
1051  save_connected_weights(*(l.wz), fp);
1052  save_connected_weights(*(l.wr), fp);
1053  save_connected_weights(*(l.wh), fp);
1054  save_connected_weights(*(l.uz), fp);
1055  save_connected_weights(*(l.ur), fp);
1056  save_connected_weights(*(l.uh), fp);
1057  }else{
1061  }
1062  } if(l.type == CRNN){
1066  } if(l.type == LOCAL){
1067 #ifdef GPU
1068  if(gpu_index >= 0){
1069  pull_local_layer(l);
1070  }
1071 #endif
1072  int locations = l.out_w*l.out_h;
1073  int size = l.size*l.size*l.c*l.n*locations;
1074  fwrite(l.biases, sizeof(float), l.outputs, fp);
1075  fwrite(l.weights, sizeof(float), size, fp);
1076  }
1077  }
1078  fclose(fp);
1079 }
1080 void save_weights(network *net, char *filename)
1081 {
1082  save_weights_upto(net, filename, net->n);
1083 }
1084 
1085 void transpose_matrix(float *a, int rows, int cols)
1086 {
1087  float *transpose = calloc(rows*cols, sizeof(float));
1088  int x, y;
1089  for(x = 0; x < rows; ++x){
1090  for(y = 0; y < cols; ++y){
1091  transpose[y*rows + x] = a[x*cols + y];
1092  }
1093  }
1094  memcpy(a, transpose, rows*cols*sizeof(float));
1095  free(transpose);
1096 }
1097 
1098 void load_connected_weights(layer l, FILE *fp, int transpose)
1099 {
1100  fread(l.biases, sizeof(float), l.outputs, fp);
1101  fread(l.weights, sizeof(float), l.outputs*l.inputs, fp);
1102  if(transpose){
1104  }
1105  //printf("Biases: %f mean %f variance\n", mean_array(l.biases, l.outputs), variance_array(l.biases, l.outputs));
1106  //printf("Weights: %f mean %f variance\n", mean_array(l.weights, l.outputs*l.inputs), variance_array(l.weights, l.outputs*l.inputs));
1107  if (l.batch_normalize && (!l.dontloadscales)){
1108  fread(l.scales, sizeof(float), l.outputs, fp);
1109  fread(l.rolling_mean, sizeof(float), l.outputs, fp);
1110  fread(l.rolling_variance, sizeof(float), l.outputs, fp);
1111  //printf("Scales: %f mean %f variance\n", mean_array(l.scales, l.outputs), variance_array(l.scales, l.outputs));
1112  //printf("rolling_mean: %f mean %f variance\n", mean_array(l.rolling_mean, l.outputs), variance_array(l.rolling_mean, l.outputs));
1113  //printf("rolling_variance: %f mean %f variance\n", mean_array(l.rolling_variance, l.outputs), variance_array(l.rolling_variance, l.outputs));
1114  }
1115 #ifdef GPU
1116  if(gpu_index >= 0){
1117  push_connected_layer(l);
1118  }
1119 #endif
1120 }
1121 
1123 {
1124  fread(l.scales, sizeof(float), l.c, fp);
1125  fread(l.rolling_mean, sizeof(float), l.c, fp);
1126  fread(l.rolling_variance, sizeof(float), l.c, fp);
1127 #ifdef GPU
1128  if(gpu_index >= 0){
1129  push_batchnorm_layer(l);
1130  }
1131 #endif
1132 }
1133 
1135 {
1136  fread(l.biases, sizeof(float), l.n, fp);
1137  if (l.batch_normalize && (!l.dontloadscales)){
1138  fread(l.scales, sizeof(float), l.n, fp);
1139  fread(l.rolling_mean, sizeof(float), l.n, fp);
1140  fread(l.rolling_variance, sizeof(float), l.n, fp);
1141  }
1142  int size = l.c*l.size*l.size;
1143  int i, j, k;
1144  for(i = 0; i < l.n; ++i){
1145  float mean = 0;
1146  fread(&mean, sizeof(float), 1, fp);
1147  for(j = 0; j < size/8; ++j){
1148  int index = i*size + j*8;
1149  unsigned char c = 0;
1150  fread(&c, sizeof(char), 1, fp);
1151  for(k = 0; k < 8; ++k){
1152  if (j*8 + k >= size) break;
1153  l.weights[index + k] = (c & 1<<k) ? mean : -mean;
1154  }
1155  }
1156  }
1157 #ifdef GPU
1158  if(gpu_index >= 0){
1160  }
1161 #endif
1162 }
1163 
1165 {
1166  if(l.binary){
1167  //load_convolutional_weights_binary(l, fp);
1168  //return;
1169  }
1170  if(l.numload) l.n = l.numload;
1171  int num = l.c/l.groups*l.n*l.size*l.size;
1172  fread(l.biases, sizeof(float), l.n, fp);
1173  if (l.batch_normalize && (!l.dontloadscales)){
1174  fread(l.scales, sizeof(float), l.n, fp);
1175  fread(l.rolling_mean, sizeof(float), l.n, fp);
1176  fread(l.rolling_variance, sizeof(float), l.n, fp);
1177  if(0){
1178  int i;
1179  for(i = 0; i < l.n; ++i){
1180  printf("%g, ", l.rolling_mean[i]);
1181  }
1182  printf("\n");
1183  for(i = 0; i < l.n; ++i){
1184  printf("%g, ", l.rolling_variance[i]);
1185  }
1186  printf("\n");
1187  }
1188  if(0){
1189  fill_cpu(l.n, 0, l.rolling_mean, 1);
1190  fill_cpu(l.n, 0, l.rolling_variance, 1);
1191  }
1192  if(0){
1193  int i;
1194  for(i = 0; i < l.n; ++i){
1195  printf("%g, ", l.rolling_mean[i]);
1196  }
1197  printf("\n");
1198  for(i = 0; i < l.n; ++i){
1199  printf("%g, ", l.rolling_variance[i]);
1200  }
1201  printf("\n");
1202  }
1203  }
1204  fread(l.weights, sizeof(float), num, fp);
1205  //if(l.c == 3) scal_cpu(num, 1./256, l.weights, 1);
1206  if (l.flipped) {
1207  transpose_matrix(l.weights, l.c*l.size*l.size, l.n);
1208  }
1209  //if (l.binary) binarize_weights(l.weights, l.n, l.c*l.size*l.size, l.weights);
1210 #ifdef GPU
1211  if(gpu_index >= 0){
1213  }
1214 #endif
1215 }
1216 
1217 
1218 void load_weights_upto(network *net, char *filename, int start, int cutoff)
1219 {
1220 #ifdef GPU
1221  if(net->gpu_index >= 0){
1222  cuda_set_device(net->gpu_index);
1223  }
1224 #endif
1225  fprintf(stderr, "Loading weights from %s...", filename);
1226  fflush(stdout);
1227  FILE *fp = fopen(filename, "rb");
1228  if(!fp) file_error(filename);
1229 
1230  int major;
1231  int minor;
1232  int revision;
1233  fread(&major, sizeof(int), 1, fp);
1234  fread(&minor, sizeof(int), 1, fp);
1235  fread(&revision, sizeof(int), 1, fp);
1236  if ((major*10 + minor) >= 2 && major < 1000 && minor < 1000){
1237  fread(net->seen, sizeof(size_t), 1, fp);
1238  } else {
1239  int iseen = 0;
1240  fread(&iseen, sizeof(int), 1, fp);
1241  *net->seen = iseen;
1242  }
1243  int transpose = (major > 1000) || (minor > 1000);
1244 
1245  int i;
1246  for(i = start; i < net->n && i < cutoff; ++i){
1247  layer l = net->layers[i];
1248  if (l.dontload) continue;
1249  if(l.type == CONVOLUTIONAL || l.type == DECONVOLUTIONAL){
1251  }
1252  if(l.type == CONNECTED){
1253  load_connected_weights(l, fp, transpose);
1254  }
1255  if(l.type == BATCHNORM){
1256  load_batchnorm_weights(l, fp);
1257  }
1258  if(l.type == CRNN){
1262  }
1263  if(l.type == RNN){
1264  load_connected_weights(*(l.input_layer), fp, transpose);
1265  load_connected_weights(*(l.self_layer), fp, transpose);
1266  load_connected_weights(*(l.output_layer), fp, transpose);
1267  }
1268  if (l.type == LSTM) {
1269  load_connected_weights(*(l.wi), fp, transpose);
1270  load_connected_weights(*(l.wf), fp, transpose);
1271  load_connected_weights(*(l.wo), fp, transpose);
1272  load_connected_weights(*(l.wg), fp, transpose);
1273  load_connected_weights(*(l.ui), fp, transpose);
1274  load_connected_weights(*(l.uf), fp, transpose);
1275  load_connected_weights(*(l.uo), fp, transpose);
1276  load_connected_weights(*(l.ug), fp, transpose);
1277  }
1278  if (l.type == GRU) {
1279  if(1){
1280  load_connected_weights(*(l.wz), fp, transpose);
1281  load_connected_weights(*(l.wr), fp, transpose);
1282  load_connected_weights(*(l.wh), fp, transpose);
1283  load_connected_weights(*(l.uz), fp, transpose);
1284  load_connected_weights(*(l.ur), fp, transpose);
1285  load_connected_weights(*(l.uh), fp, transpose);
1286  }else{
1287  load_connected_weights(*(l.reset_layer), fp, transpose);
1288  load_connected_weights(*(l.update_layer), fp, transpose);
1289  load_connected_weights(*(l.state_layer), fp, transpose);
1290  }
1291  }
1292  if(l.type == LOCAL){
1293  int locations = l.out_w*l.out_h;
1294  int size = l.size*l.size*l.c*l.n*locations;
1295  fread(l.biases, sizeof(float), l.outputs, fp);
1296  fread(l.weights, sizeof(float), size, fp);
1297 #ifdef GPU
1298  if(gpu_index >= 0){
1299  push_local_layer(l);
1300  }
1301 #endif
1302  }
1303  }
1304  fprintf(stderr, "Done!\n");
1305  fclose(fp);
1306 }
1307 
1308 void load_weights(network *net, char *filename)
1309 {
1310  load_weights_upto(net, filename, 0, net->n);
1311 }
1312 
float ignore_thresh
Definition: darknet.h:196
int max_boxes
Definition: darknet.h:143
int batch
Definition: parser.c:122
Definition: darknet.h:82
void save_batchnorm_weights(layer l, FILE *fp)
Definition: parser.c:979
float min_ratio
Definition: darknet.h:472
void list_insert(list *l, void *val)
Definition: list.c:40
size_t workspace_size
Definition: darknet.h:336
ACTIVATION activation
Definition: darknet.h:121
ACTIVATION
Definition: darknet.h:56
Definition: darknet.h:596
float thresh
Definition: darknet.h:198
void parse_data(char *data, float *a, int n)
Definition: parser.c:105
int min_crop
Definition: darknet.h:470
void transpose_matrix(float *a, int rows, int cols)
Definition: parser.c:1085
float * scales
Definition: darknet.h:239
float decay
Definition: darknet.h:447
route_layer parse_route(list *options, size_params params, network *net)
Definition: parser.c:601
float object_scale
Definition: darknet.h:190
detection_layer make_detection_layer(int batch, int inputs, int n, int side, int classes, int coords, int rescore)
float * biases
Definition: darknet.h:236
void save_weights_upto(network *net, char *filename, int cutoff)
Definition: parser.c:1007
int batch
Definition: darknet.h:436
layer parse_activation(list *options, size_params params)
Definition: parser.c:578
float temperature
Definition: darknet.h:210
int noloss
Definition: darknet.h:170
int * map
Definition: darknet.h:218
int w
Definition: darknet.h:140
struct layer * output_layer
Definition: darknet.h:297
Definition: darknet.h:87
layer parse_shortcut(list *options, size_params params, network *net)
Definition: parser.c:539
int n
Definition: darknet.h:142
int truths
Definition: darknet.h:139
layer make_rnn_layer(int batch, int inputs, int outputs, int steps, ACTIVATION activation, int batch_normalize, int adam)
Definition: rnn_layer.c:29
struct node * next
Definition: darknet.h:598
int rescore
Definition: darknet.h:175
struct layer * wg
Definition: darknet.h:332
float learning_rate
Definition: darknet.h:445
layer parse_gru(list *options, size_params params)
Definition: parser.c:238
float scale
Definition: darknet.h:212
float hue
Definition: darknet.h:478
float momentum
Definition: darknet.h:446
int spatial
Definition: darknet.h:150
int binary
Definition: darknet.h:155
layer parse_l2norm(list *options, size_params params)
Definition: parser.c:559
int step
Definition: darknet.h:452
float * truth
Definition: darknet.h:485
float * rolling_variance
Definition: darknet.h:259
void option_unused(list *l)
Definition: option_list.c:79
Definition: darknet.h:73
size_t * seen
Definition: darknet.h:437
int gpu_index
Definition: darknet.h:481
void parse_net_options(list *options, network *net)
Definition: parser.c:655
layer get_network_output_layer(network *net)
Definition: network.c:699
char * option_find_str(list *l, char *key, char *def)
Definition: option_list.c:104
layer make_yolo_layer(int batch, int w, int h, int n, int total, int *mask, int classes)
Definition: yolo_layer.c:13
layer parse_rnn(list *options, size_params params)
Definition: parser.c:224
int size
Definition: darknet.h:603
Definition: parser.c:40
void pull_convolutional_layer(layer l)
void free_list(list *l)
Definition: list.c:67
layer make_logistic_layer(int batch, int inputs)
float scale
Definition: darknet.h:449
layer parse_connected(list *options, size_params params)
Definition: parser.c:259
void load_convolutional_weights(layer l, FILE *fp)
Definition: parser.c:1164
int absolute
Definition: darknet.h:201
layer parse_upsample(list *options, size_params params, network *net)
Definition: parser.c:592
struct layer * update_layer
Definition: darknet.h:300
struct layer * uz
Definition: darknet.h:320
learning_rate_policy
Definition: darknet.h:430
layer parse_batchnorm(list *options, size_params params)
Definition: parser.c:533
float max_ratio
Definition: darknet.h:471
int * parse_yolo_mask(char *a, int *num)
Definition: parser.c:285
char * key
Definition: option_list.h:6
int out_w
Definition: darknet.h:141
char * type
Definition: parser.c:41
int notruth
Definition: darknet.h:467
int max_crop
Definition: darknet.h:469
int read_option(char *s, list *options)
Definition: option_list.c:52
int is_network(section *s)
Definition: parser.c:736
convolutional_layer 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)
struct layer * uh
Definition: darknet.h:324
avgpool_layer make_avgpool_layer(int batch, int w, int h, int c)
Definition: avgpool_layer.c:5
cost_layer parse_cost(list *options, size_params params)
Definition: parser.c:429
int nweights
Definition: darknet.h:136
int burn_in
Definition: darknet.h:457
maxpool_layer parse_maxpool(list *options, size_params params)
Definition: parser.c:483
LAYER_TYPE
Definition: darknet.h:64
int out_c
Definition: darknet.h:141
Definition: darknet.h:79
struct layer * state_layer
Definition: darknet.h:301
Definition: option_list.h:5
char * option_find(list *l, char *key)
Definition: option_list.c:91
layer make_crnn_layer(int batch, int h, int w, int c, int hidden_filters, int output_filters, int steps, ACTIVATION activation, int batch_normalize)
Definition: crnn_layer.c:29
void load_connected_weights(layer l, FILE *fp, int transpose)
Definition: parser.c:1098
struct layer * wh
Definition: darknet.h:323
int * steps
Definition: darknet.h:455
float class_scale
Definition: darknet.h:193
layer make_gru_layer(int batch, int inputs, int outputs, int steps, int batch_normalize, int adam)
Definition: gru_layer.c:29
list * options
Definition: parser.c:42
crop_layer parse_crop(list *options, size_params params)
Definition: parser.c:441
int max_batches
Definition: darknet.h:453
float clip
Definition: darknet.h:491
float * workspace
Definition: darknet.h:487
void file_error(char *s)
Definition: utils.c:281
dropout_layer parse_dropout(list *options, size_params params)
Definition: parser.c:513
struct layer * reset_layer
Definition: darknet.h:299
Definition: darknet.h:431
Definition: darknet.h:74
network * net
Definition: parser.c:129
struct layer * ui
Definition: darknet.h:329
layer parse_lstm(list *options, size_params params)
Definition: parser.c:249
float shift
Definition: darknet.h:166
struct layer * wf
Definition: darknet.h:328
float aspect
Definition: darknet.h:475
int batch_normalize
Definition: darknet.h:129
void fill_cpu(int N, float ALPHA, float *X, int INCX)
Definition: blas.c:190
layer parse_iseg(list *options, size_params params)
Definition: parser.c:344
float truth_thresh
Definition: darknet.h:197
tree * read_tree(char *filename)
Definition: tree.c:83
int size
Definition: darknet.h:145
void save_connected_weights(layer l, FILE *fp)
Definition: parser.c:991
int option_find_int_quiet(list *l, char *key, int def)
Definition: option_list.c:120
int center
Definition: darknet.h:473
layer * layers
Definition: darknet.h:441
float B1
Definition: darknet.h:460
float eps
Definition: darknet.h:462
LAYER_TYPE string_to_layer_type(char *type)
Definition: parser.c:47
Definition: darknet.h:431
void flatten(float *x, int size, int layers, int batch, int forward)
Definition: blas.c:32
char * fgetl(FILE *fp)
Definition: utils.c:335
int shortcut
Definition: darknet.h:130
int subdivisions
Definition: darknet.h:440
int h
Definition: darknet.h:140
int numload
Definition: darknet.h:208
Definition: darknet.h:431
float * delta
Definition: darknet.h:245
int out_h
Definition: darknet.h:141
int background
Definition: darknet.h:174
Definition: darknet.h:80
float * scales
Definition: darknet.h:454
float beta
Definition: darknet.h:186
int inputs
Definition: darknet.h:134
struct layer * wi
Definition: darknet.h:330
layer make_l2norm_layer(int batch, int inputs)
Definition: l2norm_layer.c:12
layer parse_normalization(list *options, size_params params)
Definition: parser.c:523
layer make_activation_layer(int batch, int inputs, ACTIVATION activation)
ACTIVATION get_activation(char *s)
Definition: activations.c:45
Definition: darknet.h:77
struct layer * wz
Definition: darknet.h:319
int dontload
Definition: darknet.h:205
layer parse_softmax(list *options, size_params params)
Definition: parser.c:270
layer make_iseg_layer(int batch, int w, int h, int classes, int ids)
Definition: iseg_layer.c:13
int time_steps
Definition: parser.c:128
layer parse_logistic(list *options, size_params params)
Definition: parser.c:569
int noadjust
Definition: darknet.h:178
float B2
Definition: darknet.h:461
struct layer * ur
Definition: darknet.h:322
float * output
Definition: darknet.h:246
layer parse_crnn(list *options, size_params params)
Definition: parser.c:209
struct layer * input_layer
Definition: darknet.h:295
void load_batchnorm_weights(layer l, FILE *fp)
Definition: parser.c:1122
float saturation
Definition: darknet.h:477
float * rolling_mean
Definition: darknet.h:258
float option_find_float_quiet(list *l, char *key, float def)
Definition: option_list.c:127
layer make_normalization_layer(int batch, int w, int h, int c, int size, float alpha, float beta, float kappa)
Definition: darknet.h:88
float mask_scale
Definition: darknet.h:192
void * val
Definition: darknet.h:597
dropout_layer make_dropout_layer(int batch, int inputs, float probability)
Definition: dropout_layer.c:7
cost_layer make_cost_layer(int batch, int inputs, COST_TYPE cost_type, float scale)
Definition: cost_layer.c:41
layer parse_deconvolutional(list *options, size_params params)
Definition: parser.c:153
layer parse_yolo(list *options, size_params params)
Definition: parser.c:306
Definition: darknet.h:431
COST_TYPE
Definition: darknet.h:97
void save_convolutional_weights(layer l, FILE *fp)
Definition: parser.c:958
int random
Definition: darknet.h:479
int groups
Definition: darknet.h:144
void binarize_weights(float *weights, int n, int size, float *binary)
layer make_deconvolutional_layer(int batch, int h, int w, int c, int n, int size, int stride, int padding, ACTIVATION activation, int batch_normalize, int adam)
struct layer * ug
Definition: darknet.h:331
node * front
Definition: darknet.h:604
softmax_layer make_softmax_layer(int batch, int inputs, int groups)
Definition: softmax_layer.c:11
int sqrt
Definition: darknet.h:152
detection_layer parse_detection(list *options, size_params params)
Definition: parser.c:405
Definition: darknet.h:83
struct layer * wr
Definition: darknet.h:321
int forced
Definition: darknet.h:132
convolutional_layer parse_convolutional(list *options, size_params params)
Definition: parser.c:179
void free_section(section *s)
Definition: parser.c:89
int truths
Definition: darknet.h:466
void save_weights(network *net, char *filename)
Definition: parser.c:1080
void push_convolutional_layer(layer l)
int inputs
Definition: parser.c:123
struct size_params size_params
float dot
Definition: darknet.h:161
void cuda_set_device(int n)
Definition: cuda.c:176
local_layer make_local_layer(int batch, int h, int w, int c, int n, int size, int stride, int pad, ACTIVATION activation)
Definition: local_layer.c:26
learning_rate_policy get_policy(char *s)
Definition: parser.c:642
float alpha
Definition: darknet.h:185
Definition: darknet.h:602
int c
Definition: darknet.h:140
int random
Definition: darknet.h:195
int num_steps
Definition: darknet.h:456
struct layer * uf
Definition: darknet.h:327
tree * hierarchy
Definition: darknet.h:482
int * read_map(char *filename)
Definition: utils.c:59
COST_TYPE get_cost_type(char *s)
Definition: cost_layer.c:10
float option_find_float(list *l, char *key, float def)
Definition: option_list.c:134
Definition: darknet.h:90
int classfix
Definition: darknet.h:200
int c
Definition: darknet.h:468
layer make_connected_layer(int batch, int inputs, int outputs, ACTIVATION activation, int batch_normalize, int adam)
layer parse_reorg(list *options, size_params params)
Definition: parser.c:465
int softmax
Definition: darknet.h:171
float jitter
Definition: darknet.h:163
int gpu_index
Definition: cuda.c:1
local_layer parse_local(list *options, size_params params)
Definition: parser.c:132
int outputs
Definition: darknet.h:465
LAYER_TYPE type
Definition: darknet.h:120
list * read_cfg(char *filename)
Definition: parser.c:891
float * input
Definition: darknet.h:484
Definition: darknet.h:93
layer parse_region(list *options, size_params params)
Definition: parser.c:353
int dontloadscales
Definition: darknet.h:207
list * make_list()
Definition: list.c:5
maxpool_layer make_maxpool_layer(int batch, int h, int w, int c, int size, int stride, int padding)
Definition: maxpool_layer.c:21
int bias_match
Definition: darknet.h:194
int h
Definition: darknet.h:468
int log
Definition: darknet.h:180
struct layer layer
Definition: darknet.h:117
int index
Definition: parser.c:127
int n
Definition: darknet.h:435
float * binary_weights
Definition: darknet.h:234
network * make_network(int n)
Definition: network.c:177
int time_steps
Definition: darknet.h:451
int flipped
Definition: darknet.h:133
int tanh
Definition: darknet.h:181
float * output
Definition: darknet.h:442
tree * softmax_tree
Definition: darknet.h:334
int dontsave
Definition: darknet.h:206
layer make_lstm_layer(int batch, int inputs, int outputs, int steps, int batch_normalize, int adam)
Definition: lstm_layer.c:29
Definition: darknet.h:81
int outputs
Definition: darknet.h:135
layer make_reorg_layer(int batch, int w, int h, int c, int stride, int reverse, int flatten, int extra)
Definition: reorg_layer.c:8
route_layer make_route_layer(int batch, int n, int *input_layers, int *input_sizes)
Definition: route_layer.c:7
float ratio
Definition: darknet.h:167
int adam
Definition: darknet.h:459
Definition: darknet.h:72
struct layer * uo
Definition: darknet.h:325
int reorg
Definition: darknet.h:179
struct layer * wo
Definition: darknet.h:326
void load_weights_upto(network *net, char *filename, int start, int cutoff)
Definition: parser.c:1218
avgpool_layer parse_avgpool(list *options, size_params params)
Definition: parser.c:500
Definition: darknet.h:431
void error(const char *s)
Definition: utils.c:253
learning_rate_policy policy
Definition: darknet.h:443
crop_layer make_crop_layer(int batch, int h, int w, int c, int crop_height, int crop_width, int flip, float angle, float saturation, float exposure)
Definition: crop_layer.c:16
float power
Definition: darknet.h:450
void strip(char *s)
Definition: utils.c:302
layer make_upsample_layer(int batch, int w, int h, int c, int stride)
Definition: upsample_layer.c:7
int option_find_int(list *l, char *key, int def)
Definition: option_list.c:112
Definition: darknet.h:89
float coord_scale
Definition: darknet.h:189
int w
Definition: darknet.h:468
layer make_shortcut_layer(int batch, int index, int w, int h, int c, int w2, int h2, int c2)
Definition: shortcut_layer.c:9
list classes
Definition: voc_label.py:9
void save_convolutional_weights_binary(layer l, FILE *fp)
Definition: parser.c:926
Definition: darknet.h:538
Definition: darknet.h:94
layer make_region_layer(int batch, int w, int h, int n, int classes, int coords)
Definition: region_layer.c:13
void load_weights(network *net, char *filename)
Definition: parser.c:1308
float noobject_scale
Definition: darknet.h:191
layer make_batchnorm_layer(int batch, int w, int h, int c)
int inputs
Definition: darknet.h:464
struct layer * self_layer
Definition: darknet.h:296
void load_convolutional_weights_binary(layer l, FILE *fp)
Definition: parser.c:1134
Definition: darknet.h:119
float exposure
Definition: darknet.h:476
float * weights
Definition: darknet.h:242
float gamma
Definition: darknet.h:448
network * parse_network_cfg(char *filename)
Definition: parser.c:742
float angle
Definition: darknet.h:474