| | |
| | | int c; |
| | | int index; |
| | | int time_steps; |
| | | network net; |
| | | } size_params; |
| | | |
| | | local_layer parse_local(list *options, size_params params) |
| | |
| | | int binary = option_find_int_quiet(options, "binary", 0); |
| | | int xnor = option_find_int_quiet(options, "xnor", 0); |
| | | |
| | | convolutional_layer layer = make_convolutional_layer(batch,h,w,c,n,size,stride,padding,activation, batch_normalize, binary, xnor); |
| | | convolutional_layer layer = make_convolutional_layer(batch,h,w,c,n,size,stride,padding,activation, batch_normalize, binary, xnor, params.net.adam); |
| | | layer.flipped = option_find_int_quiet(options, "flipped", 0); |
| | | layer.dot = option_find_float_quiet(options, "dot", 0); |
| | | if(params.net.adam){ |
| | | layer.B1 = params.net.B1; |
| | | layer.B2 = params.net.B2; |
| | | layer.eps = params.net.eps; |
| | | } |
| | | |
| | | return layer; |
| | | } |
| | |
| | | return layer; |
| | | } |
| | | |
| | | int *read_map(char *filename) |
| | | { |
| | | int n = 0; |
| | | int *map = 0; |
| | | char *str; |
| | | FILE *file = fopen(filename, "r"); |
| | | if(!file) file_error(filename); |
| | | while((str=fgetl(file))){ |
| | | ++n; |
| | | map = realloc(map, n*sizeof(int)); |
| | | map[n-1] = atoi(str); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | layer parse_region(list *options, size_params params) |
| | | { |
| | | int coords = option_find_int(options, "coords", 4); |
| | |
| | | l.object_scale = option_find_float(options, "object_scale", 1); |
| | | l.noobject_scale = option_find_float(options, "noobject_scale", 1); |
| | | l.class_scale = option_find_float(options, "class_scale", 1); |
| | | l.bias_match = option_find_int_quiet(options, "bias_match",0); |
| | | |
| | | char *tree_file = option_find_str(options, "tree", 0); |
| | | if (tree_file) l.softmax_tree = read_tree(tree_file); |
| | | char *map_file = option_find_str(options, "map", 0); |
| | | if (map_file) l.map = read_map(map_file); |
| | | |
| | | char *a = option_find_str(options, "anchors", 0); |
| | | if(a){ |
| | | int len = strlen(a); |
| | | int n = 1; |
| | | int i; |
| | | for(i = 0; i < len; ++i){ |
| | | if (a[i] == ',') ++n; |
| | | } |
| | | for(i = 0; i < n; ++i){ |
| | | float bias = atof(a); |
| | | l.biases[i] = bias; |
| | | a = strchr(a, ',')+1; |
| | | } |
| | | } |
| | | return l; |
| | | } |
| | | detection_layer parse_detection(list *options, size_params params) |
| | |
| | | net->batch *= net->time_steps; |
| | | net->subdivisions = subdivs; |
| | | |
| | | net->adam = option_find_int_quiet(options, "adam", 0); |
| | | if(net->adam){ |
| | | net->B1 = option_find_float(options, "B1", .9); |
| | | net->B2 = option_find_float(options, "B2", .999); |
| | | net->eps = option_find_float(options, "eps", .000001); |
| | | } |
| | | |
| | | net->h = option_find_int_quiet(options, "height",0); |
| | | net->w = option_find_int_quiet(options, "width",0); |
| | | net->c = option_find_int_quiet(options, "channels",0); |
| | |
| | | params.inputs = net.inputs; |
| | | params.batch = net.batch; |
| | | params.time_steps = net.time_steps; |
| | | params.net = net; |
| | | |
| | | size_t workspace_size = 0; |
| | | n = n->next; |
| | |
| | | fwrite(l.rolling_variance, sizeof(float), l.n, fp); |
| | | } |
| | | fwrite(l.weights, sizeof(float), num, fp); |
| | | if(l.adam){ |
| | | fwrite(l.m, sizeof(float), num, fp); |
| | | fwrite(l.v, sizeof(float), num, fp); |
| | | } |
| | | } |
| | | |
| | | void save_batchnorm_weights(layer l, FILE *fp) |
| | |
| | | { |
| | | #ifdef GPU |
| | | if(net.gpu_index >= 0){ |
| | | cuda_set_device(net.gpu_index); |
| | | cuda_set_device(net.gpu_index); |
| | | } |
| | | #endif |
| | | fprintf(stderr, "Saving weights to %s\n", filename); |
| | |
| | | //return; |
| | | } |
| | | int num = l.n*l.c*l.size*l.size; |
| | | fread(l.biases, sizeof(float), l.n, fp); |
| | | if (l.batch_normalize && (!l.dontloadscales)){ |
| | | fread(l.scales, sizeof(float), l.n, fp); |
| | | fread(l.rolling_mean, sizeof(float), l.n, fp); |
| | | fread(l.rolling_variance, sizeof(float), l.n, fp); |
| | | if(0){ |
| | | fread(l.biases + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); |
| | | if (l.batch_normalize && (!l.dontloadscales)){ |
| | | fread(l.scales + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); |
| | | fread(l.rolling_mean + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); |
| | | fread(l.rolling_variance + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); |
| | | } |
| | | fread(l.weights + ((l.n != 1374)?0:5*l.c*l.size*l.size), sizeof(float), num, fp); |
| | | }else{ |
| | | fread(l.biases, sizeof(float), l.n, fp); |
| | | if (l.batch_normalize && (!l.dontloadscales)){ |
| | | fread(l.scales, sizeof(float), l.n, fp); |
| | | fread(l.rolling_mean, sizeof(float), l.n, fp); |
| | | fread(l.rolling_variance, sizeof(float), l.n, fp); |
| | | } |
| | | fread(l.weights, sizeof(float), num, fp); |
| | | } |
| | | fread(l.weights, sizeof(float), num, fp); |
| | | if(l.adam){ |
| | | fread(l.m, sizeof(float), num, fp); |
| | | fread(l.v, sizeof(float), num, fp); |
| | | } |
| | | //if(l.c == 3) scal_cpu(num, 1./256, l.weights, 1); |
| | | if (l.flipped) { |
| | | transpose_matrix(l.weights, l.c*l.size*l.size, l.n); |
| | |
| | | { |
| | | #ifdef GPU |
| | | if(net->gpu_index >= 0){ |
| | | cuda_set_device(net->gpu_index); |
| | | cuda_set_device(net->gpu_index); |
| | | } |
| | | #endif |
| | | fprintf(stderr, "Loading weights from %s...", filename); |