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
60 if (strcmp(type,
"[deconv]")==0
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
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;
112 for(i = 0; i < n && !done; ++i){
113 while(*++next !=
'\0' && *next !=
',');
114 if(*next ==
'\0') done = 1;
116 sscanf(curr,
"%g", &a[i]);
138 char *activation_s =
option_find_str(options,
"activation",
"logistic");
146 if(!(h && w && c))
error(
"Layer before local layer must output image.");
159 char *activation_s =
option_find_str(options,
"activation",
"logistic");
167 if(!(h && w && c))
error(
"Layer before deconvolutional layer must output image.");
171 if(pad) padding = size/2;
173 layer l =
make_deconvolutional_layer(batch,h,w,c,n,size,stride,padding, activation, batch_normalize, params.
net->
adam);
187 if(pad) padding = size/2;
189 char *activation_s =
option_find_str(options,
"activation",
"logistic");
197 if(!(h && w && c))
error(
"Layer before convolutional layer must output image.");
202 convolutional_layer layer =
make_convolutional_layer(batch,h,w,c,n,groups,size,stride,padding,activation, batch_normalize, binary, xnor, params.
net->
adam);
213 char *activation_s =
option_find_str(options,
"activation",
"logistic");
227 char *activation_s =
option_find_str(options,
"activation",
"logistic");
262 char *activation_s =
option_find_str(options,
"activation",
"logistic");
292 for(i = 0; i < len; ++i){
293 if (a[i] ==
',') ++n;
295 mask = calloc(n,
sizeof(
int));
296 for(i = 0; i < n; ++i){
299 a = strchr(a,
',')+1;
332 for(i = 0; i < len; ++i){
333 if (a[i] ==
',') ++n;
335 for(i = 0; i < n; ++i){
336 float bias = atof(a);
338 a = strchr(a,
',')+1;
393 for(i = 0; i < len; ++i){
394 if (a[i] ==
',') ++n;
396 for(i = 0; i < n; ++i){
397 float bias = atof(a);
399 a = strchr(a,
',')+1;
455 if(!(h && w && c))
error(
"Layer before crop layer must output image.");
477 if(!(h && w && c))
error(
"Layer before reorg layer must output image.");
494 if(!(h && w && c))
error(
"Layer before maxpool layer must output image.");
507 if(!(h && w && c))
error(
"Layer before avgpool layer must output image.");
605 if(!l)
error(
"Route Layer must specify input layers");
608 for(i = 0; i < len; ++i){
609 if (l[i] ==
',') ++n;
612 int *layers = calloc(n,
sizeof(
int));
613 int *sizes = calloc(n,
sizeof(
int));
614 for(i = 0; i < n; ++i){
616 l = strchr(l,
',')+1;
629 for(i = 1; i < n; ++i){
630 int index = layers[i];
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);
664 net->
batch /= subdivs;
693 if(!net->
inputs && !(net->
h && net->
w && net->
c))
error(
"No input parameters supplied");
705 if(!l || !p)
error(
"STEPS policy must have steps and scales in cfg file");
710 for(i = 0; i < len; ++i){
711 if (l[i] ==
',') ++n;
713 int *steps = calloc(n,
sizeof(
int));
714 float *scales = calloc(n,
sizeof(
float));
715 for(i = 0; i < n; ++i){
717 float scale = atof(p);
718 l = strchr(l,
',')+1;
719 p = strchr(p,
',')+1;
738 return (strcmp(s->
type,
"[net]")==0
739 || strcmp(s->
type,
"[network]")==0);
746 if(!n)
error(
"Config file has no sections");
764 size_t workspace_size = 0;
768 fprintf(stderr,
"layer filters size input output\n");
770 params.
index = count;
771 fprintf(stderr,
"%5d ", count);
780 }
else if(lt ==
LOCAL){
792 }
else if (lt ==
LSTM) {
794 }
else if(lt ==
CRNN){
798 }
else if(lt ==
CROP){
800 }
else if(lt ==
COST){
804 }
else if(lt ==
YOLO){
806 }
else if(lt ==
ISEG){
819 }
else if(lt ==
REORG){
823 }
else if(lt ==
ROUTE){
834 l.output_gpu = net->
layers[count-1].output_gpu;
835 l.delta_gpu = net->
layers[count-1].delta_gpu;
838 fprintf(stderr,
"Type not recognized: %s\n", s->
type);
852 if (l.workspace_size > workspace_size) workspace_size = l.
workspace_size;
860 params.
inputs = l.outputs;
872 net->output_gpu = out.output_gpu;
880 net->
workspace = cuda_make_array(0, (workspace_size-1)/
sizeof(
float)+1);
893 FILE *file = fopen(filename,
"r");
899 while((line=
fgetl(file)) != 0){
904 current = malloc(
sizeof(
section));
907 current->
type = line;
916 fprintf(stderr,
"Config file error line %d, could parse: %s\n", nu, line);
936 fwrite(l.
biases,
sizeof(
float), l.
n, fp);
938 fwrite(l.
scales,
sizeof(
float), l.
n, fp);
942 for(i = 0; i < l.
n; ++i){
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;
949 for(k = 0; k < 8; ++k){
950 if (j*8 + k >= size)
break;
953 fwrite(&c,
sizeof(
char), 1, fp);
970 fwrite(l.
biases,
sizeof(
float), l.
n, fp);
972 fwrite(l.
scales,
sizeof(
float), l.
n, fp);
976 fwrite(l.
weights,
sizeof(
float), num, fp);
983 pull_batchnorm_layer(l);
986 fwrite(l.
scales,
sizeof(
float), l.
c, fp);
995 pull_connected_layer(l);
1014 fprintf(stderr,
"Saving weights to %s\n", filename);
1015 FILE *fp = fopen(filename,
"wb");
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);
1027 for(i = 0; i < net->
n && i < cutoff; ++i){
1069 pull_local_layer(l);
1075 fwrite(l.
weights,
sizeof(
float), size, fp);
1087 float *transpose = calloc(rows*cols,
sizeof(
float));
1089 for(x = 0; x < rows; ++x){
1090 for(y = 0; y < cols; ++y){
1091 transpose[y*rows + x] = a[x*cols + y];
1094 memcpy(a, transpose, rows*cols*
sizeof(
float));
1117 push_connected_layer(l);
1124 fread(l.
scales,
sizeof(
float), l.
c, fp);
1129 push_batchnorm_layer(l);
1136 fread(l.
biases,
sizeof(
float), l.
n, fp);
1138 fread(l.
scales,
sizeof(
float), l.
n, fp);
1144 for(i = 0; i < l.
n; ++i){
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;
1172 fread(l.
biases,
sizeof(
float), l.
n, fp);
1174 fread(l.
scales,
sizeof(
float), l.
n, fp);
1179 for(i = 0; i < l.
n; ++i){
1183 for(i = 0; i < l.
n; ++i){
1194 for(i = 0; i < l.
n; ++i){
1198 for(i = 0; i < l.
n; ++i){
1204 fread(l.
weights,
sizeof(
float), num, fp);
1225 fprintf(stderr,
"Loading weights from %s...", filename);
1227 FILE *fp = fopen(filename,
"rb");
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);
1240 fread(&iseen,
sizeof(
int), 1, fp);
1243 int transpose = (major > 1000) || (minor > 1000);
1246 for(i = start; i < net->
n && i < cutoff; ++i){
1296 fread(l.
weights,
sizeof(
float), size, fp);
1299 push_local_layer(l);
1304 fprintf(stderr,
"Done!\n");
void save_batchnorm_weights(layer l, FILE *fp)
void list_insert(list *l, void *val)
void parse_data(char *data, float *a, int n)
void transpose_matrix(float *a, int rows, int cols)
route_layer parse_route(list *options, size_params params, network *net)
detection_layer make_detection_layer(int batch, int inputs, int n, int side, int classes, int coords, int rescore)
void save_weights_upto(network *net, char *filename, int cutoff)
layer parse_activation(list *options, size_params params)
struct layer * output_layer
layer parse_shortcut(list *options, size_params params, network *net)
layer make_rnn_layer(int batch, int inputs, int outputs, int steps, ACTIVATION activation, int batch_normalize, int adam)
layer parse_gru(list *options, size_params params)
layer parse_l2norm(list *options, size_params params)
void option_unused(list *l)
void parse_net_options(list *options, network *net)
layer get_network_output_layer(network *net)
char * option_find_str(list *l, char *key, char *def)
layer make_yolo_layer(int batch, int w, int h, int n, int total, int *mask, int classes)
layer parse_rnn(list *options, size_params params)
void pull_convolutional_layer(layer l)
layer make_logistic_layer(int batch, int inputs)
layer parse_connected(list *options, size_params params)
void load_convolutional_weights(layer l, FILE *fp)
layer parse_upsample(list *options, size_params params, network *net)
struct layer * update_layer
layer parse_batchnorm(list *options, size_params params)
int * parse_yolo_mask(char *a, int *num)
int read_option(char *s, list *options)
int is_network(section *s)
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)
avgpool_layer make_avgpool_layer(int batch, int w, int h, int c)
cost_layer parse_cost(list *options, size_params params)
maxpool_layer parse_maxpool(list *options, size_params params)
struct layer * state_layer
char * option_find(list *l, char *key)
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)
void load_connected_weights(layer l, FILE *fp, int transpose)
layer make_gru_layer(int batch, int inputs, int outputs, int steps, int batch_normalize, int adam)
crop_layer parse_crop(list *options, size_params params)
dropout_layer parse_dropout(list *options, size_params params)
struct layer * reset_layer
layer parse_lstm(list *options, size_params params)
void fill_cpu(int N, float ALPHA, float *X, int INCX)
layer parse_iseg(list *options, size_params params)
tree * read_tree(char *filename)
void save_connected_weights(layer l, FILE *fp)
int option_find_int_quiet(list *l, char *key, int def)
LAYER_TYPE string_to_layer_type(char *type)
void flatten(float *x, int size, int layers, int batch, int forward)
layer make_l2norm_layer(int batch, int inputs)
layer parse_normalization(list *options, size_params params)
layer make_activation_layer(int batch, int inputs, ACTIVATION activation)
ACTIVATION get_activation(char *s)
layer parse_softmax(list *options, size_params params)
layer make_iseg_layer(int batch, int w, int h, int classes, int ids)
layer parse_logistic(list *options, size_params params)
layer parse_crnn(list *options, size_params params)
struct layer * input_layer
void load_batchnorm_weights(layer l, FILE *fp)
float option_find_float_quiet(list *l, char *key, float def)
layer make_normalization_layer(int batch, int w, int h, int c, int size, float alpha, float beta, float kappa)
dropout_layer make_dropout_layer(int batch, int inputs, float probability)
cost_layer make_cost_layer(int batch, int inputs, COST_TYPE cost_type, float scale)
layer parse_deconvolutional(list *options, size_params params)
layer parse_yolo(list *options, size_params params)
void save_convolutional_weights(layer l, FILE *fp)
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)
softmax_layer make_softmax_layer(int batch, int inputs, int groups)
detection_layer parse_detection(list *options, size_params params)
convolutional_layer parse_convolutional(list *options, size_params params)
void free_section(section *s)
void save_weights(network *net, char *filename)
void push_convolutional_layer(layer l)
struct size_params size_params
void cuda_set_device(int n)
local_layer make_local_layer(int batch, int h, int w, int c, int n, int size, int stride, int pad, ACTIVATION activation)
learning_rate_policy get_policy(char *s)
int * read_map(char *filename)
COST_TYPE get_cost_type(char *s)
float option_find_float(list *l, char *key, float def)
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)
local_layer parse_local(list *options, size_params params)
list * read_cfg(char *filename)
layer parse_region(list *options, size_params params)
maxpool_layer make_maxpool_layer(int batch, int h, int w, int c, int size, int stride, int padding)
network * make_network(int n)
layer make_lstm_layer(int batch, int inputs, int outputs, int steps, int batch_normalize, int adam)
layer make_reorg_layer(int batch, int w, int h, int c, int stride, int reverse, int flatten, int extra)
route_layer make_route_layer(int batch, int n, int *input_layers, int *input_sizes)
void load_weights_upto(network *net, char *filename, int start, int cutoff)
avgpool_layer parse_avgpool(list *options, size_params params)
void error(const char *s)
learning_rate_policy policy
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)
layer make_upsample_layer(int batch, int w, int h, int c, int stride)
int option_find_int(list *l, char *key, int def)
layer make_shortcut_layer(int batch, int index, int w, int h, int c, int w2, int h2, int c2)
void save_convolutional_weights_binary(layer l, FILE *fp)
layer make_region_layer(int batch, int w, int h, int n, int classes, int coords)
void load_weights(network *net, char *filename)
layer make_batchnorm_layer(int batch, int w, int h, int c)
struct layer * self_layer
void load_convolutional_weights_binary(layer l, FILE *fp)
network * parse_network_cfg(char *filename)